【Excel VBA】If Elseとは違う条件式(Select Case)について
エンジニアのIMMRです。Excel VBAの条件式には、以前に説明したExcel VBA 条件式(If Else)とこれから説明するSelect Caseの二つあります。1.従来のIf Else条件式If Elseは条件に合った時は処理Aを、条件に合わなかったら処理Bを実行します。では、下記のようなデータがあり、複数の条件があるとします。If Elseを使用して作成すると2種類の方法が浮かぶと思
Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!
フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。
こんにちは。IMMRです。
例えば、下記のようにフォルダー内にデータが投稿されているとします。
図1 フォルダーの中のファイル
ファイルの名前は、「AABBCCDD」で1~30番号が付いています。
もし、ファイル名を「AABBCCDD」から「ABCDE」に変更したいとなった場合どうしますか。
1個、1個変更しては時間がかかってしまいます。
今回は、フォルダー内のファイルのを名前を一括でリネーム(変更)する方法について説明します。
ファイルの変更するには、Nameステートメントを使用します。
Nameステートメントは、下記のように「現在のファイル名」から「変更したいファイル名」に変更という形式で行います。
Name 「現在のファイル名」 As 「変更したいファイル名」
ファイル名は、「testdata.txt」という感じで、名前だけでなく、パスも入れる必要があります。例:「C:\VBA\testdata.txt」
パスの変更も出来ます。その場合は移動になります。例:Name 「C:\VBA\testdata.txt」As 「C:\VBA1\testdata.txt」
上記の方法でファイルのを名前をリネーム(変更)することが出来ます。
これは1つのファイルに対しての作業です。
そのため、フォルダー(C:\VBA2)の中に、ファイル「aaa1」「aaa2」「aaa3」「aaa4」「aaa5」があるとして
そして「aaa」を「bbb」にリネーム(変更)するとすると
Name C:\VBA2\aaa1 As C:\VBA2\bbb1
Name C:\VBA2\aaa2 As C:\VBA2\bbb2
Name C:\VBA2\aaa3 As C:\VBA2\bbb3
Name C:\VBA2\aaa4 As C:\VBA2\bbb4
Name C:\VBA2\aaa5 As C:\VBA2\bbb5
となってしまい、量が多くなってしまいます。
100個とかあると大変です。
そんな時は、フォルダー内のファイル名をひとつずつ確認して、それに対してリネーム処理を行うことで
何回も記述する必要はなくなります。
下記、記事で紹介しておりますのでご参照下さい。
フォルダー内のファイルのを名前を一括でリネーム(変更)するサンプルコードを紹介します。
サンプルコード
Sub test28()
Dim i As Integer
Dim FILE_PATH As String
Dim FSO As Object
Dim TARGET As Files
Dim TEMP As Object
Dim FILE_OLD As String
Dim FILE_NEW As String
FILE_PATH = "C:\VBA\データ"
Set FSO = New FileSystemObject
Set TARGET = FSO.GetFolder(FILE_PATH).Files
For Each TEMP In TARGET
FILE_OLD = FILE_PATH & "\" & TEMP.Name
FILE_NEW = Replace(FILE_OLD, "AABBCCDD", "ABCDE")
Name FILE_OLD As FILE_NEW
Next
End Sub
ファイル名を取得したいフォルダーのパスは「C:\VBA\データ」なので、一度変数(FILE_PATH)に格納します。
For Each TEMP In TARGETでは
フォルダー内にあるファイルの情報を1つずつ変数(TEMP)に格納していきます。
FILE_OLD = FILE_PATH & "\" & TEMP.Nameでは、
先ほどの変数(FILE_PATH)に格納した「C:\VBA\データ」と1つ目のファイル名を合わせたものを「FILE_OLD 」に格納します。
つまり、現在のファイルのパスと名前が格納されることになります。
ファイル名が「AABBCCDD0001.txt」だとすると「C:\VBA\データ\AABBCCDD0001.txt」が格納されていることになります。
FILE_NEW = Replace(FILE_OLD, "AABBCCDD", "ABCDE")では、
「FILE_OLD」の中の"AABBCCDD"を"ABCDE"に置換して、その結果を「FILE_NEW 」に格納します。
つまり、
「FILE_OLD 」が「C:\VBA\データ\AABBCCDD0001.txt」だとすると
「FILE_NEW 」には「C:\VBA\データ\ABCDE.txt」が格納されます。
Name FILE_OLD As FILE_NEWでは
「FILE_OLD 」から「FILE_NEW 」にリネームしています。
「FILE_OLD 」が「C:\VBA\データ\AABBCCDD0001.txt」で
「FILE_NEW 」には「C:\VBA\データ\ABCDE.txt」だとすると
「C:\VBA\データ\AABBCCDD0001.txt」から「C:\VBA\データ\ABCDE.txt」に変更されます。
このような処理をフォルダー内のデータ一つずつ行っていくことになります。
ただ、置換で怖いのが指定した文字があった場合、ファイル名以外も変わってしまうことがあります。
例:「C:\VBA\DATAACTION\AA01.txt」というデータがあり、を"AA"から"BB"に置換します。
そうなると「「C:\VBA\DATBBCTION\BB01.txt」」となってしまい変えたくなかったところも変わってします。
そのような場合は、拡張子(.txt)等を付けて
「AA」を「BB」に置換ではなくて、
「\AA」を「\BB」にする等をして行う必要があります。
上記、サンプルコードを実行しても「ユーザ定義型は定義されていません」というエラーが発生した場合があります。
その場合は、VBAの詳細設定が必要です。
設定方法は、下記記事の「4.サンプルコードを実行してフォルダー内の全てのファイル名を取得する前に」をご参照下さい。
フォルダー内のファイルのを名前を一括でリネーム(変更)していきます。
下記のようにフォルダーの中にファイルがあるとします。
図2 フォルダーの中のファイル(実行前)
このファイル名を「AABBCCDD」から「ABCDE」に変更していきます。
それでは、上記サンプルプログラムを実行していきます。
図3 フォルダーの中のファイル(実行後)
ファイル1つ1つが「AABBCCDD」から「ABCDE」になっています。
フォルダー内のファイルのを名前を一括でリネーム(変更)することが出来ました。
そのような方はぜひ、Workteriaサイトをご利用ください!
定期的にご本人に合う高額案件を紹介
リモートワークなど自由な働き方ができる案件多数
専属エージェントが契約や請求をトータルサポート