• 締切済み

マクロ 上位モジュールの作成

4つのマクロ(basファイル)A,B,C,Dがあります。 これらを下位モジュールとする、上位モジュールをつくり 条件に応じてマクロを実行させたいと思っています。 どのようにマクロになりますでしょうか? 条件はファイル名に32~38の数字が含まれていて 32~35まではAの処理、 36はBの処理、37はCの処理、38はDの処理をしたいと考えています。 イメージとしては IF ファイル名=*32.csv or *33.csv or *34.csv or *35.csv Then A.bas elseif ファイル名=*36.csv Then B.bas elseif ファイル名=*37.csv Then C.bas elseif ファイル名=*38.csv Then D.bas end if 上記のような感じでIF文を全てのファイルを処理するまでループさせたいのですが、どなたかお教えいただけないでしょうか?

みんなの回答

回答No.2

#1です >Fnum= の行で型が一致しません。 >となります。どうしたらいいでしょうか? > >ファイル名 = "C:\data" >'このフォルダ下に更に幾つかのフォルダがあり、それぞれのフォルダに対象のファイルが2つある >Fnum = Mid(ファイル名, Len(ファイル名) - 14, 2) + 0 このまま実行すると、型が一致しませんとでると思います。 Mid関数で出力されるのは文字列で、 たとえば『32』という文字列に数字のゼロを足しているので、 32という数字になります。(32以上35以下という処理をするには数字の方が都合が良いのです) >ファイル名 = "C:\data" というようになっており、このままでは処理したい数字を取得できません。 ファイル名 = "C:\data\●●●●\dt000_D10_31_32.csv" Fnum = Mid(ファイル名, Len(ファイル名) - 5, 2) + 0 というようにすれば、右から6番目と5番目の2文字を取得するので、 32という数字が取得できます。 文字列と数字を同時に処理しているので、 些細なことで型が一致しない事が発生するので注意が必要です。 フォルダ内のファイル名を取得する方法は色々ありますが、 下記のサイトも参考になると思います。 フォルダ内のワークブックを順次処理する。 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_120.html フォルダ内のファイル一覧の取得 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_080.html

water18
質問者

お礼

ありがとうございます。 参考にしてみます。

回答No.1

ファイル名が、 ABCD32.csv のように拡張子の直前に2桁の数字があるものを処理したいのであれば、 ファイル名 = "ABCD32.csv" Fnum = Mid(ファイル名, Len(ファイル名) - 5, 2) + 0 とすれば数字だけ取り出せるので、 If Fnum >= 32 And Fnum <= 35 Then とすれば処理ができると思います。 ファイル名の規則性が違うのであれば、 別な方法もあると思います。

water18
質問者

お礼

ありがとうございました。 だいたい形にはなったのですが Fnum= の行で型が一致しません。 となります。どうしたらいいでしょうか? Dim i As Integer ファイル名 = "C:\data" 'このフォルダ下に更に幾つかのフォルダがあり、それぞれのフォルダに対象のファイルが2つある Fnum = Mid(ファイル名, Len(ファイル名) - 14, 2) + 0 For i = 1 To 14 'とりあえず7つのフォルダのデータを処理 If Fnum >= 32 And Fnum <= 35 Then A.bas ElseIf Fnum = 36 Then B.bas ElseIf Fnum = 37 Then C.bas ElseIf Fnum = 38 Then D.bas End If Next i

water18
質問者

補足

ファイル名は dt000_D10_31_32.csv のような感じになっています。変わるのはdtの後が001になったり、 Dの後の数字が変化するくらいです。