質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

1回答

590閲覧

EXCELファイル名の一括変換について

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

1クリップ

投稿2020/04/03 23:32

下のように勤怠管理表のファイルを保存しているのですが、ファイルの名前を一括変換できる方法はあるのでしょうか。
4月1日分のフォルダに入っている1階分のファイルは、040101勤怠管理表.xlsx、2階分は040102勤怠管理表.xlsxと一括で変換したいです。

????4月勤怠管理表 └─????0401 ├─????1階 │ └─勤怠管理表.xlsx ├─????2階 │ └─勤怠管理表.xlsx ├─????3階 │ └─勤怠管理表.xlsx └─????0402 ├─????1階 │ └─勤怠管理表.xlsx ├─????2階 │ └─勤怠管理表.xlsx ├─????3階 │ └─勤怠管理表.xlsx └─????0403 ├─????1階 │ └─勤怠管理表.xlsx ├─????2階 │ └─勤怠管理表.xlsx ├─????3階 │ └─勤怠管理表.xlsx

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/04/03 23:35

で、しつもんはなんでしょうか
m.ts10806

2020/04/03 23:47

プログラミングと関係ないのでは? 可能か不可能かだと大抵のことは「可能」です。 つまり調べたり試したりして解決できるものです。 自身で調べたり試したりしたことを記載してください
meg_

2020/04/03 23:53

プログラムをご自身で作成すれば可能だと思います。
退会済みユーザー

退会済みユーザー

2020/04/03 23:54 編集

すみません。説明不足でした。 VBAを使って、連番で一括変換する方法は分かったのですが、フォルダの日付+フォルダの階をファイルの名前の先頭につける方法が知りたかったです。
meg_

2020/04/03 23:55

VBAでフォルダ名の取得は出来ますか?
meg_

2020/04/03 23:56

「VBAを使って、連番で一括変換する方法は分かった」のであれば、そのこととそのコードを質問に追記しましょう。
退会済みユーザー

退会済みユーザー

2020/04/03 23:58

はい、フォルダ名を取得するところまでは調べて分かりました。
m.ts10806

2020/04/04 00:46

VBA組まれているのでしたらできているところまでで良いので提示してみてください。
gentaro

2020/04/04 02:14

フリーのツール使えば簡単にできそうだけど、自分で組む意味あるんだろうか。
guest

回答1

0

ベストアンサー

これは、Excel VBAではなくPowerShellなどを使用してもOKなのでしょうか?
それでしたら、以下のようなコードで変換できると思います。

PowerShell

1#ターゲットフォルダのフルパス名を受け取る 2param( 3 [parameter(ValueFromRemainingArguments = $true)] 4 [String]$TargetDir # = "D:\WorkShop\勤怠管理表" 5) 6function MyPause() { 7 Write-Host "続行するには何かキーを押してください..." -NoNewLine 8 [Console]::ReadKey() > $null 9} 10 11if ($TargetDir -eq $null -or $TargetDir -eq "") { 12 Write-Host "ターゲットフォルダのフルパス名を入力してください。" 13 MyPause 14 exit 15} 16 17$items = Get-ChildItem $TargetDir -Recurse -File -Include "勤怠管理表.xlsx" 18 19foreach ($item in $items) { 20 $file_name = Split-Path $item -Leaf 21 22 $par1 = Split-Path $item -Parent 23 $kai_name = Split-Path $par1 -Leaf 24 25 $kai_num = [int]$kai_name.TrimEnd("階") 26 $kai_name = "{0:d2}" -f $kai_num 27 28 $par2 = Split-Path $par1 -Parent 29 $date_name = Split-Path $par2 -Leaf 30 31 $target_name = $date_name + $kai_name + $file_name 32 33 Write-Host $target_name 34 # Rename-Item -Path $item -NewName $target_name 35} 36 37MyPause

このコードを「rename.ps1」などのファイル名で保存してから、
PowerShellのコンソールから、

.\rename2.ps1 "D:\WorkShop\勤怠管理表"

のようにタイプすれば変換できると思います。

なお、念のために変換対象のファイル名は「勤怠管理表.xlsx」限定としています。
また、ソースコードの最後の部分の「Rename-Item」は最初はコメントにしています。
「Write-Host」でファイル名を表示しますので、変換後のファイル名に間違いがないことを
確認してからコメントアウトして実行してみてください。

投稿2020/04/04 01:27

autumn_nsn

総合スコア335

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問