1 名前:デフォルトの名無しさん [2007/12/12(水) 17:27:44 ] ExcelのVBAに関する質問スレです 質問前に 【 >>2-3 】 あたりを良く読むこと 前スレ pc11.2ch.net/test/read.cgi/tech/1189814602/
153 名前:デフォルトの名無しさん [2007/12/27(木) 11:43:39 ] CSVファイルにフッタが一行必ず入っているので、最終の行の一行前まで 読み込みさせたいのですが、 Do Until EOF(intFF) をどうすればいいのかわかりません。 お願いします・・。
154 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 15:21:44 ] >>153 ループ条件で判断したいなら、Seek(intFF) で、読み込み位置を確認する方法もあるね。 ただ、スレ違いだと思われ。 分からなかったら、こっち↓↓↓で訊いてみては? pc11.2ch.net/test/read.cgi/tech/1187667616/l50
156 名前:デフォルトの名無しさん [2007/12/27(木) 15:59:23 ] サンクスコ スレ違いの基準が分からんぽ
157 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 16:50:30 ] スレ違いとかいう奴うぜー いっそVB6スレと統合しろ
158 名前:155 mailto:sage [2007/12/27(木) 18:25:58 ] >>156 >>2 >★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。 スレチ指摘がウザけりゃ、それこそVB6スレと分ける必要ないじゃん。別に俺だってどっちでもいいっつの。
159 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 19:15:14 ] アルゴリズムとかはVB6だろうけど 初心者はわからんだろうしなあ まあそのときの気分であしらってるけどね
160 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 19:16:58 ] >>154 サンクスです。
161 名前:デフォルトの名無しさん [2007/12/27(木) 19:19:39 ] >>158 >★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。 VBAの方が初心者が多いから、むしろVB6しかできないことのみ向こうのスレだよ。 すべてこちらに包含するという考え方もある。
162 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 20:51:01 ] 自治厨が湧いてきました
163 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 22:09:25 ] 自治厨とは俺様ルールを貫いてスレを仕切ろうとする奴のこと 2chのルールやスレのルールを指摘するのは自治厨行為ではなく 逆にそれを批判するのは、俺様ルールを貫こうとする自治厨行為である事実について
164 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 02:04:11 ] どっちでもいい。はやく次の質問へ
165 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 09:36:53 ] >>2 は別にこのスレの合意事項というわけではない。 過去スレのどこかで、誰かが勝手にテンプレに入れただけ。 なので、あまり気にするな。
166 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 09:43:01 ] そうでもないか
167 名前:デフォルトの名無しさん [2007/12/28(金) 12:03:27 ] 以下のケースでVBAの処理を止める方法は?(強制終了以外で on error gotoでmsgboxに行く仕様になっているため、 あと50000回くらいmsgboxをokし続けなければならない。 escを押しても、msgboxのok扱いにしかならない。orz
168 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 12:14:00 ] 電源断。
169 名前:デフォルトの名無しさん [2007/12/28(金) 12:17:23 ] enterをテープで止めて、トイレ行ってる間に 終わってた。
170 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 12:27:46 ] msgboxのあとプロシージャをぬければいいんじゃね
171 名前:デフォルトの名無しさん [2007/12/28(金) 12:31:09 ] もう実行しちゃった後の話よ
172 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 12:34:42 ] 50000回ぽっちで抜けるならエラートラップの無限ループじゃないんだな 50000回押せばいいよな
173 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 12:48:51 ] >> 167 混じれ酢するとCtrl + Break
174 名前:デフォルトの名無しさん [2007/12/28(金) 13:15:17 ] ありがとうござます こんなキー初めて使うわ
175 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 13:25:13 ] >>174 押しっぱにすることで、無限ループを中断できたりするので、割と良く使うよん。
176 名前:デフォルトの名無しさん [2007/12/28(金) 15:12:43 ] 良からぬsiteを見ている途中に、excelが勝手にsaveを始めて あたふたすることってありますよね。
177 名前:\_____________/ mailto:sage [2007/12/28(金) 16:11:29 ] ∨ |/-O-O-ヽ| ブツブツ・・・ | . : )'e'( : . | ` ‐-=-‐ / \ ||\ ̄ ̄ ̄ ̄ ̄ ̄ \ ||\\. \ ∧_∧ ||. .\\ \ ( ;´Д`) (オイ、なんか変なのがいるぞ) . \\ \ / ヽ. . \\ / .| | | . \∧_∧ (⌒\|__./ ./ ( ´,_・・`)目合わせるなって ∧_∧ . _/ ヽ \ ( ) うわー、こっち見てるよ
178 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 18:52:13 ] セル範囲から検索できるactivecell.findみたいな関数ありませんか? (D1)=MATCH("文字列",A1:C3,0) 的なことがやりたいんですが
179 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 18:53:12 ] ってここVBAのスレじゃん 失礼。出直してきます
180 名前:デフォルトの名無しさん [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 22:31:22 ] 2007でマクロの自動記録すれば?
182 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 22:41:11 ] >>181 さっそくの書き込みありがとうございます。 やってみたのですが、2007では図形描画は自動記録できないらしいです。 私の調べた範囲では、どうやらExcel2007の仕様らしいです。 したがって、自分でマクロを組むしかないらしいのですが・・・
183 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 22:59:59 ] >>182 うーん、確かにその通りだった。ごめん。 ShapeRangeのプロパティをヘルプで調べるしかないかなぁ・・・
184 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 23:06:15 ] >>183 184の書き込みが、前後してすみません。 アドバイスありがとうございます。 ShapeRangeのプロパティについてヘルプを調べてみます。
186 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 23:31:32 ] >>180 の最終行に Selection.ShapeRange.Fill.Visible = msoFalse を追加してもダメですか
187 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 23:41:45 ] >>186 ありがとうございます。うちのパソコンはExcel2007が入っていないので 明日、職場で確かめてみます。 ShapeRangeプロパティのヘルプのあたりは見てみたのですが、私のスキル では、ちんぷんかんぷんです。 正直結構まいっています。 遅くまで、付き合ってくださってありがとうございます。 明日、結果を報告します。
188 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 01:32:16 ] うわー2007って全然違うな うちのチームの人2007で納めるやつの動確2003でやってるけど大丈夫か?
189 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 11:10:53 ] >>188 おいおい、それは危険。 ウチは、2003で納めるため、テスト機を2007⇒2003にした。
190 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 11:38:28 ] 2005と2007はどうとでもなりそうだが、 2002は.NET1.0、2003は.NET1.1だからいろいろまずいぞ。
191 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 11:39:16 ] >>190 ごばくった。なんとなく話題が似てた(笑
192 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 12:46:11 ] 2007だとシェイプの位置がずれるんだけど、なんで?
193 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 23:05:11 ] >>186 昨日のアドバイスがヒントになって解決しました。 Selection.ShapeRange.Fill.Visible = msoFalse Selection.ShapeRange.Fill.Transparency = 0# この2行を逆にしたらOKでした。ありがとうございました。
194 名前:デフォルトの名無しさん [2007/12/30(日) 03:05:22 ] コマンドボタンを押すと、押したコマンドボタンを消したいのです。 CommandBotton1.visible=falseでも消えません。 CommandBotton1.BackStyle=0でも消えませんでした。 どのようにすれば消す、もしくは透明にすることができるのでしょうか? よろしくお願いします。
195 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 03:26:42 ] >>194 Excel2000で試してみたが、 フォームのコマンドボタンでも、ワークシートのコマンドボタンでも、.Visibleで消せたぞ?
196 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 04:15:29 ] そりゃBottonで消えるのはボットン便所ぐらいですから
197 名前:デフォルトの名無しさん [2007/12/30(日) 04:24:05 ] >>195 これなのですが、エラーがでてしまいます。 コマンドボタンを押したら、コマンドボタンを消す。 Private Sub CommandButton1_Click() CommandBotton1.Visible = False End Sub
198 名前:デフォルトの名無しさん [2007/12/30(日) 04:25:09 ] >>195 ちなみに、ワークシートのコマンドボタンです。
199 名前:デフォルトの名無しさん [2007/12/30(日) 04:35:52 ] >>196 解決しました。ありがとうございました。
200 名前:デフォルトの名無しさん [2007/12/30(日) 11:34:38 ] ExcelVBAで出来ないことってなにかある? 高級言語覚えたい気持ちもあるんだけど 今のところやりたいことはVBAでできてるからあまり覚えようという気にならないんだよな 高級言語にステップアップしていいことあるかな?
201 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 11:56:55 ] Excelが無くても動くアプリが作れる
202 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 14:20:22 ] VBAは高級言語だぞ。 実行がExcelに縛り付けられていることは、言語自体の話とは別。
203 名前:デフォルトの名無しさん [2007/12/30(日) 15:23:09 ] 折れの場合、vs2005express で、やってみようとしたけど結局、VBAにしか、関心が集まらなかった。イメージがわきやすいからだと思う。 Workbooks.Add(xlWBATExcel4Macrosheet) でexcel4マクロシートを作ってみたけど、これってマクロの管理に何かいいことあるのか?
204 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 19:14:47 ] エクセルのVBAでゲーム作って来いって課題が出たんだが、インベーダーみたいのを作るとして 玉の発射とかの解説してるサイトって無いですか? というか、シューティングゲーム作成の解説のサイトで良いのですが なかなか見付からない・・・
205 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 19:27:53 ] ったく、専学はパーの製造装置でしかないな
206 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 19:30:28 ] >>204 学校の課題レベルで、ゲームってそういうアクション性のあるゲームのことなのか?w 素直に、マインスイーパみたいなヤツでいいと思うよ。 正直、オススメしないぞ。後で行き詰って困ることになる気がする。 ゲームのオブジェクトを、フォームのコントロールにすれば、まぁできんことはないと思うが。
207 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 19:42:39 ] >>206 いや、全く持ってその通りなんですが、ほら、作ってみたいじゃないですかw 敵が一体、左右に動いて、自機も左右だけに動けるとこまでは出来たんだけど あとは玉の発射と当たり判定と、当たったら画像が消えるくらいかなーと
208 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 19:58:57 ] excel2000のVBAで、材料一覧を印刷用にまとめる、材料表を作ったのですが 利用者が動かしていると、特定の行が消えてしまったりすることがあって困ってます。 そこで、いろいろと原因を探っているんですが、質問です。 シートの保護をかけていているシートで、行や列が突然消えるということってあるんでしょうか? ご教授願います。よろしくお願いします。
209 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 20:07:39 ] >>207 よく使う処理としては、弾の座標と、対象の中心座標+大きさ(距離) で衝突判定する方法。 オブジェクトを、丸形か正方形として認識させれば、そう難しいロジックにはならないと思われ。
210 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 20:41:33 ] >>209 dクス 挑戦してみる^
211 名前:デフォルトの名無しさん [2007/12/31(月) 10:27:56 ] 今日も今日とて仕事でVBA
212 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 10:41:25 ] 大晦日も仕事か お疲れ様です
213 名前:デフォルトの名無しさん [2007/12/31(月) 13:33:39 ] いい句だなぁ。
214 名前:デフォルトの名無しさん [2007/12/31(月) 15:45:45 ] かなり微妙な手当てが出たお
215 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 01:20:24 ] myPath = "C:\TEST\*.xls" If Dir(myPath) <> "" then Kill myPath End If だとDir(myPath)がオープンしっぱなしになるそうです。 どう書けば閉じるのでしょうか?
216 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 02:36:50 ] >>215 オープンもしてないモノを、どうしろと? 意味が分かってないなら、せめて本人に書き込ませろ。 ところで、あけおめ。
217 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 13:14:44 ] 開いていないファイルに書き込みパスワードが掛かっているか どうすれば判定できますか? ファイルをパスワードで開いてからだったら、 If ActiveWorkbook.WriteReserved Then とかで判定できると思うのですが、パスワードは 不明でその有無だけ判定したいのです。
219 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 15:52:29 ] >>216 知らないのか? myPath = "C:\TEST\" Dir(myPath) RmDir myPath してみろ。オープンされてるから
220 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 16:16:33 ] あけましておめでとうございます。 >>208 についてお願いしたいのですが・・・
221 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 18:29:49 ] >>219 ・・・・ RmDir myPath そのまま実行してみろ ヘルプ読んで出直せ
222 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 18:32:05 ] ポカーン
223 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 19:24:31 ] >>220 ちょっと考え方が違うな。 コンピュータはウソを吐かないもんだ。 保護を掛けてようがいまいが、意図せずデータが消えるなら、まずはVBAの不具合を疑え。 これだけ出回ってるメジャーなソフトで、アプリの不具合が隠れてる可能性は極めて低い。
224 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 20:53:20 ] +じゃなくて、&で結合すべし。 "問(i)"は、"問("&i&")"にする
226 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 21:05:59 ] >>225 Cells(回答Y, 回答X) = InputBox(Cells(問題Y, 問題X) & "+" & (Cells(問題Y, 問題X + 2)), "問(" & i & ")") にしたら出来ました^ 即レスありがとうございました!
227 名前:226 mailto:sage [2008/01/01(火) 21:09:15 ] あ、問題X+2は問題X+1でした、失礼しました
228 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 21:28:11 ] >>223 そうですよね。VBAのテストをもっと増やしてみます。 ありがとうございます。
229 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 22:58:28 ] thenでかいぎょうすべし
231 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 23:03:22 ] >>230 神様ありがとう!!!
232 名前:129 mailto:sage [2008/01/02(水) 02:53:03 ] >セル2の入力を常に監視し、入力に変化があるたびにフォルダ内にその画像があるか調べ、あれば表示する。 すみません何をどうやったらいいのか全くわかりませんorz とっかかりでもいいのでヒント頂けないでしょうか よろしくお願いします
233 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 04:29:21 ] そもそもVBAの経験があるのかと・・・ VBA/画像/表示とかすりゃいくらでもサンプルがあるってのに homepage1.nifty.com/h-fuji/excel_sample.htm
234 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 12:20:38 ] VBA初心者が使う本でこういうときはどうすればいいのっ??ってやつで お勧めは逆引きのやつとかですか? 他にいいのあります??
235 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 13:10:25 ] ググれば山ほどサンプルが出てくる
236 名前:デフォルトの名無しさん [2008/01/02(水) 21:18:58 ] かんたんプログラミング Excel 2003 これが一番良かった
237 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 21:27:35 ] >>236 まじっすか!? とりあえず見てみるわ。 >>235 図書館にも死ぬほどあったw
238 名前:かな [2008/01/03(木) 11:25:29 ] Excelであみだくじつくりたいんやけど、どっかにサンプルないかな? セルつかうんじゃなくてちゃんと線を引いてやりたいんや?
239 名前:デフォルトの名無しさん [2008/01/03(木) 12:43:46 ] しね
240 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 13:59:10 ] こんにちは。突然ですが いろいろ試してみたんですけど VBAで乱数の回数分だけループさせる方法ってやっぱり不可能ですよね?
241 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 14:03:50 ] 全然不可能じゃないとおもうけど・・・
242 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 14:17:15 ] >>240 にはってこと?
243 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 15:30:45 ] 乱数って少数の端数が出てしまうじゃないですか。
244 名前:かな [2008/01/03(木) 15:32:36 ] 誰かおしえて?
245 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 15:56:29 ] ループさせたいだけなら一回目に発生させた乱数を変数に入れたら終わりな話だと思う
246 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:04:37 ] 少数の端数てことはないだろ。
247 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:05:53 ] つCint
248 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:06:37 ] 0になるだろ
249 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:10:19 ] CIntだろ
250 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:21:41 ] すごい釣りだなw
251 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:28:39 ] つMid(Rnd,3)
252 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 16:39:24 ] Replace(Rnd,".","")
253 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 17:02:32 ] Count = CInt(Rnd * N) + 1 hoge: 'ここで何かする Count = Count - 1 If Count >= 0 Then Goto hoge End If