1 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:16:33 ] ExcelのVBAに関する質問スレです 前スレ pc11.2ch.net/test/read.cgi/tech/1212587819/ ★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。 ★2 ExcelのVBA以外の部分に関する質問はNGです。 但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。 ★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。 VBAとは、『Visual Basic for Application』の略で Application ├Workbooks |└Workbook | ├Worksheets | |└Worksheet というApplication以下のオブジェクトを、VB言語で操作するものを指します。 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。 ★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。 ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。 ★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
256 名前:デフォルトの名無しさん [2008/09/17(水) 01:45:49 ] ねぇねぇみんな。 Microsoft Forms 2.0 TextBoxだと右クリックしてもメニューが出てこないよね。 出てくるようにしたいんだけど、何かいい知恵あるかな?
257 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 17:14:06 ] すいません、質問です。 1004エラーが出ます。(´Д`; worksheet記述を加えてみたり、色々試してみたのですが消えません。 作りたいものとしては、 A列を縦にチェックして異なる文字列が出てきたら罫線(太線)を引く、 というものです。 突っ込み、お願いします。 Sub test() Dim i As Integer Dim st_flag As Byte Dim range1 As Range st_flag = 0 i = 3 Do While Cells(i, 1).Value <> "" If (st_flag = 1) Then If (Cells(i, 1).Value <> Cells(i - 1, 1).Value) Then Range(Cells(i, 1), Cells(i, 6)).Borders(xlEdgeTop).LineStyle = xlMedium End If Else st_flag = 1 ''最初の1セルは比較をしない End If i = i + 1 Loop End Sub
258 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 19:04:30 ] 読むのめんどいからどの行でエラーなのか教えて
259 名前:デフォルトの名無しさん [2008/09/17(水) 19:37:16 ] Range(Cells(i, 1), Cells(i, 6)).Borders(xlEdgeTop).LineStyle = xlMedium ↓ Range(Cells(i, 1), Cells(i, 6)).Borders(xlEdgeTop).Weight = xlMedium
260 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 20:29:58 ] 実行時エラー '1004': Border クラスの LineStyle プロパティを設定できません。 これくらいコピペしようぜ
261 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 20:30:38 ] 時間の許す限りエラーの内容くらい小一時間考えよう
262 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 20:37:01 ] 質問者と回答者よりも講釈師の方がが多いスレ
263 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 21:21:15 ] 板全体に言えるわけだが すれ違い甚だしい質問だとか煽りだとか ここはまだまし
264 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 21:42:26 ] >>262 質問者 回答者 講釈師 貴方はどれに該当しますか?
265 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 21:43:55 ] ヌルポ
266 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 21:51:22 ] ポルヌ
267 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 21:52:59 ] >>262 は煽り専門要員だよ
268 名前:y mailto:sage [2008/09/17(水) 23:26:36 ] >>254 念のため補足しますが、>>248 のコードは決して最善の方法ではありません。 合致する会員番号でふるいをかけ、その中から種別ごとに最大3つまでの アイテムを取り出していく取捨選択の過程を、視覚的に理解するために利用してください。 仕組みが単純なので、コードが短くて済むというのが唯一の利点ですが、 マスタデータの行の表示・非表示を切り替えて実現する「検索システム」というのは、 >255でも指摘をいただいていますが、普通はやらないでしょう。 (数がたくさんになると、けっこう動作が重くなってしまいます) まじめに実装するとすれば、取捨選択の考え方はそのまま生かすとしても、 転記の仕方に改良の余地があります。適当な二次元配列を用意して、 取捨選択したデータを一行ずつ追加していき、最終的に配列ごと任意のセルに 書き込む、というのが一般的なやり方になると思います。 >>256 TextBoxのMouseDownイベントプロシージャ内で、Commandbars("登録されているCommandbar名").ShowPopup を 実行すれば、そのタイミングで表示されます。ユーザー設定のショートカットメニューも表示できます。 ちなみにMouseDownイベント発生時は、Button引数 が 定数xlSecondaryButton と等しければ、右クリックと判断できます。
269 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 01:50:36 ] さすがy
270 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 05:40:38 ] うぜぇ
271 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 09:07:55 ] >>257 っす。 >>258 申し訳ないっす。ブレークポイントで調べてみたらここらしいです。 If (Cells(i, 1).Value <> Cells(i - 1, 1).Value) Then → Range(Cells(i, 1), Cells(i, 6)).Borders(xlEdgeTop).LineStyle = xlMedium End If >>259 うぉ、できました! 罫線の種類とか太さとか、指定する先が間違っていたのですね。 >>260 そこまで親切に表示されませんでした。orz 出てきたのは、 実行時エラー '1004': アプリケーション定義またはオブジェクト定義エラーです。 でした。あ、verはexcel2003です。 >>261 小一時間考えて駄目だったので聞いてみました。orzorz Cのコンソール系しか打ったことが無いので、感覚的につかめなくて。 ともあれ、無事にできたので。 ありがとうございました。m(_ _)m
272 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 14:26:11 ] >>266 !ッガ
273 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 18:15:17 ] >>242 をわざわざVBA使ってまでやってる理由が分からんな… 関数だけで何とでもなりそうだw
274 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 19:42:37 ] >適当な二次元配列を用意して、 >取捨選択したデータを一行ずつ追加していき、最終的に配列ごと任意のセルに >書き込む、というのが一般的なやり方になると思います。 はぁ? 何でお前ごときが一般論を語れるんだよ?
275 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 20:49:36 ] >>274 お前ごときがここにくんな
276 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 22:30:24 ] 今独学でVBAを学んでいます。 皆さんにお聞きしたいのですが、 独学で学ぶにお薦めの本はありますか? 大村あつし著 かんたんプログラミング EXCEL VBA基礎編 と できるシリーズのVBAを読んでいます。
277 名前:デフォルトの名無しさん mailto:sage [2008/09/18(木) 23:40:24 ] >>276 漏れの場合はVBAに関する知識はほとんどネットやヘルプで調べたものだったりするし・・・ VBとかやってるならオブジェクトブラウザとヘルプだけでも何とかなると思う 便利なテクニックとかはネットで拾い集めて行く 最初に手に入れたVBAの本に載ってたサンプルがコンパイル通らなかったから 本は全然信用してないだけだけどなw でも1冊だけ役に立った本があったな・・・ 「Excel VBA逆引き大全」とかだったかな?
278 名前:デフォルトの名無しさん [2008/09/19(金) 01:19:38 ] すいません。 VBA作成経験なく、ここを答えを求める場として 使うことに申し訳なく思っています。 複数のExcelファイルを指定する。 当該ファイルを新ブックにして保存する。 →その際、シート名が重複しても問題なし 新ブックのファイル名はあらかじめ指定したものを このようなマクロをつくることは可能でしょうか。 前述のとおり、まったく経験なしなので、 サンプル、たたき台程度で構いませんので、 ご教示いただけたら嬉しいです。
279 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 01:57:51 ] 相変わらずyきめぇw
280 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 02:05:09 ] >>278 さっぱり意味がわかりません。
281 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 02:08:42 ] >>277 >VBとかやってるならオブジェクトブラウザとヘルプだけでも何とかなると思う できる奴の戯言だな
282 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 04:03:48 ] >>278 簡単だよ。
283 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 06:07:09 ] >>275 アホ?
284 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 06:25:29 ] >>281 いや普通できると思うできないのは文盲
285 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 06:26:23 ] >>283 ゆとり乙
286 名前:デフォルトの名無しさん [2008/09/19(金) 06:37:00 ] ここの奴ら「簡単」だの「出来て当たり前」だの口ばかり達者で 入門書レベルの事しか回答出来ないから笑える
287 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 06:43:18 ] >>286 お前だろそれ
288 名前:デフォルトの名無しさん [2008/09/19(金) 07:01:00 ] あらあらw
289 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 07:04:32 ] vbogl.tlbのedxさんめちゃくちゃいい人だ。メールしたら速攻返事きたw
290 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 07:05:18 ] 誤爆した
291 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 07:06:03 ] >>278 複数ファイルのブック内のシートを結合するマクロなら昔適当に作ったのがあるけど
292 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 08:52:57 ] >>278 まとめると 複数ファイルのブック内のシートを結合する シート名は重複している場合がある だよな? シート数は全部でどのくらいになるんだ? あまり多いと1つのブックに収まらないよ
293 名前:デフォルトの名無しさん [2008/09/19(金) 09:10:07 ] >>292 すいません、追加・変更があります。 ○○システムの情報 ブック*2 □□システムの情報 ブック*2 (全部で5システム) 上記1ブックに1シートのみ これをシステムごとに1ブックとして新規に保存。 なので、計5ブックができる。 これを一回でやりたいです。 下記の情報をあらかじめ指定(変更可) - 各システムの情報ブック - 新ブックの名前 を考えています。
294 名前:292 mailto:sage [2008/09/19(金) 10:40:41 ] >>293 かなり手抜きだが書いてみた コピー後のシート名は指定するように作った マクロを入れるブックに A列(ファイルバス)| B列(コピー後のシート名) ○○システム C:\A1.xls| Sheet○○1 C:\B1.xls| Sheet○○2 C:\C1.xls ○×システム C:\A2.xls| Sheet○×1 C:\B2.xls| Sheet○×2 C:\C2.xls といった感じにデータ入れて以下のマクロを動かす (AとBはコピー元Cがコピー先)
295 名前:292 mailto:sage [2008/09/19(金) 10:41:55 ] Sub Macro1() Dim wkAWorkbook As Workbook Dim wkBWorkbook As Workbook Dim wkCWorkbook As Workbook Dim i As Long For i = 0 To 1 With ThisWorkbook.Worksheets(1) 'コピー元1つ目を開く Set wkAWorkbook = Workbooks.Open(.Cells(2 + i * 4, 1)) '1つ目を新規ブックにコピー wkAWorkbook.Worksheets(1).Copy Set wkCWorkbook = ActiveWorkbook 'コピーしたシートをリネーム ActiveSheet.Name = .Cells(2 + i * 4, 2) 改行多すぎので次レスに続く
296 名前:292 mailto:sage [2008/09/19(金) 10:43:09 ] 'コピー元2つ目を開く Set wkBWorkbook = Workbooks.Open(.Cells(3 + i * 4, 1)) '2つ目を上でコピーしたブックにコピー wkBWorkbook.Worksheets(1).Copy after:=wkCWorkbook.Sheets(1) 'コピーしたシートをリネーム ActiveSheet.Name = .Cells(3 + i * 4, 2) '開いた時に見栄えが悪いので1つ目のシートを選択 wkCWorkbook.Sheets(1).Select '名前をつけて保存 wkCWorkbook.SaveAs (.Cells(4 + i * 4, 1)) '終了処理 wkAWorkbook.Close Set wkAWorkbook = Nothing wkBWorkbook.Close Set wkBWorkbook = Nothing wkCWorkbook.Close Set wkCWorkbook = Nothing End With Next i End Sub 専ブラじゃないのでずれて見づらいかも知れんなw
297 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 20:49:06 ] 頭悪そうなコード
298 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 21:05:31 ] 変数名のつけかたって、読んだ参考書や勉強したサイトにけっこう影響されない?
299 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 21:08:44 ] 変数名のセンスが悪いな
300 名前:y mailto:sage [2008/09/19(金) 21:23:03 ] >>276 「VBAの絵本」(アンク) アンクの絵本シリーズは、その言語の仕組みや考え方を、豊富なイラストを用いて直感的に 伝える工夫がなされています。他人に薦めた本の中で、「分かりやすかった」という反応がいちばん 多かったのがこの本です。ACCESS VBAの内容も包括しているので、将来的にも役に立つでしょう。 概念の説明が中心で用例は乏しいので、メイン本にはできませんが、「かんたんプログラミング」を 持っているのであればそれで足りると思います。 「Excel VBAのプログラミングのツボとコツがゼッタイにわかる本〜最初からそう教えてくれればいいのに」(秀和システム) 「絵本」よりも実際性があり、個人的には一押しです。解説文と図の取り合わせがとても洗練されており、 文脈の多義性によるストレスや誤読を最小限に抑えようとする、手厚い推敲の跡が感じられます。新しい本なので まだ他人に薦めたことはありませんが、アマゾンでは好評なようです。 「VBAポケットリファレンス」(技術評論社) ヘルプがあればリファレンス本はいらない、という声もありますが、個人的には手離せません。 ページをめくるより、ヘルプを開いた方が速いような気もするかもしれませんが、 書式指定子の一覧、よく使うオブジェクトのプロパティ一覧など、よく開くページに 付箋を貼って机に置いておくだけで、パッと見たい時には最速のツールになり、ディスプレイも汚れないので 思考が中断されません。(※ただし、ヘルプを使って調べる習慣は、それはそれで必要です) 「逆引き」本(各社) >276で既に上がっていますが、豊富な用例がほしい時は逆引き本です。ただ、「やりたいこと」をもとに 用例を探す場合、インターネット検索のほうがより楽な場合が結構あることも覚えておいてください。 「VBA + (やりたいことに関連するキーワード)」で検索すると、似たようなことを既にやっている人の コードが割と簡単に見つかったりします。
301 名前:y mailto:sage [2008/09/19(金) 21:24:04 ] 他にも良書はたくさんあるので、上にこだわることはありませんが、ひとつだけ、初心者が解説書を選ぶ上で ぜひ注意してほしい点は、VisualBasicEditorの使い方、特にデバッグの作法を丁寧に解説している章があるかどうかです。 ステップ実行、ローカルまたはウォッチウィンドウでの変数の監視、イミディエイトウィンドウからの介入、これらの意味を 早いうちに知り、使いこなせるかどうかが、その後の上達に明らかに影響します。
302 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 21:27:08 ] たいしたデバッガじゃないからヘルプで十分だよ
303 名前:y mailto:sage [2008/09/19(金) 21:56:25 ] >>273 Excel2007なら、オートフィルタの抽出条件で「上位○位まで」という設定が可能になったので、 それを組み合わせれば、フィルタだけで何とかなるような気がします。 ただ関数だけでやるとなると… いい方法が思いつきません。
304 名前:y mailto:sage [2008/09/19(金) 22:28:11 ] すみません。>>300 の「>276で既に上がっていますが」は、「>277」の間違いです。 さらに内容も、結構>277とかぶってしまっています。失礼しました。
305 名前:292 mailto:sage [2008/09/19(金) 23:27:08 ] >>297 頭悪そうなレス >>299 センスが良いネーミングをぜひとも教えてくれ 貶すことしか知らない無能って多いな
306 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 23:31:05 ] あらあらw
307 名前:デフォルトの名無しさん [2008/09/20(土) 00:29:08 ] 先週金曜日あたりから突然会社のExcel2002がおかしくなった。ネットワークが切断されたかなんたらで、ファイルにアクセスできないやらなんたらというのがおきるようになった。 コンパイルするとファイルサイズが600kbから740kbになる場合とならない場合があり、(ソースはバックアップから同じ様にに変更したのに)大きくなった場合、実行すると強制終了になるという症状も現れた。 自宅の2003では問題なかったがためしに2002に変更。SP3を適用したまでは問題なかったが会社と同じバージョンになるよう、全部の更新を適用したところ同じ症状となった ためしに最新のKB8951551を削除するとあっさり解決した・・。同じ目にあってる人いますか? 解決にいたるまでめちゃくちゃ苦労したよ・・・。(いやまだ会社のエクセルでは試せてないけど・・・)
308 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 01:39:41 ] IDでないのにわざわざコテつけて煽るってなにこいつ
309 名前:デフォルトの名無しさん [2008/09/20(土) 02:37:18 ] 初心者です、お世話になります。 他の板で質問したあとに、こちらで質問すべきだったと気付きましたマルチポストですが勘弁してください。 セルA1とB1にそれぞれシリアル値による時間が入っています。 セルの書式設定により時間が表示されています。 ユーザーフォームの中のラベル1にB1からA1を引いた時間を時分秒の形で表示したいのです。 A1は開始時間、B1は終了時間、ラベル1は所用時間と考えてください。 Label1.Caption = Range("B1") - Range("A1").value とやるとシリアル値っぽいのが出るのですが、時間を表示したいのです。 助けてくださいませ。
310 名前:デフォルトの名無しさん [2008/09/20(土) 03:58:49 ] >>292 ホントありがと。 まったくプログラム経験なしだけど、 書いていただいたものをもとに 勉強含め動かしてみたいと思います。 感謝します。
311 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 08:40:23 ] >>309 DateDiff関数でintervalに"s"を指定して秒単位の差分を取得、 後はそこから時分秒に分割して文字列に結合して完成、って所?
312 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 09:24:11 ] >>305 一生そのままで朽ち果てろ
313 名前:デフォルトの名無しさん [2008/09/20(土) 10:14:55 ] ジョン3兄弟
314 名前:y mailto:sage [2008/09/20(土) 13:55:32 ] >>309 >311のやり方で可能ですが、他にこういう書き方も。 Label1.Caption = Format(Range("B1") - Range("A1"), "hh:nn:ss")
315 名前:デフォルトの名無しさん [2008/09/20(土) 16:18:39 ] >>311 >>314 アドバイスどうもありがとうございます。 テストをしてみたのですが、両方とも「’実行時エラー’438:オブジェクトは、このプロパティまたはメソッドをサポートしていません。」 というエラーが出てしまいます。 私は知識不足なので対応がわかりません。 これは、どういうことなのでしょうか?
316 名前:デフォルトの名無しさん [2008/09/20(土) 16:35:45 ] >>311 >>314 失礼しました、できました。 ほんとうにありがとうございました。
317 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 19:35:44 ] hh:mm:ssでなくて?
318 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 20:41:32 ] nnでもいけるんだよね
319 名前:y mailto:sage [2008/09/21(日) 00:37:26 ] そうですね。 書式指定子 "m" または "mm" は、時刻の分も表しますが、日付の月も表します。それによる混乱を回避するため、 分のみを表す指定子「n」が実装されている、という話を何かの本で読んだことがあります。 ヘルプには、「"h" または "hh" の直後、あるいは "ss" の直前に "m" を指定した場合、月ではなく分が表示されます」とあります。 逆に言うと、mだけを独立して使うと、分ではなく月を表します。つまり分のみを表示させたい状況では、どうしても「n」を使う必要があります。 そういうわけで、分は最初から「n」を使う習慣をつけておいたほうが、間違いが少ないように思います。
320 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 00:47:17 ] うざ
321 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 03:56:03 ] >>320 なんでこいつこのスレに粘着してるの?
322 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 08:47:58 ] Excel 2009を使用しております。 テーブルを作成し、いくつか項目を入力した状態で、 GUIでテーブルの見出し行にある矢印メニューボタンを押した時に表示される フィルタのメニューの処理を、VBAから行うにはどのようにすればよいでしょうか? 例えば、TODOリストを想像してください。 ボタンを配置して、ボタンを押すと、 テーブルの1つの列の「開始日付」が今日のもので、 「状態」列が「未完」となっているもののみを表示する。 また、他のボタンを押すと、元に戻る(というか全部表示)。 といったようなことをしたいのです。 画像を見てもらったほうが早いので、説明画像も作成しました。 sylphys.ddo.jp/upld2nd/pc3/src/1221954091856.jpg どのようなクラスのオブジェクトにアクセスすればいいかだけでも、手がかりがあればと思います。
323 名前:y mailto:sage [2008/09/21(日) 09:13:13 ] >>322 チェックを入れたり外したりする操作を、「マクロの記録」(>>1 ★6)を使って記録して、 生成されたコードを見れば、どんなオブジェクトにアクセスしているか手がかりが 得られると思います。
324 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 09:37:36 ] >>321 うざいからだろw
325 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 09:42:50 ] >>323 ありがとうございます。 基本的なことを聞いてしまった様な気がします。テンプレ嫁よ俺。 「開始日付」を「今日」のみ選択、「状態」を「途中」「予定」「スキップ」のみ選んだ時は、 こんな感じで記録されていました。 ActiveSheet.ListObjects("作業記録").Range.AutoFilter Field:=2, Criteria1:= _ xlFilterToday, Operator:=xlFilterDynamic ActiveSheet.ListObjects("作業記録").Range.AutoFilter Field:=1, Criteria1:=Array _ ("途中", "予定", "スキップ"), Operator:=xlFilterValues ListObjectsでListObject(テーブル)が得られて、そのRangeにAutoFilterをかますんですね・・・。
326 名前:デフォルトの名無しさん [2008/09/21(日) 15:51:36 ] 質問なのですが、 同一ファイル内で、シート1上の左側にはシート1の内容、右側にはシート2の内容 のように分割して表示することは可能でしょうか? (ウィンドウを別々に開くのではなく) もしやり方があるのであれば教えてください。 Excel2003を使用しています。 よろしくお願いします。
327 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 17:20:23 ] スレ違い
328 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 20:07:05 ] 質問です。 ------------------------------------------- 【やりたいこと】 (1).ファイル保存ダイアログでファイル名を選択させる。 (2).新規ファイル名を入力することも可能にする。 (3).ファイル保存時に選択可能なファイルタイプ(拡張子)をVBAで指定する。 【直面している問題】 ・Office.FileDialog で msoFileDialogSaveAs を指定すると(3)を満たす方法がわからない ・Office.FileDialog で msoFileDialogFilePicker を指定すると(2)を満たす方法がわからない 【環境】 WindowsXp SP3 + Excel2002 SP3 ------------------------------------------- よろしくお願いします。
329 名前:デフォルトの名無しさん mailto:sage [2008/09/21(日) 21:06:15 ] >>328 です。事故解決しました。 Excel.Application.GetSaveAsFilename を使えばよかったんですね。 スレ汚し失礼。
330 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 00:40:37 ] ExcelVBAって、.netよりもVB6に近いですか?
331 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 07:22:11 ] うーん。その質問は難しいな。 似てるけど全くの別物と思っておいた方がいいよ。
332 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 13:31:46 ] いやVB6とほとんど同じ
333 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 15:45:03 ] VB6でオブジェクトブラウザ開いてみな VBAがあるでよ
334 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 16:05:39 ] >>330-332 何処に焦点当てるかで変わってくる VB6とVBAは、構文規則は全く同じ 組込関数はほとんど同じ 組込オブジェクトは全然別物 >>333 そのVBAとVisual Basic for Applicationは意味違うからw
335 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 18:37:44 ] Worksheets("表").Range("A2").Select と記述するとA2にデータの未入力状態ということで実行エラーが出てしまうのに、 With Worksheets("表") .Select .Range("A2").Select End With と記述するとエラーが出ずに問題なく実行されるのはなぜなの?
336 名前:y mailto:sage [2008/09/24(水) 21:36:05 ] あるセル範囲に対してSelectメソッドを実行したとき、 そのセル範囲が含まれるシートが選択されていなければ、 実行時エラーが発生する仕様になっているためです。 >335の下のコードは、シートを選んでから、セル範囲を選んでいるので、エラーは発生しません。 上のコードも、「表」シートが選んである状態であれば、エラーは発生しません。
337 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 21:57:49 ] >Worksheets("表").Range("A2").Select こうすればいい。 >Worksheets("表").Select >Worksheets("表").Range("A2").Select # って、既に歪の人が書いていたか。
338 名前:デフォルトの名無しさん [2008/09/24(水) 23:27:58 ] スレチでしたら誘導願います。 xp・excel2002で、関数が物足りなくなってきたのでマクロとVBAの勉強始めました。 ネットで検索するとaccessにもVBAとかマクロとか関数も?あるようです? 同僚に挫折したaccessのVBAの本ならあるから1500円で譲るよ。と言われたのですが、 excelとaccessのVBAは同じものですか?全く別物でしょうか?? すみません、宜しくお願いします。
339 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 23:33:34 ] >>338 AccessVBAの本ではVBの勉強にはなるかもしれないがExcelVBAの勉強にはならないので 1500円も出すくらいならちゃんとした本を買いましょう。
340 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 23:37:41 ] >>338 VBAそのものは同じだけど操作対象が全く別物なのでお勧めできない
341 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 23:44:40 ] >>339 >>340 レスdくすです。 つまり、同じものだけど違うものだから?エクセルのVBAの本を買うべき。 と言うことですね?ありがとうございました。 危うく、accessの本を読んでexcel挫折するところでしたw
342 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 00:42:24 ] いらないならタダでくれればいいのにセコイ同僚だな
343 名前:デフォルトの名無しさん [2008/09/25(木) 15:13:33 ] Dim Cnt, Num As Integer Dim Tbx As TextBox Num = 0 For Cnt = 1 To 9 Num = Num + 1 Set Tbx = "TextBox" & Num Tbx.Text = "" Next VBAは変数の型を自動変換してくれると考えて、これを実行すると、 「コンパイルエラー:型が一致しません」と出ちゃいます。無理かな。
344 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 16:09:13 ] >>343 >Dim Tbx As TextBox >Set Tbx = "TextBox" & Num←何がしたいんだ? TextBoxは文字列ではないからコンパイル通らなくて当たり前だな Set Tbx = Worksheets(1).OLEObjects("TextBox" & Num) なら理解できる
345 名前:デフォルトの名無しさん [2008/09/25(木) 16:39:59 ] >>344 サンキュー!!!!!!!!!
346 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 16:45:25 ] ちなみに余計なお節介かもしれんけど Dim Cnt, Num As Integer と書くと cntはVariant型だぞ
347 名前:デフォルトの名無しさん mailto:sage [2008/09/25(木) 17:07:39 ] >>346 わざわざ有難うございます。いただいたアドバイスをヒントに修正しました。 やりたかったのはUserForm1のコントロールTextBox1〜9までの値をクリアすることでした。 Private Sub CommandButton5_Click() ' TextBox1〜9までのTextプロパティの値をクリアする Dim iCnt As Integer, iNum As Integer, oTbx As Control iNum = 0 For iCnt = 1 To 9 iNum = iNum + 1 Set oTbx = UserForm1.Controls("TextBox" & iNum) oTbx.Text = "" Next End Sub
348 名前:デフォルトの名無しさん [2008/09/25(木) 18:48:29 ] ExcelVBAExpressEditionってないの?
349 名前:デフォルトの名無しさん mailto:sage [2008/09/26(金) 09:26:40 ] えっえっえっえっ えっろっびっでぉー
350 名前:デフォルトの名無しさん mailto:sage [2008/09/26(金) 18:02:31 ] >>348 excelが対象なのに、VBAだけじゃ意味無いだろw おとなしくメモ帳に書いとけ。
351 名前:デフォルトの名無しさん [2008/09/27(土) 22:33:47 ] Hになればなるほど、固くなるものってな〜んだ?
352 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 22:35:18 ] 鉛筆の芯
353 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 22:53:05 ] エクセルにVBAが付いてくる…一般 VBAにエクセルが付いてくる…マ >350は素人
354 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 23:28:04 ] > VBAにエクセルが付いてくる…マ これ、笑うところ? あ、マってプログラ"マ"じゃなくて"マ"ヌケってことか それなら納得 プログラマがこんな本質を違えた愚かな発想するわけないもんなw
355 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 00:02:57 ] VBAって、いわゆるスクリプトだろ? サクラエディタにでも書けばいいじゃん。
356 名前:デフォルトの名無しさん mailto:sage [2008/09/28(日) 00:09:48 ] Excel 2008ではVBAサポートが廃止されました