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)
202 名前:デフォルトの名無しさん [2008/09/11(木) 00:16:48 ] XPでExcel2003です c:\aaa 配下にある全てのファイルとサブフォルダを c:\bbb 配下に全てコピーする事は可能ですか? また、サンプルコード等ありましたらヒントを頂けると助かります 色々と探してはいるのですが、いまいちピンとこないので サンプルがあると助かるのですが、、、、 VBAはまだまだ初心者なので未熟者で恐縮です。
203 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 06:12:54 ] >>202 >>1 ★3 ★4
204 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 19:30:31 ] たまにmougヲチするんだけど、痛い回答者が多いのね。
205 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 19:59:47 ] シートにコンボボックスを貼り付けて AddItemで追加した後にシートを Xボタンを押して閉じようとすると 変更を保存しますかと聞かれるんですが このチェックを外す方法ってあります? OSはXPでExcel2003です。
206 名前:y mailto:sage [2008/09/11(木) 20:15:03 ] >>198 文章中の、特定の単語の有無の判定なら、たぶんInStr関数で何とかなると思います。 調べてみて使えそうなら使ってください。 >199にもありますが、具体的なデータが分からないとアドバイスしずらいです...
207 名前:y mailto:sage [2008/09/11(木) 20:17:20 ] >>195 どんな業界で働いている方か分かりませんが、 実務に役立つ知識が増すようなテーマを選ぶと、 何かと都合がいいのではないでしょうか。 為替、株式市況、地価、青果水産物市況など、 ネット上にはたくさんの生データが公開されています。 それらを自動的に取得し、テーマに沿って演算し、 レポートを出力するマクロを組むだけでも、 相当勉強になると思います。 やるのであれば、日々刻々と変化する数字の方が面白いです。 例えばある人は、東京に10数箇所ある中央卸売市場の毎日の市況データを 取得し、各市場の卸売価格差をグラフに出力するマクロを作っていました。 仲買業者なら、どこの市場で買い付けをすれば一番安いか、 逆に生産者なら、どこの市場に出荷すれば一番高いか、 一目で分かるというものです。ちなみに彼は商社に勤めていますが、 似たようなことをしている人は結構いるでしょう。 Excelは基本的にデータ処理の道具なので、何を試すにしても、 まずは題材になるデータを見つけてこなければなりません。 ならば自分が、分析対象として最も興味を覚えるデータを選ぶのがベターです。 その上で、自分のスキルに応じた試行錯誤をしてみればいいと思います。 仮に「VBA解説書に載っている多機能な家計簿を作るんだ」と決意したとして、 自分で小遣い帳をつけているほどの人ならともかく、付属CDに入っている 仮想データを使って作っていくようなやり方は、モチベーションが湧きづらい ように感じます。
208 名前:デフォルトの名無しさん [2008/09/11(木) 22:02:38 ] あれ今日y絶好調だな
209 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 23:07:26 ] >>206 ×しずらい ○しづらい ◎しにくい
210 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 01:38:18 ] >>195 WindowsVBAつくってよ
211 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 03:36:31 ] yには、人生相談にすら答えてくれそうな勢いを感じる
212 名前:y mailto:sage [2008/09/12(金) 20:05:30 ] >>205 「シートを Xボタンを押して閉じようとすると」とありますが、 シートに×ボタンはないので、たぶん「ブックを」のつもりでしょうか。 「変更を保存しますか」というメッセージは、ブックを保存した直後の状態であれば 表示されません。この状態は、WorkbookオブジェクトのSavedプロパティをTrueに することで、強制的に作り出すことができます。 ブックが閉じられる直前に、その操作が自動で行われるようするためには、 ThisWorkbookオブジェクトのコード領域にBeforeCloseイベントを挿入し、 その中でSavedプロパティを操作します。 Private Sub Workbook_BeforeClose(Cancel As Boolean) ThisWorkbook.Saved = True End Sub
213 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 20:44:06 ] うざいな
214 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 20:51:26 ] >>213 お前がな
215 名前:205 mailto:sage [2008/09/12(金) 22:35:11 ] なるほど。Savedプロパティですか。 ありがとうございました。
216 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 00:10:19 ] 確かにうざいわ
217 名前:y mailto:sage [2008/09/13(土) 02:54:40 ] ・・・
218 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 03:49:12 ] 何コイツ
219 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 06:49:48 ] 煽りなんか気にすんな。
220 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 07:14:09 ] 未だに169が粘着してる
221 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 08:56:37 ] >>217 は、マジでうざいなw
222 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 09:06:33 ] まぁ、2chではあまり見ないキャラであることは確かだな。 嫌ならNGしとけ。
223 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 09:25:58 ] 凄い粘着だな。。。おい。
224 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 10:01:34 ] >>218-223 をNG指定した
225 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 11:55:22 ] マクロなんですけど、行挿入のマクロを作りたいんです。 だけど、挿入する行をセルの値から指定したい場合はどうすればよいですか? 例 B2 = 3 3行目と4行目の間に行挿入をするようB2をつかってさせる。
226 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 13:16:55 ] Dim i As Integer i = Range("B2") Rows(i).Insert
227 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 13:18:30 ] これだけでもいけるな Rows(Range("B2")).Insert
228 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 14:07:04 ] >>226-227 助かります、ありがとうございました。
229 名前:y mailto:sage [2008/09/13(土) 16:13:47 ] ・・・
230 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 22:03:03 ] yそろそろコテにしたら?なりすましが出るくらい名が知れてきたんだからさ
231 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 22:16:44 ] yがコテじゃなかったら何だと言うのだ
232 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 22:33:41 ] トリップつけたら?ってことじゃね?
233 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 23:38:26 ] いい加減、yの話題やめろよ
234 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 00:06:42 ] うざすぎ
235 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 03:08:08 ] エクセルのシートに画像をドラッグした時に、指定場所に指定のサイズに変換したいのですができますか? また、工事管理を行っていて、工期の数日前になると警告文が出るようにできるのでしょうか?
236 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 05:20:37 ] > エクセルのシートに画像をドラッグした時に、指定場所に指定のサイズに変換したいのですができますか? 「シートに画像をドラッグした時に」というイベントが用意されてないから、 「ドラッグした」ら自動で処理するってのは無理 「シートに画像をドラッグしてからボタンを押したら」なら可能だが > また、工事管理を行っていて、工期の数日前になると警告文が出るようにできるのでしょうか? 可能だがExcelでやるべきことじゃないな Excelでやるってことは、Excelとその警告マクロを作ったブックを立ち上げてないと警告文出ないわけだし やるとすれば、「n日前」ではなく、「n日前以降、最初にExcelを立ち上げたとき」という条件になるかな
237 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 16:10:42 ] 前者:できない 後者:できない
238 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 17:37:16 ] EXCEL関数についてお教えください あいうえお(abc) かきくけ(ほげほげ) さしすせそたちつ(nekdk) という行がありまして、()とその中の文字列だけを全部消したいです。 ()は全角です。()内の文字、文字数数がことなるので置換が使えないでいます。。
239 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 18:02:25 ] マッチコレクション
240 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 18:10:17 ] >>238 >>1 ★2
241 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 21:03:02 ] >>238 関数ではないけど ツール→区切り位置で区切り文字を ( にすると ( の前後で別のセルに分かれるからそれではダメかな?
242 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 22:58:50 ] VBAで検索システム的なものを作っています。 行き詰ってしまったので何かアドバイスをいただければと思います。 OSはXPでエクセルのバージョンは2002です。よろしくお願いします。 ブック内に「メイン画面」「情報A」「情報B」という3つのシートがあります。 「メイン画面」のB5セルに会員番号(K_Ban)を入力してマクロを実行すると「情報A」「情報B」から該当の会員番号に関する情報が「メイン画面」の任意のセルに代入されるというものです。 ただし「メイン画面」の形式の都合で、該当する「情報A」のうち、上から3件のみを出力させて4件目以降はカットしています。(下記コード参照) 「情報B」は「種別」という項目があり、「野菜」「肉類」「魚類」…などの分類が30種類ほどあります。 「情報B」についても、各種別毎に3件目以降はカットしたいのですが、行き詰っています。 すなわち、会員番号1について「情報B」は30件あり、野菜25件、肉類5件があるとすると 「メイン画面」には野菜3件、肉類3件分の情報を出力させたいのです。 また、種別については、今後随時変更があるので「種別毎に変数を設定して直接数える」のではないようなコードにしたいと思っています。
243 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 23:00:25 ] Public Sub 検索() Dim K_Ban As String Dim MyRange As Range Dim MyAddress As String Dim cnt As Integer K_Ban = Worksheets("メイン画面").Range("B5") Set MyRange = Worksheets("情報A").Range("A1:A50").Find(K_Ban, LookAt:=xlWhole) MyAddress = MyRange.Address cnt = 8 Do Worksheets("メイン画面").Cells(cnt, 3) = MyRange.Offset(0, 0).Value Worksheets("メイン画面").Cells(cnt, 4) = MyRange.Offset(0, 1).Value Worksheets("メイン画面").Cells(cnt, 5) = MyRange.Offset(0, 2).Value cnt = cnt + 1 If cnt = 11 Then Exit Do End If Set MyRange = Worksheets("情報A").Range("A1:A50").FindNext(MyRange) Loop Until MyRange.Address = MyAddress End Sub
244 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 23:25:44 ] シートの構造書くか、Bookをどこかにアップ
245 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 08:41:27 ] だよな普通
246 名前:y mailto:sage [2008/09/15(月) 11:18:44 ] >>242 |A列. |B列. |C列. |D列. |E列. 01 | 0123456789| .| .| .| 02 | .| .| .| .| 03 | .| .| .| .| 04 | .| .| .| .| 05 | .| .| .| .| シート内のデータ内容を説明するために、以前こんなテンプレを使っている人がいました。 「情報A」「情報B」シートの中身を、文章で説明するより楽だと思ったら使ってください。
247 名前:242 mailto:sage [2008/09/15(月) 13:54:22 ] >>244-246 以下のようなシート構造で、種別→日付で並べ替えてあります。 A B C D 番号 種別 データ1 データ2 1 肉類 豚肉 20080915 1 肉類 牛肉 20080912 1 肉類 鶏肉 20080801 1 魚類 その他 20080401 2 肉類 猪肉 20080905 2 野菜 その他 20080802
248 名前:y mailto:sage [2008/09/15(月) 16:03:53 ] >>247 Sub Sample() Dim K_Ban As Long: K_Ban = Worksheets("メイン画面").Range("B5") Dim r As Long Dim shubetsu As String Dim shubetsuCnt As Integer With ThisWorkbook.Sheets("情報B") .Range(.Cells(1, 1), .Cells(.Rows.Count, 4).End(xlUp)).AutoFilter Field:=1, Criteria1:=K_Ban r = 2 Do While .Cells(r, 1) <> "" If .Rows(r).Hidden = False Then If shubetsu <> .Cells(r, 2) Then shubetsu = .Cells(r, 2) shubetsuCnt = 1 ElseIf shubetsuCnt < 3 Then shubetsuCnt = shubetsuCnt + 1 Else .Rows(r).Hidden = True End If End If r = r + 1 Loop .Range(.Cells(2, 1), .Cells(.Rows.Count, 4).End(xlUp)).SpecialCells(xlCellTypeVisible).Copy _ Destination:=ThisWorkbook.Sheets("メイン画面").Cells(8, 3) '←任意のコピー先セル .AutoFilterMode = False End With End Sub
249 名前:y mailto:sage [2008/09/15(月) 16:04:42 ] 上のコードは、条件に合わない行を非表示にしていき、最終的に表示されている行だけを 「メイン画面」の任意のセルにコピーする、という考え方です。デバッガでステップ実行していけば、 不要な行が非表示になっていく様子がよく分かると思います。不便なところは改良してみてください。 なお、データは「種別→日付で並べ替えてあります」とありますが、見たところ「番号→種別→日付」で並んで いますね。上のコードは、そう並んでいる必要があります。 他のやり方を提案する方もいるかもしれませんので、そちらも参考にしてください。
250 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 18:09:00 ] 先日行挿入について質問したものです。 C3で指定した値の行に行を挿入して、D3,Fj,D3で与えた値を挿入した行のHi、Fi,Iiに値を入れたいのですが、どこが間違っていますでしょうか、ご指摘お願いします。 Sub Main Rows(Range("C3")).Insert Dim i As Integer Dim j As Integer i = Range("C3") Range("D3").Copy Destination:=Range("Hi") j = i-1 Range("Fj").Copy Destination:=Range("Fi") i = Range("E3") Range("D3").Copy Destination:=Range("Ii") END SUB このように作ったのですが、うまくいきません。
251 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 18:39:29 ] >>250 まず、Range("Hi")というセルの指定のやり方はない Rangeを使いたいんなら、Range("H" & i ) ほかには、Cells(i, 8)、もしくは、Cells(i, "H") 解説サイトいっぱいあるから基本的とこから少し勉強したほうがいいよ
252 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 19:29:45 ] エクセルの使い方もロクに知らない俺が 今日これからVBAの勉強を力尽きるまでやってみるぜ。 困ったときはお前らだけが頼りだ。
253 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 06:39:12 ] >>251 ご指摘、解説ありがとうございます。 出来る限り自分でやるようにしてみます。
254 名前:242 mailto:sage [2008/09/16(火) 23:49:49 ] >>248 ありがとうございます。 (もしかしたら上級者の方には普通なのかもしれませんが) 自分には全くない発想でした。勉強になりました。 お示しいただいたコードを元に自分でも勉強したいと思います。
255 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 00:16:06 ] そう考えること自体は不思議ではないと思うよ。 現によその言語ではそういうことができるものだってある(Perlとか)。 いずれにせよVBAはそういうことをしないということに変わりはないけれど。
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 ] たいしたデバッガじゃないからヘルプで十分だよ