Excel VBA質問スレ Pa ..
68:デフォルトの名無しさん
07/12/17 22:35:37
ユーザーフォーム(モードレス)を残してワークシート最小化し
フォーム上のボタンを押してファイル選択ダイアログをだしているんですが
ファイル選択ダイアログがマウスクリックを受け付けてくれません
EXCEL 2000だと問題なく動くのですがEXCEL XPだとこの症状がでます
回避策ないでしょうか
69:デフォルトの名無しさん
07/12/17 22:42:18
コードさらせアホが。二度手間じゃ
70:デフォルトの名無しさん
07/12/17 22:51:51
こんな感じです
Private Sub Workbook_Open()
Dim oldState
oldState = Application.WindowState
Application.WindowState = xlMinimized
AppActivate "Microsoft Excel"
UserForm1.Show vbModeless
End Sub
Private Sub CommandButton1_Click()
Dim fname As String
fname = Application.GetOpenFilename(fileFilter:="txtファイル(*.txt),*.txt,txtファイル(*.txt),*.txt", Title:="txtファイルを選択")
If fname = "False" Then
Exit Sub
End If
End Sub
71:デフォルトの名無しさん
07/12/18 12:32:52
inputboxを、カイル君や冴子先生のようにするには?
とカイル君に聞いても教えてくれなかった。
72:デフォルトの名無しさん
07/12/18 12:56:20
モードレスは対応するバージョンがあるぜ
73:デフォルトの名無しさん
07/12/18 14:14:14
inputboxの外観でググっても出ないな。
74:デフォルトの名無しさん
07/12/18 17:24:28
>>68
何も確認せずにレスするんで恐縮だが、最小化じゃなくて、非表示(App~.Visible)とかじゃダメ?
75:デフォルトの名無しさん
07/12/18 18:54:33
>>65
>>67
ありがとうございました。
マクロの記録で確認しましたところ、shapes〜となるのですが、
そのコードで再度実行すると、やはりそこでエラーになってしまいました。
それからまたいろいろと調べていたところ、下記を参考にして解決いたしました。
やはり、EXCEL2007が原因だったようです。
URLリンク(www2.moug.net)
76:デフォルトの名無しさん
07/12/18 19:33:13
コントロールを扱うための知識はコントロールそのものではなく、
実はコレクションってのがVBAの真理だったりする
77:デフォルトの名無しさん
07/12/18 22:55:28
>>74
指摘のとおりに変えたらEXCEL XPで動きました ありがとうございます
明日EXCEL2000でも確認してみます
78:デフォルトの名無しさん
07/12/19 05:50:53
特定の範囲内でランダムに1つのセルの値(文字列)だけ残して他を消す(又は表示させない)
ようにしたいんですがなにか方法ないでしょうか。
ランダムに複数セルの値を取得する→消去 の流れでいいんでしょうか。
ご教授願います。すれ違いだったらすいません。
*例えばA1〜A5に文字列が入力されていて、マクロを実行したらA1のセルの値のみがのこって他を
消すようにできないかと思います。
79:デフォルトの名無しさん
07/12/19 09:42:17
マクロ歴三日の私が通りますよ
Sub rand()
Range("D" & 1).Formula = _
"=round(rand(),1)*10"
i = Range("D1").Value
Range("A" & i).Select
makura = MsgBox("are you sure to erase?", vbOKCancel)
If makura = vbOK Then Selection.ClearContents
End Sub
80:デフォルトの名無しさん
07/12/19 09:46:00
あ、残すのか・・・
英語とか・・・色々すまん煎ってくるわ
81:デフォルトの名無しさん
07/12/19 10:06:52
Sub rand()
yarinaosi:
Range("D" & 1).Formula = _
"=round(rand(),1)*10"
i = Range("D1").Value
If i = 0 Then GoTo yarinaosi
Range("A" & i).Select
Selection.Cut
Range("B" & i).Select
ActiveSheet.Paste
Range("A1:A10").Clear
Range("B" & i).Select
Selection.Cut
ActiveCell.Offset(0, -1).Select: ActiveSheet.Paste
End Sub
82:デフォルトの名無しさん
07/12/19 12:15:59
>>81
その式だと10になる確率が低いんじゃねーのか?
9になるのはround(rand(),1)が8.5以上9.5未満の1の幅があるが
10になるのは9.5以上で半分の幅しかねーな。
ROUNDなんか使っちゃいかんよ。
Range("D1)..Value = Int(Rnd*10)+1
とすれば1〜10の確率はそれぞれ10パーセントだ。
83:デフォルトの名無しさん
07/12/19 12:20:56
ちょっと書き直し
9になるのはrand()が0.85以上0.95未満の0.1の幅があるが
10になるのは0.95以上で半分の幅
84:79,81
07/12/19 14:14:48
>>83
うーむ、なるほど。
85:デフォルトの名無しさん
07/12/19 17:53:38
絶対パス付きを取得し、変数filepathに、ファイル名をfilenameに入れて、ファイルを開こうとしています。
しかしフォルダ名に空白があると存在しませんとエラーがでます。
openfile filepath & filename
どのように書けばよいのでしょうか?
86:デフォルトの名無しさん
07/12/19 18:00:58
openfileが悪さしてる
87:デフォルトの名無しさん
07/12/19 18:06:15
trimしてみては?
88:デフォルトの名無しさん
07/12/20 05:13:01
htmlの指定したタグの中身を取り出す関数(メソッド?)ってどういうものでしたっけ?
GetOuterHtmlみたいな感じの名前でしたが、手元にVBがなく、ググってもでてこない
89:デフォルトの名無しさん
07/12/20 07:41:31
分かってないのに分かったような物言いをしたところで間抜けであることは変わらない
90:デフォルトの名無しさん
07/12/20 09:53:17
>>88
スレ違い
91:デフォルトの名無しさん
07/12/20 11:06:38
以前質問させてもらった者ですが
1+2+3+4+……+100
この和を繰り返し文を使用して出せというのがいまだにわかりません。
この場合For文を使えばいいんでしょうか?
無知で申し訳ないです。
92:デフォルトの名無しさん
07/12/20 11:39:16
>>91
スレ違い For文でできる。 どうしても分からなければVBスレで。
93:デフォルトの名無しさん
07/12/20 12:07:29
dim a(100) as integer
for i=1 to 100
a(i) = i
next
msgbox (a(1) + a(100))/2*100
94:デフォルトの名無しさん
07/12/20 15:01:54
>>90
以前エクセル付属のVBAで使った記憶があるのですが
95:デフォルトの名無しさん
07/12/20 15:13:37
>>94
Microsoft HTML Object Libraryを参照設定して、F2でMSHTMLを眺めて、ググるなりしろ。
これ以上の質問はVBスレでやれ。
96:デフォルトの名無しさん
07/12/20 16:04:23
>>93
ワロタw
97:デフォルトの名無しさん
07/12/20 16:19:13
Sub nnn()
Dim a As Variant
Dim i As Byte
Dim sentence As String
Dim sentence2 As String
''''''''''''''''''''''
Range("A1").Formula = "I am Japanese."
a = Array("I", "am", "Japanese", "living", "in", "USA", ".")
For i = 0 To 6
sentence = Range("A1").Value
sentence2 = Replace(sentence, a(i), "", 1)
Next i
MsgBox sentence2
End Sub
このプログラムで、sentenceをa配列全て使って、
置換したいのですが、
array中の最後の文字しか変換されません。
どうすればよいでしょうか...
98:デフォルトの名無しさん
07/12/20 16:32:06
>>97
かろうじてExcel要素が混じってるが、基本はExcel関係ないぞ。
Forの行にブレークポイントを設定して、ステップ実行させながら、変数の中を見てみろ。
99:デフォルトの名無しさん
07/12/20 17:03:25
>>98
置換したはずの文字が、ふ、ふ、復活しているよっ!
100:デフォルトの名無しさん
07/12/20 17:14:26
あ、sentence2はsentenceでいいのか。
むずかしい
101:デフォルトの名無しさん
07/12/20 18:53:05
とりあえずUSAには定冠詞のTheを付けるように
102:デフォルトの名無しさん
07/12/20 19:18:31
>>91
学校の宿題だったっけ?
>>93のFor Nextで合格点もらえるよ。
103:97
07/12/21 09:11:06
この文の位置か・・・
sentence = Range("A1").Value
104:デフォルトの名無しさん
07/12/21 19:29:12
もしかしてVBAってMax(i1,i2,i3)みたいなのって無し?
セルの比較ならApplication.Maxとかでいいけど変数の最大値を取得したいときはどーすれば?
105:デフォルトの名無しさん
07/12/21 20:31:42
セルに代入してapplication.max使えばいいんじゃね?
106:デフォルトの名無しさん
07/12/21 20:53:11
ヘルプ見ろよ
107:デフォルトの名無しさん
07/12/21 21:47:26
10分もありゃ汎用性の高い自作関数作れるだろ
108:デフォルトの名無しさん
07/12/22 00:34:48
汎用性の高い自作関数 例えば?
109:デフォルトの名無しさん
07/12/22 03:17:54
型の範囲を意識しなくていい関数はかなり便利
integerの範囲以上の値入れていちいちエラートラップするのはうざいからな
110:デフォルトの名無しさん
07/12/22 08:44:23
integerの範囲以上の値入れていちいちエラートラップする
・・
Variant・・・
111:デフォルトの名無しさん
07/12/22 13:51:20
丸め誤差を極力減らしたいのですが、式を記載する上で注意しておきたいことを教えてください。
112:デフォルトの名無しさん
07/12/22 16:26:16
>>111
整数で演算する
113:デフォルトの名無しさん
07/12/22 18:24:32
除算を使わない
114:デフォルトの名無しさん
07/12/22 18:26:38
計算をしない
115:デフォルトの名無しさん
07/12/22 19:43:29
電卓で計算して、Excelに手作業で貼り付け
w
116:デフォルトの名無しさん
07/12/22 22:39:18
極力ってことは・・・一気に計算したら?
117:デフォルトの名無しさん
07/12/23 00:08:32
>>116
よく本に掲載されているのは、ルートを有利化せずに分母においてるのがあるが、理由がよくわからなくて。
118:デフォルトの名無しさん
07/12/23 00:29:44
EXCELで
人人人人人
2 3 1 4
1 4 2 3
のように4人でゲームして順位を出す時に、
ちゃんと横の合計が10になるか計算したいのですが
こういう空欄はスルーして計算できませんでしょうか?
119:デフォルトの名無しさん
07/12/23 00:41:46
何も考えずにセル関数Sum使えば終わりでね?
120:デフォルトの名無しさん
07/12/23 00:58:34
>>119
その通りでした。どうもありがとうございます
実は例と少し違って合計0になるかだったので勘違いしてました
121:デフォルトの名無しさん
07/12/23 01:57:25
麻雀かw
122:デフォルトの名無しさん
07/12/23 04:18:28
>>117
コンピュータは分母が整数じゃなくても
それほど困らないからいいんじゃないの?
123:デフォルトの名無しさん
07/12/23 10:51:16
情報工学勉強すればわかる。
124:デフォルトの名無しさん
07/12/23 10:57:09
VBA使うのにいちいち情報工学など勉強しれられっか
125:デフォルトの名無しさん
07/12/23 11:07:39
VBAに必要な知識は、
1.同じ機能を実現するために、いかに高速化する記述方法を知っているか。
言語に関わらず必要な知識は、
1.誤差伝幡をいかに少なくするか。
2.いかに高速なアルゴリズム(探索など)を知っているか。
3.その他多数〜
126:デフォルトの名無しさん
07/12/23 16:14:05
> 1.同じ機能を実現するために、いかに高速化する記述方法を知っているか。
開発効率という観点が欠如しているっぽいあなたには、アセンブラをオススメいたします。
127:デフォルトの名無しさん
07/12/24 00:21:03
>>111
桁に限界があるので技術計算には向かないが
固定小数点のCurrency型を使うとか。
128:デフォルトの名無しさん
07/12/24 02:05:32
>>111
除算をしないか、ロジックで極力計算回数を減らす。関数の戻りの型に注意。あと、スレ違い。
129:デフォルトの名無しさん
07/12/25 01:14:14
フォルダに0001〜9999jpg
セル2に000*と入力すると自動的にセル1に該当の000*jpg表示さすにはどうすればいいでしょうか?
よろしくお願いします
130:デフォルトの名無しさん
07/12/25 01:18:51
>>129
セル2の入力を常に監視し、入力に変化があるたびにフォルダ内にその画像があるか調べ、あれば表示する。
4桁に制限したければそういうifを書けばいい。
131:デフォルトの名無しさん
07/12/26 00:02:45
>>93の人ありがとうございました。
1^2+2^2+3^2+……+20^2
1^3+2^3+3^3+・・・・+20^3
ついでにこれのFor文を使った書き方も教えていただけるとありがたいです。
132:デフォルトの名無しさん
07/12/26 00:12:39
宿題か?宿題なのか?
133:デフォルトの名無しさん
07/12/26 00:24:08
そんなことより聞いてくれよ。
というか教えてください。
マクロ流してるとリソース不足とかメモリ不足とか言い出すんだけど、何で?
やっぱりファイルが大きすぎるのか?
1ファイルで60MBとか無理なのか?
ご存知の方いたら助けてください。
134:デフォルトの名無しさん
07/12/26 00:29:42
>>133
うん、でかいw限界点とかはわからんが・・・
Win2000メモリ1Gの環境で、30MB程度のマクロ・数式・外部リンクつきのブック2個開くと危ういので・・・
135:デフォルトの名無しさん
07/12/26 00:55:12
>>132
そうなんですよ。なんとかお助け願えないでしょうか?
136:デフォルトの名無しさん
07/12/26 01:06:14
for i=1 to 100
a = i
next
137:デフォルトの名無しさん
07/12/26 01:07:09
途中送信orz動作未確認
dim a as integer
for i=1 to 100
a = a + i * 2
next
3は2を変更で
138:デフォルトの名無しさん
07/12/26 01:21:16
>>131
ちょっとまて
>>93を採用する気か?それはなー(略
139:デフォルトの名無しさん
07/12/26 01:22:34
>>137
どいつもこいつも・・・ここはネタすれなのか?
140:デフォルトの名無しさん
07/12/26 02:24:13
>>138
え?あれじゃ駄目なんですか?人助けと思ってマジレスお願いします。
141:137
07/12/26 02:37:44
すまん、俺は素だったんだw
汎用性もたせるなら累乗関数使うなり作るなりしてくれ。
dim a as integer
for i=1 to 100
a = a + i * i '2乗
'a = a + i * i * i '3乗
next
142:137
07/12/26 02:39:07
>>140
ちゃんとみりゃわかる。
>>97はforが入ってるが結局は(1+100)/2*100だ。
dim sum as integer
for i=1 to 100
sum = sum + i
next
143:137
07/12/26 02:40:02
はぁい、>>93の間違いねorz
スレ汚し失礼しました。
144:デフォルトの名無しさん
07/12/26 03:36:07
志村ー
100じゃなくて20・・・・
145:デフォルトの名無しさん
07/12/26 13:27:24
>>141>>142
たびたびすいません。これらをメッセージボックスに表示するには
どうしたらいいんでしょうか?
146:デフォルトの名無しさん
07/12/26 14:22:26
Option Explicit
Sub sum()
Dim sum As Integer
Dim sumMsg As Integer
Dim i As Byte
For i = 1 To 100
sum = sum + i
Next i
sumMsg = MsgBox(sum, vbOKOnly + vbInformation)
If sumMsg = vbOK Then MsgBox "やったね"
End Sub
147:デフォルトの名無しさん
07/12/26 14:23:38
共有ファイルでVBAを編集するには?
148:デフォルトの名無しさん
07/12/26 17:17:49
inputboxをキャンセルしたときの挙動なのですが、
これじゃだめですよね・・・
Sub nicochuu()
niwango = InputBox("入力してね", "inputbox")
If niwango = "" Then MsgBox "入力無し": Exit Sub
Range("A1").Value = niwango
If niwango = vbCancel Then Range("A2").Value = "キャンセル"
End Sub
149:デフォルトの名無しさん
07/12/26 18:33:01
横で開いてるIEを3行スクロールさせる方法教えてください。
excelは2000でIEは7です。
150:デフォルトの名無しさん
07/12/26 19:14:15
三流文系大に通う腐女子です。
以下のマクロ作成方法を教えてください。
プロシージャ「斜め移動」の作成
IncrementLeftとIncrementTopを組み合わせた「斜め移動」という名称のマクロ作成。
プロシージャ「四角移動」の作成
図形が四角形を描くように移動する(移動の軌跡が四角形になる)、
「四角移動」という名称のマクロ作成。For文は”1から1まで”とする。
☆―→
↑ |
| |
| ↓
←―
プロシージャ「三角移動」の作成
「斜め移動」と「四角移動」を応用した、「三角移動」という名称のマクロ作成。
ただし正三角形でなくてよい。
151:デフォルトの名無しさん
07/12/26 22:22:06
>>133
どこかに不具合がある。例えば、暗黙的なセキュリティの問題に抵触してる。
ネットワーク上のファイルを開いての処理とか、クラスへのアクセスの仕方、等々。
エクセルは、何百MBのファイルでも、ページングしながらガリゴリ起動しようとしやがりますよ。
>>150
どう動かしたいかが良く伝わらない。
マクロを実行したら、画面上に既に設置してある部品を動かして元の位置まで戻したいの?
あと、移動の仕方に指定はないのか、部品は固定なのか、で、ここ重要、何が分からないの?
152:デフォルトの名無しさん
07/12/27 02:33:46
セルを複数選択できないようにする(単一セルのみ選択可能)にはどう記載すれば実現できますか?
153:デフォルトの名無しさん
07/12/27 11:43:39
CSVファイルにフッタが一行必ず入っているので、最終の行の一行前まで
読み込みさせたいのですが、
Do Until EOF(intFF)
をどうすればいいのかわかりません。
お願いします・・。
154:デフォルトの名無しさん
07/12/27 12:41:59
>>152
これで目的の動作をするかどうかはわからないが・・・
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 1 Then
ActiveCell.Select
End If
End Sub
>>153
一行ずつ読んで、EOFに達していたらそれが最終行なので処理をスキップする。
155:デフォルトの名無しさん
07/12/27 15:21:44
>>153
ループ条件で判断したいなら、Seek(intFF) で、読み込み位置を確認する方法もあるね。
ただ、スレ違いだと思われ。 分からなかったら、こっち↓↓↓で訊いてみては?
スレリンク(tech板)l50
156:デフォルトの名無しさん
07/12/27 15:59:23
サンクスコ
スレ違いの基準が分からんぽ
157:デフォルトの名無しさん
07/12/27 16:50:30
スレ違いとかいう奴うぜー
いっそVB6スレと統合しろ
158:155
07/12/27 18:25:58
>>156
>>2
>★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
スレチ指摘がウザけりゃ、それこそVB6スレと分ける必要ないじゃん。別に俺だってどっちでもいいっつの。
159:デフォルトの名無しさん
07/12/27 19:15:14
アルゴリズムとかはVB6だろうけど
初心者はわからんだろうしなあ
まあそのときの気分であしらってるけどね
160:デフォルトの名無しさん
07/12/27 19:16:58
>>154
サンクスです。
161:デフォルトの名無しさん
07/12/27 19:19:39
>>158
>★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
VBAの方が初心者が多いから、むしろVB6しかできないことのみ向こうのスレだよ。
すべてこちらに包含するという考え方もある。
162:デフォルトの名無しさん
07/12/27 20:51:01
自治厨が湧いてきました
163:デフォルトの名無しさん
07/12/27 22:09:25
自治厨とは俺様ルールを貫いてスレを仕切ろうとする奴のこと
2chのルールやスレのルールを指摘するのは自治厨行為ではなく
逆にそれを批判するのは、俺様ルールを貫こうとする自治厨行為である事実について
164:デフォルトの名無しさん
07/12/28 02:04:11
どっちでもいい。はやく次の質問へ
165:デフォルトの名無しさん
07/12/28 09:36:53
>>2は別にこのスレの合意事項というわけではない。
過去スレのどこかで、誰かが勝手にテンプレに入れただけ。
なので、あまり気にするな。
166:デフォルトの名無しさん
07/12/28 09:43:01
そうでもないか
167:デフォルトの名無しさん
07/12/28 12:03:27
以下のケースでVBAの処理を止める方法は?(強制終了以外で
on error gotoでmsgboxに行く仕様になっているため、
あと50000回くらいmsgboxをokし続けなければならない。
escを押しても、msgboxのok扱いにしかならない。orz
168:デフォルトの名無しさん
07/12/28 12:14:00
電源断。
169:デフォルトの名無しさん
07/12/28 12:17:23
enterをテープで止めて、トイレ行ってる間に
終わってた。
170:デフォルトの名無しさん
07/12/28 12:27:46
msgboxのあとプロシージャをぬければいいんじゃね
171:デフォルトの名無しさん
07/12/28 12:31:09
もう実行しちゃった後の話よ
172:デフォルトの名無しさん
07/12/28 12:34:42
50000回ぽっちで抜けるならエラートラップの無限ループじゃないんだな
50000回押せばいいよな
173:デフォルトの名無しさん
07/12/28 12:48:51
>> 167
混じれ酢するとCtrl + Break
174:デフォルトの名無しさん
07/12/28 13:15:17
ありがとうござます
こんなキー初めて使うわ
175:デフォルトの名無しさん
07/12/28 13:25:13
>>174
押しっぱにすることで、無限ループを中断できたりするので、割と良く使うよん。
176:デフォルトの名無しさん
07/12/28 15:12:43
良からぬsiteを見ている途中に、excelが勝手にsaveを始めて
あたふたすることってありますよね。
177:\_____________/
07/12/28 16:11:29
∨
|/-O-O-ヽ| ブツブツ・・・
| . : )'e'( : . |
` ‐-=-‐
/ \
||\ ̄ ̄ ̄ ̄ ̄ ̄ \
||\\. \ ∧_∧
||. .\\ \ ( ;´Д`) (オイ、なんか変なのがいるぞ)
. \\ \ / ヽ.
. \\ / .| | |
. \∧_∧ (⌒\|__./ ./
( ´,_・・`)目合わせるなって ∧_∧
. _/ ヽ \ ( ) うわー、こっち見てるよ
178:デフォルトの名無しさん
07/12/28 18:52:13
セル範囲から検索できるactivecell.findみたいな関数ありませんか?
(D1)=MATCH("文字列",A1:C3,0) 的なことがやりたいんですが
179:デフォルトの名無しさん
07/12/28 18:53:12
ってここVBAのスレじゃん
失礼。出直してきます
180:デフォルトの名無しさん
07/12/28 22:22:11
いきなり長文にて失礼します。
生年月日の昭和・平成をまるで囲むため、中を透明にした楕円を描き、マクロの
自動記録でできた次のものを使用してきました。
ActiveSheet.Shapes.AddShape _
(msoShapeOval, 400.75, 110.75, 30.25, 10.5).Select
Selection.ShapeRange.Fill.Visible = msoFalse
Selection.ShapeRange.Fill.Transparency = 0#
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.DashStyle = msoLineSolid
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 64
Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
Excel2000〜2003では、普通に使用できていましたが、2007では楕円の内部が
黒く塗りつぶされてしまいます。
ネットや本で調べてみたのですが、図形描画については記述があまり見つからず
私のスキルでは、難しそうです。
ご教授願えると助かります。
181:デフォルトの名無しさん
07/12/28 22:31:22
2007でマクロの自動記録すれば?
182:デフォルトの名無しさん
07/12/28 22:41:11
>>181
さっそくの書き込みありがとうございます。
やってみたのですが、2007では図形描画は自動記録できないらしいです。
私の調べた範囲では、どうやらExcel2007の仕様らしいです。
したがって、自分でマクロを組むしかないらしいのですが・・・
183:デフォルトの名無しさん
07/12/28 22:59:59
>>182
うーん、確かにその通りだった。ごめん。
ShapeRangeのプロパティをヘルプで調べるしかないかなぁ・・・
184:デフォルトの名無しさん
07/12/28 23:02:29
連投すみません、180 ですが・・・
ちなみに"Set"を使って、次のようなのも試してみましたがだめでした。
Set MaruShape1 = ActiveSheet.Shapes.AddShape _
(msoShapeOval, 400.75, 110.75, 30.25, 10.5)
MaruShape1.Fill.Visible = msoFalse
MaruShape1.Fill.Transparency = 0#
MaruShape1.Line.Weight = 0.75
MaruShape1.Line.DashStyle = msoLineSolid
MaruShape1.Line.Style = msoLineSingle
MaruShape1.Line.Transparency = 0#
MaruShape1.Line.Visible = msoTrue
MaruShape1.Line.ForeColor.SchemeColor = 64
MaruShape1.Line.BackColor.RGB = RGB(255, 255, 255)
185:デフォルトの名無しさん
07/12/28 23:06:15
>>183
184の書き込みが、前後してすみません。
アドバイスありがとうございます。
ShapeRangeのプロパティについてヘルプを調べてみます。
186:デフォルトの名無しさん
07/12/28 23:31:32
>>180の最終行に
Selection.ShapeRange.Fill.Visible = msoFalse
を追加してもダメですか
187:デフォルトの名無しさん
07/12/28 23:41:45
>>186
ありがとうございます。うちのパソコンはExcel2007が入っていないので
明日、職場で確かめてみます。
ShapeRangeプロパティのヘルプのあたりは見てみたのですが、私のスキル
では、ちんぷんかんぷんです。
正直結構まいっています。
遅くまで、付き合ってくださってありがとうございます。
明日、結果を報告します。
188:デフォルトの名無しさん
07/12/29 01:32:16
うわー2007って全然違うな
うちのチームの人2007で納めるやつの動確2003でやってるけど大丈夫か?
189:デフォルトの名無しさん
07/12/29 11:10:53
>>188
おいおい、それは危険。 ウチは、2003で納めるため、テスト機を2007⇒2003にした。
190:デフォルトの名無しさん
07/12/29 11:38:28
2005と2007はどうとでもなりそうだが、
2002は.NET1.0、2003は.NET1.1だからいろいろまずいぞ。
191:デフォルトの名無しさん
07/12/29 11:39:16
>>190
ごばくった。なんとなく話題が似てた(笑
192:デフォルトの名無しさん
07/12/29 12:46:11
2007だとシェイプの位置がずれるんだけど、なんで?
193:デフォルトの名無しさん
07/12/29 23:05:11
>>186
昨日のアドバイスがヒントになって解決しました。
Selection.ShapeRange.Fill.Visible = msoFalse
Selection.ShapeRange.Fill.Transparency = 0#
この2行を逆にしたらOKでした。ありがとうございました。
194:デフォルトの名無しさん
07/12/30 03:05:22
コマンドボタンを押すと、押したコマンドボタンを消したいのです。
CommandBotton1.visible=falseでも消えません。
CommandBotton1.BackStyle=0でも消えませんでした。
どのようにすれば消す、もしくは透明にすることができるのでしょうか?
よろしくお願いします。
195:デフォルトの名無しさん
07/12/30 03:26:42
>>194
Excel2000で試してみたが、
フォームのコマンドボタンでも、ワークシートのコマンドボタンでも、.Visibleで消せたぞ?
196:デフォルトの名無しさん
07/12/30 04:15:29
そりゃBottonで消えるのはボットン便所ぐらいですから
197:デフォルトの名無しさん
07/12/30 04:24:05
>>195
これなのですが、エラーがでてしまいます。
コマンドボタンを押したら、コマンドボタンを消す。
Private Sub CommandButton1_Click()
CommandBotton1.Visible = False
End Sub
198:デフォルトの名無しさん
07/12/30 04:25:09
>>195
ちなみに、ワークシートのコマンドボタンです。
199:デフォルトの名無しさん
07/12/30 04:35:52
>>196
解決しました。ありがとうございました。
200:デフォルトの名無しさん
07/12/30 11:34:38
ExcelVBAで出来ないことってなにかある?
高級言語覚えたい気持ちもあるんだけど
今のところやりたいことはVBAでできてるからあまり覚えようという気にならないんだよな
高級言語にステップアップしていいことあるかな?
201:デフォルトの名無しさん
07/12/30 11:56:55
Excelが無くても動くアプリが作れる
202:デフォルトの名無しさん
07/12/30 14:20:22
VBAは高級言語だぞ。
実行がExcelに縛り付けられていることは、言語自体の話とは別。
203:デフォルトの名無しさん
07/12/30 15:23:09
折れの場合、vs2005express で、やってみようとしたけど結局、VBAにしか、関心が集まらなかった。イメージがわきやすいからだと思う。
Workbooks.Add(xlWBATExcel4Macrosheet) でexcel4マクロシートを作ってみたけど、これってマクロの管理に何かいいことあるのか?
204:デフォルトの名無しさん
07/12/30 19:14:47
エクセルのVBAでゲーム作って来いって課題が出たんだが、インベーダーみたいのを作るとして
玉の発射とかの解説してるサイトって無いですか?
というか、シューティングゲーム作成の解説のサイトで良いのですが
なかなか見付からない・・・
205:デフォルトの名無しさん
07/12/30 19:27:53
ったく、専学はパーの製造装置でしかないな
206:デフォルトの名無しさん
07/12/30 19:30:28
>>204
学校の課題レベルで、ゲームってそういうアクション性のあるゲームのことなのか?w
素直に、マインスイーパみたいなヤツでいいと思うよ。
正直、オススメしないぞ。後で行き詰って困ることになる気がする。
ゲームのオブジェクトを、フォームのコントロールにすれば、まぁできんことはないと思うが。
207:デフォルトの名無しさん
07/12/30 19:42:39
>>206
いや、全く持ってその通りなんですが、ほら、作ってみたいじゃないですかw
敵が一体、左右に動いて、自機も左右だけに動けるとこまでは出来たんだけど
あとは玉の発射と当たり判定と、当たったら画像が消えるくらいかなーと
208:デフォルトの名無しさん
07/12/30 19:58:57
excel2000のVBAで、材料一覧を印刷用にまとめる、材料表を作ったのですが
利用者が動かしていると、特定の行が消えてしまったりすることがあって困ってます。
そこで、いろいろと原因を探っているんですが、質問です。
シートの保護をかけていているシートで、行や列が突然消えるということってあるんでしょうか?
ご教授願います。よろしくお願いします。
209:デフォルトの名無しさん
07/12/30 20:07:39
>>207
よく使う処理としては、弾の座標と、対象の中心座標+大きさ(距離) で衝突判定する方法。
オブジェクトを、丸形か正方形として認識させれば、そう難しいロジックにはならないと思われ。
210:デフォルトの名無しさん
07/12/30 20:41:33
>>209
dクス
挑戦してみる^
211:デフォルトの名無しさん
07/12/31 10:27:56
今日も今日とて仕事でVBA
212:デフォルトの名無しさん
07/12/31 10:41:25
大晦日も仕事か
お疲れ様です
213:デフォルトの名無しさん
07/12/31 13:33:39
いい句だなぁ。
214:デフォルトの名無しさん
07/12/31 15:45:45
かなり微妙な手当てが出たお
215:デフォルトの名無しさん
08/01/01 01:20:24
myPath = "C:\TEST\*.xls"
If Dir(myPath) <> "" then
Kill myPath
End If
だとDir(myPath)がオープンしっぱなしになるそうです。
どう書けば閉じるのでしょうか?
216:デフォルトの名無しさん
08/01/01 02:36:50
>>215
オープンもしてないモノを、どうしろと?
意味が分かってないなら、せめて本人に書き込ませろ。
ところで、あけおめ。
217:デフォルトの名無しさん
08/01/01 03:14:41
>>215
解釈1
if FileExists("hoge") then Kill "hoge"
解釈2
myPath = "C:\TEST\*.xls"
TargetPath=Dir(myPath)
Do Until TargetPath= ""
Kill TargetPath
TargetPath=Dir()
Loop
オープンは関係ないけどこのどちらかがやりたいのではないかと予想
218:デフォルトの名無しさん
08/01/01 13:14:44
開いていないファイルに書き込みパスワードが掛かっているか
どうすれば判定できますか?
ファイルをパスワードで開いてからだったら、
If ActiveWorkbook.WriteReserved Then
とかで判定できると思うのですが、パスワードは
不明でその有無だけ判定したいのです。
219:デフォルトの名無しさん
08/01/01 15:52:29
>>216
知らないのか?
myPath = "C:\TEST\"
Dir(myPath)
RmDir myPath
してみろ。オープンされてるから
220:デフォルトの名無しさん
08/01/01 16:16:33
あけましておめでとうございます。
>>208についてお願いしたいのですが・・・
221:デフォルトの名無しさん
08/01/01 18:29:49
>>219
・・・・
RmDir myPath
そのまま実行してみろ
ヘルプ読んで出直せ
222:デフォルトの名無しさん
08/01/01 18:32:05
ポカーン
223:デフォルトの名無しさん
08/01/01 19:24:31
>>220
ちょっと考え方が違うな。 コンピュータはウソを吐かないもんだ。
保護を掛けてようがいまいが、意図せずデータが消えるなら、まずはVBAの不具合を疑え。
これだけ出回ってるメジャーなソフトで、アプリの不具合が隠れてる可能性は極めて低い。
224:デフォルトの名無しさん
08/01/01 20:45:14
1 2 3
1 10 20 30
2
------------
問題Y=1
問題X=1
回答Y=2
回答X=1
For i = 1 To 10
Cells(回答Y, 回答X) = InputBox(Cells(問題Y, 問題X) + Cells(問題Y, 問題X + 1), "問(i)")
回答X = 回答X + 1
問題X = 問題X + 1
Next
-------------
InputBoxにセル内の任意の数字(この場合"10+20")と表示させたいのですが、
上記のコードの場合、30と表示されてしまいます
セル内の数字を個別に表示させることは出来ますか?(真ん中に+などの記号を表示)
また、問1、問2と表示させていくためにはどうすれば良いのでしょうか?
この場合、問(i)で表示されてしまいます
225:デフォルトの名無しさん
08/01/01 20:53:20
+じゃなくて、&で結合すべし。
"問(i)"は、"問("&i&")"にする
226:デフォルトの名無しさん
08/01/01 21:05:59
>>225
Cells(回答Y, 回答X) = InputBox(Cells(問題Y, 問題X) & "+" & (Cells(問題Y, 問題X + 2)), "問(" & i & ")")
にしたら出来ました^
即レスありがとうございました!
227:226
08/01/01 21:09:15
あ、問題X+2は問題X+1でした、失礼しました
228:デフォルトの名無しさん
08/01/01 21:28:11
>>223
そうですよね。VBAのテストをもっと増やしてみます。
ありがとうございます。
229:デフォルトの名無しさん
08/01/01 22:57:49
Excel 2003でXPです。
このプログラムを実行すると
Dim commission As Integer
Sub test8()
commission = 90
If commission = 100 Then MsgBox ("手数料は100円です")
End If
End Sub
コンパイルエラー
End ifに対応するブロックがありませんというメッセージが出ます。
どこが悪いのでしょうか?
230:デフォルトの名無しさん
08/01/01 22:58:28
thenでかいぎょうすべし
231:デフォルトの名無しさん
08/01/01 23:03:22
>>230
神様ありがとう!!!
232:129
08/01/02 02:53:03
>セル2の入力を常に監視し、入力に変化があるたびにフォルダ内にその画像があるか調べ、あれば表示する。
すみません何をどうやったらいいのか全くわかりませんorz
とっかかりでもいいのでヒント頂けないでしょうか よろしくお願いします
233:デフォルトの名無しさん
08/01/02 04:29:21
そもそもVBAの経験があるのかと・・・
VBA/画像/表示とかすりゃいくらでもサンプルがあるってのに
URLリンク(homepage1.nifty.com)
234:デフォルトの名無しさん
08/01/02 12:20:38
VBA初心者が使う本でこういうときはどうすればいいのっ??ってやつで
お勧めは逆引きのやつとかですか?
他にいいのあります??
235:デフォルトの名無しさん
08/01/02 13:10:25
ググれば山ほどサンプルが出てくる
236:デフォルトの名無しさん
08/01/02 21:18:58
かんたんプログラミング Excel 2003 これが一番良かった
237:デフォルトの名無しさん
08/01/02 21:27:35
>>236
まじっすか!?
とりあえず見てみるわ。
>>235
図書館にも死ぬほどあったw
238:かな
08/01/03 11:25:29
Excelであみだくじつくりたいんやけど、どっかにサンプルないかな?
セルつかうんじゃなくてちゃんと線を引いてやりたいんや?
239:デフォルトの名無しさん
08/01/03 12:43:46
しね
240:デフォルトの名無しさん
08/01/03 13:59:10
こんにちは。突然ですが
いろいろ試してみたんですけど
VBAで乱数の回数分だけループさせる方法ってやっぱり不可能ですよね?
241:デフォルトの名無しさん
08/01/03 14:03:50
全然不可能じゃないとおもうけど・・・
242:デフォルトの名無しさん
08/01/03 14:17:15
>>240にはってこと?
243:デフォルトの名無しさん
08/01/03 15:30:45
乱数って少数の端数が出てしまうじゃないですか。
244:かな
08/01/03 15:32:36
誰かおしえて?
245:デフォルトの名無しさん
08/01/03 15:56:29
ループさせたいだけなら一回目に発生させた乱数を変数に入れたら終わりな話だと思う
246:デフォルトの名無しさん
08/01/03 16:04:37
少数の端数てことはないだろ。
247:デフォルトの名無しさん
08/01/03 16:05:53
つCint
248:デフォルトの名無しさん
08/01/03 16:06:37
0になるだろ
249:デフォルトの名無しさん
08/01/03 16:10:19
CIntだろ
250:デフォルトの名無しさん
08/01/03 16:21:41
すごい釣りだなw
251:デフォルトの名無しさん
08/01/03 16:28:39
つMid(Rnd,3)
252:デフォルトの名無しさん
08/01/03 16:39:24
Replace(Rnd,".","")
253:デフォルトの名無しさん
08/01/03 17:02:32
Count = CInt(Rnd * N) + 1
hoge:
'ここで何かする
Count = Count - 1
If Count >= 0 Then
Goto hoge
End If
254:デフォルトの名無しさん
08/01/03 18:34:00
ループ中に乱数の値ってどんどん変わっていくんじゃない?
255:デフォルトの名無しさん
08/01/03 18:35:55
・・・。
>>254って本気で言ってるのか?
256:デフォルトの名無しさん
08/01/03 20:18:11
質問です。
実際に開発する環境はXP excel 2003で
学習環境はvista excel 2007なんですが、
何か学習書を購入するとき、2007に対応したものじゃないと
理解は難しいのでしょうか?
2007に対応したVBA書はまだ少ないように感じるもので・・・
257:デフォルトの名無しさん
08/01/03 23:17:50
確かに2007で変わった部分はある。でも基本部分(構文とかそういうの)は変わってない。
2007用の書籍があればそりゃいいだろうけど、変わった部分を調べておけば別に古いのでも問題はないかと。
258:デフォルトの名無しさん
08/01/04 02:25:11
構文規則(VB部分)は変わってないけど
オブジェクトメンバ(VBA部分)は結構変わったよ
一応古いメンバにもアクセス出来るようにはなってるが
新しいメンバより動作が遅かったりというデメリットもある
2007用だと新しい体系に関しての説明が主になるだろうから
実際の開発が2003なら、2003用か2002/2003/2007兼用版とかがいいかと
259:デフォルトの名無しさん
08/01/04 06:26:50
EXCEL2002でVBAを書いています。
マクロでセルにEXCEL関数を入力する際に、『シートの選択』ダイアログ[OK、キャンセル]が表示されます。
ダイアログを表示さない、もしくはダイアログのキャンセルを自動で押す方法はありますか?
セルに入力しようとしている文字列
='D:\[計算書.xls]20.1月'!$J$3
計算書.xlsの20.1月は存在しません。
下記、3つは記述済みです。
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
260:256
08/01/04 07:26:44
>>257-258
ありがとうございます。
詳しい解説があったほうがいいのでよく考えて選びます。
261:デフォルトの名無しさん
08/01/04 08:19:47
>>259
うちは出ない (2000, 2003)
262:デフォルトの名無しさん
08/01/04 08:31:34
>>259
どんなマクロを書いているんだ?
263:デフォルトの名無しさん
08/01/04 09:52:52
>>259
再現した。 ワークシートの存在を確認するしかないかな?
Dim s As Worksheet
For Each s In Me.Worksheets
If UCase(s.Name) = UCase("20.1月") Then
s.Range("A1").Value = "='D:\[計算書.xls]20.1月'!$J$3"
Exit For
End If
Next
あるいは、可能であればワークシート別のイベントで処理させるとか。
264:かな
08/01/04 09:57:33
だれか教えてん♪
265:デフォルトの名無しさん
08/01/04 10:43:44
>>238>>244>>264
URLリンク(www.google.co.jp)
まぁ釣りだとは思うんだけど…
266:まな
08/01/04 10:52:16
>>264
手とり足とり、組んずほぐれつ?
267:デフォルトの名無しさん
08/01/04 17:41:29
すいません、XPでEXCEL2003です。
複数のセルに数式が入れてあるのですが、
その数式から導かれた値が、ある一定の値を超えた場合そのセル番号を表示させるプログラムを作ろうと考えています。
このようなことは可能でしょうか?
もし可能ならどのようなプロパティやメソッドを使えばいいのか教えてください。
後は本も買ってきたのでできるだけ自分でやりたいと思いますので、ヒントだけでもありがたいです。
268:デフォルトの名無しさん
08/01/04 17:44:47
>261
EXCELの設定で表示しないようにできるんですかね・・・。
>262
NW.Cells(tate, yoko).Formula = Replace(str_cell, this_Date, Nxt_Date)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
↑ ='D:\[計算書.xls]20.1月'!$J$3 が入る
~~~~~~
↑このシートは存在しない。
『シートの選択』ダイアログが表示される・・・。
>263
やっぱりダイアログが表示しますよね。ない場合シート作成させるしかないですかね・・・?
269:デフォルトの名無しさん
08/01/04 17:53:43
>>215
つOn Error
270:デフォルトの名無しさん
08/01/04 22:16:05
>>268
NW ?
271:263
08/01/05 11:58:51
>>268
シート作る必要があるの?
どうせエラー("#REF")になる式なんか入れないで、263の例みたいに空白のままじゃダメ?
>>270
どうせローカル変数名でしょ、New Worksheet の頭文字。てか、そこ突っ込まなくても・・・
272:デフォルトの名無しさん
08/01/07 17:08:47
XP、Excel2003で、改ページの枠を固定することはできるでしょうか。
この固定とは、保護等で管理者以外は触れないようにするということです。
ウィンドウの固定ではなく、改ページ範囲の固定です。
ご存知の方がいましたら、ご教授願います。
273:デフォルトの名無しさん
08/01/07 17:20:25
>>272 追記です。
結合したセルがあります。
そのセルに対する設定変更(書式、結合解除、フォント)は不可とし、
入力のみ可能とすることはできますか?
ご存知の方がいましたら、ご教授願います。
274:デフォルトの名無しさん
08/01/07 20:01:11
対象とするアクションが起こった場合にパスワード等を求めるとかじゃだめかな?
275:デフォルトの名無しさん
08/01/07 23:30:12
テキストボックスの余白自動設定解除に手間取った。
なんか簡単な方法ってないの?
276:デフォルトの名無しさん
08/01/08 08:29:16
「手間取ってる」ではなく「手間取った」ってことは
一応目的は達成されてるわけだよね
ではそれを提示してください
コード貼ってもブックをうpしても構いません
そしたらそれより簡単な方法があれば教えましょう
それが嫌ならさようなら
277:デフォルトの名無しさん
08/01/08 12:52:16
散々既出ぽい話題ですが、エクセルで、
先頭の0を消さずにcsvで書き出ししたいのですが、
以下の式では当然不可能で・・・
Option Explicit
Sub eight()
Dim eight As String
Dim bigeight As String
Range("a1").Value = 8
bigeight = Range("a1").Value + 100000000
MsgBox bigeight
eight = right(bigeight, 8)
MsgBox eight
Range("A2").Value = eight
MsgBox eight
End Sub
関数で同じことをやると出来るのですがゴミデータが出て、
コンマの数が変わってしまいます。
278:デフォルトの名無しさん
08/01/08 13:17:17
変数の型について勉強しましょう
文字列数値と数値の違いを理解しましょう
プロシージャ名と変数名を同じにするセンスを何とかしましょう
279:デフォルトの名無しさん
08/01/08 13:48:25
>>277
セルの書式設定(F) → 表示形式:ユーザー定義 → 種類(T):00000000 (8桁固定)
280:デフォルトの名無しさん
08/01/08 14:13:45
>>279
おお。
これをVBAで指定するには?
281:デフォルトの名無しさん
08/01/08 14:18:49
てか、そもそもセルに転記しなければ良いのか(・∀・;)
282:デフォルトの名無しさん
08/01/08 14:53:59
>>281
転記するにしても、セル(範囲)ごと持っていけば済むよ。
Range("A1").Copy Range("A2")
283:デフォルトの名無しさん
08/01/08 15:06:19
あ、表示形式ってマクロ記録できるんだ。
これで、解決・・・かな
284:デフォルトの名無しさん
08/01/08 15:24:41
礼も言えないゆとりであった
285:デフォルトの名無しさん
08/01/08 23:22:13
質問なのですが、ユーザーフォームの中に80コのテキストボックスを作りたい。
プログラムでループ文を使いテキストボックスを横に4×縦に20で一気に作る方法はありますでしょうか?
286:デフォルトの名無しさん
08/01/08 23:45:08
あります
LeftとTopを調整しましょう
コード教えては厳禁
287:デフォルトの名無しさん
08/01/08 23:50:48
調整とはユーザーフォームの設定ということですか?
プログラムだけで可能なのですよね?
もう少しだけヒントをお願いできないでしょうか?
288:デフォルトの名無しさん
08/01/08 23:55:08
別にそこまで厳しくせんでも。 Excel2003ではできる。
Set ctrl = Me.Controls.Add("Forms.TextBox.1")
って感じに追加して、ctrlのプロパティを調整する。
MSFormsに追加するのに、これでいいのか?という気もするが。
289:デフォルトの名無しさん
08/01/09 00:14:18
できました!あとは80コスペースを空けて作る方法を考えてみます。
288さん有難う御座いました。
290:デフォルトの名無しさん
08/01/09 00:16:15
丸投げを助長する
寄生虫が増殖する
らしいです
291:デフォルトの名無しさん
08/01/09 00:33:43
丸投げと、できるだけズバリなヒントを欲しているのとは確実に違うと思うわけだが。
292:デフォルトの名無しさん
08/01/09 14:20:42
278=284=290
293:デフォルトの名無しさん
08/01/09 14:30:40
しかし>>284には同意せざるを得ない
294:デフォルトの名無しさん
08/01/09 14:36:58
礼なんぞいらん。邪魔。
295:sage
08/01/09 14:47:15
IDが無いと誰が誰かワカラン
296:デフォルトの名無しさん
08/01/09 18:11:06
質問です。
Dim c1 as Collection
Dim c2 as Collection
Set c1 = New Collection
c1.Add "a"
c1.Add "b"
Set c2 = c1
この次に、
c1.Remove(1) 'c1の最初のアイテムを削除
とやるとc2のアイテムも"b"だけになりますよね。
これはたぶんc2が、c1と同じCollectionオブジェクトを
指しているためなんだな、と理解しています。
理解できないのは、c1.Remove(1)ではなく、
Set c1 = Nothing
とした場合です。
c2もNothingになるのかと思いこんでいましたが、
実際c2には、"a"も"b"も、ちゃんと残っていました。
これはなぜでしょうか?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4745日前に更新/253 KB
担当:undef