アプリ版:「スタンプのみでお礼する」機能のリリースについて

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文を全てのファイルを処理するまでループさせたいのですが、どなたかお教えいただけないでしょうか?

A 回答 (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/sub0 …
フォルダ内のファイル一覧の取得
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/06/10 13:54

ファイル名が、


ABCD32.csv
のように拡張子の直前に2桁の数字があるものを処理したいのであれば、

ファイル名 = "ABCD32.csv"
Fnum = Mid(ファイル名, Len(ファイル名) - 5, 2) + 0
とすれば数字だけ取り出せるので、

If Fnum >= 32 And Fnum <= 35 Then
とすれば処理ができると思います。

ファイル名の規則性が違うのであれば、
別な方法もあると思います。

この回答への補足

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

補足日時:2009/06/09 13:14
    • good
    • 0
この回答へのお礼

ありがとうございました。
だいたい形にはなったのですが

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

お礼日時:2009/06/09 14:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!