6.[PG2]Excelで、ファイル一覧作成し、ファイル名変更してみよう.part4
こちら第6回「プログラマー養成講座」のパート1になります!
目次はこちらからご参照下さい!
いよいよ
γ.ファイル名変更プログラム仕様(Excel VBA)
に取り掛かります!
頑張ります!
変更したいファイル名のセルの右隣のセル(つまりB行)に変更後のファイル名を記入
ん~、ファイル名の記入ってことは、ここはプログラムじゃないのかな。適当にファイル名を記入します!
シート上に「実行」ボタンを設置
次は実行ボタンの設置か。読取ボタンと同じですね!
A1から下に処理を実施し、空になったら終了とする
あー、まずはプロシージャ作って、実行ボタンに設定しておこう。
じゃん!
じゃん!じゃん!
ひとまず前に師匠が書いてくれた、前のシートの情報をクリアする処理と同じ感じで書いとけばいいのかな。
Public Sub Jikkou()
'宣言
Dim i As Integer
'初期値設定
i = 1
'ループしてA行が、空になるまで処理
Do Until Worksheets("ファイル一覧").Cells(i, 1).Value = ""
i = i + 1
Loop
End Sub
こんな感じかな。
「実行」ボタンを押したときに、変更後のファイル名に記入のあるファイルの名前を変更する
結果はC行に表示する
この2個ですね。わかりました!
ループまでは書いてあるし、中身を作っていくんだよな。
B行の値は・・・
Worksheets("ファイル一覧").Cells(i, 2).Value
で取れるのかな?
どうすればそれが検証できるのかな・・・
動きました!
なるほど、空白の行も処理されてるのかな?
うわー、繋げて書くとわかりやすい!
えっと、次は・・・。ファイル名の変更を書く感じかな?
「ファイル名の記入があるか場合」ですね。なんて検索すればいいか・・・。そのまま検索してみようかな。「VBA ファイル名の記入があるか場合」っと・・・。
思った結果とは違うけど、「ファイルやフォルダの存在チェック」とか引っかかった。これ後で使うやつじゃないかな。この検索結果はとっておこう。
ん~、「VBA セルに値があるか/ないか」とか?
このサイトいけそう。「[Excel VBA]セルが空欄かどうか調べるには?」ってやつがありました!
If ActiveCell.Value = "" Then
Worksheets("ファイル一覧").Cells(i, 3).Value = "あり"
Else
Worksheets("ファイル一覧").Cells(i, 3).Value = "なし"
End If
動かしてみよう。
あれ、全部「なし」になった!?
ん~、これかな。
'If ActiveCell.Value = "" Then
If Worksheets("ファイル一覧").Cells(i, 2).Value = "" Then
Worksheets("ファイル一覧").Cells(i, 3).Value = "あり"
Else
Worksheets("ファイル一覧").Cells(i, 3).Value = "なし"
End If
お、動いたけど、結果が逆だ。「あり」「なし」を入れ替えたらOKかな。
じゃぁ、いよいよファイル名変更かな。「vba ファイル名 変更」で検索してみようかな。
Name Oldpathname As Newpathname
これで出来るみたい。そしたらたぶん、
Name Worksheets("ファイル一覧").Cells(i, 2).Value As Worksheets("ファイル一覧").Cells(i, 3).Value
こういう感じかな?
あれ、駄目だった。
「ファイルが見つかりません。」ということは、
ファイルがないということ?
フォルダから見ると確かにファイルあるんだけど!?
Public Sub Jikkou()
'宣言
Dim i As Integer
'初期値設定
i = 1
'ループしてA行が、空になるまで処理
Do Until Worksheets("ファイル一覧").Cells(i, 1).Value = ""
'Debug.Print Worksheets("ファイル一覧").Cells(i, 1).Value & ":" & Worksheets("ファイル一覧").Cells(i, 2).Value
'If ActiveCell.Value = "" Then
If Worksheets("ファイル一覧").Cells(i, 2).Value = "" Then
Worksheets("ファイル一覧").Cells(i, 3).Value = "なし"
Else
Worksheets("ファイル一覧").Cells(i, 3).Value = "あり"
Name Worksheets("ファイル一覧").Cells(i, 2).Value As Worksheets("ファイル一覧").Cells(i, 3).Value
End If
i = i + 1
Loop
End Sub
うーん、検索してみるか。
「VBA NAME ファイルが見つかりません」とかかな。
なるほど、存在しないファイル名が指定されているときに出るエラーメッセージらしいです。
うーんなんでだろう?
Name Worksheets("ファイル一覧").Cells(i, 2).Value As Worksheets("ファイル一覧").Cells(i, 3).Value
ここなんだろうけど、わかんないなぁ。
あぁ!! 指定がずれてました・・・。
'Name Worksheets("ファイル一覧").Cells(i, 2).Value As Worksheets("ファイル一覧").Cells(i, 3).Value
Name Worksheets("ファイル一覧").Cells(i, 1).Value As Worksheets("ファイル一覧").Cells(i, 2).Value
これで動くかな? あれ、まだ駄目かぁ・・・。
もうちょっと検索してみようかな。
わからない・・・。
候補ワードに今のひさきと同じ気持ちが出てきた・・・。
もうちょっと、頑張ってみます・・・。
「VBA ファイル名変更 うまくいかない」
「VBA NAME ファイルが見つかりません」
ん、これかな?
フルパス・・・?
つまり、ひさきのプログラムだと、シート上にはファイル名しかないので、パスがいっさい書いていないことがエラーの原因になっている? そしたらこんな感じがいいんでしょうか?
Name "C:\work\VB\" & Worksheets("ファイル一覧").Cells(i, 1).Value As Worksheets("ファイル一覧").Cells(i, 2).Value
ありがとうございます、たぶん一人でやっていたら
「ファイルがどこかに飛んで行ってしまいました・・・」ってなっていたと思います・・・。では、修正して実行してみます!
動いた、動きました!ありがとうございます!!
そしたら改めて、できたところ、まだなところをまとめると、
〇ファイルは「ファイル操作.xlsm」に機能追加とする
〇変更したいファイル名のセルの右隣のセル(つまりB行)に変更後のファイル名を記入
〇シート上に「実行」ボタンを設置
〇A1から下に処理を実施し、空になったら終了とする
〇「実行」ボタンを押したときに、変更後のファイル名に記入のあるファイルの名前を変更する
△:結果はC行に表示する
成功した場合は青字で「成功」
ファイルが変更できない場合などのエラー時は赤字で「エラー」
実行前と実行後で同じファイル名の場合は黒字で「変更なし」
未:「ファイル操作.xlsm」のファイル名は変更しない
未:ファイル名変更前に、ファイル存在チェックを実施し、すでにファイルが存在する場合はエラーとして、「既にそのファイル名は存在します」といったメッセージを結果セルに表示する
半分は、いってるかな?では続いて、ぱっとみでわかりやすい
「ファイル操作.xlsm」のファイル名は変更しない
からやっていこうかな。
たぶん
If Worksheets("ファイル一覧").Cells(i, 2).Value = "" Then
ここの””を変えるだけでできるんじゃないかな?
If Worksheets("ファイル一覧").Cells(i, 2).Value = "" Then
Worksheets("ファイル一覧").Cells(i, 3).Value = "なし"
Else
If Worksheets("ファイル一覧").Cells(i, 2).Value = "ファイル操作.xlsm" Then
Worksheets("ファイル一覧").Cells(i, 3).Value = "ファイル名は変更しない"
Else
End If
Worksheets("ファイル一覧").Cells(i, 3).Value = "あり"
'Name Worksheets("ファイル一覧").Cells(i, 2).Value As Worksheets("ファイル一覧").Cells(i, 3).Value
'Name Worksheets("ファイル一覧").Cells(i, 1).Value As Worksheets("ファイル一覧").Cells(i, 2).Value
'Name "C:\work\VB\" & Worksheets("ファイル一覧").Cells(i, 1).Value As "C:\work\VB\" & Worksheets("ファイル一覧").Cells(i, 2).Value
Name ThisWorkbook.Path & "\" & Worksheets("ファイル一覧").Cells(i, 1).Value As ThisWorkbook.Path & "\" & Worksheets("ファイル一覧").Cells(i, 2).Value
End If
こんな感じですかね!
i = 1
Do Until Worksheets("ファイル一覧").Cells(i, 1).Value = ""
Worksheets("ファイル一覧").Cells(i, 1).Value = ""
Worksheets("ファイル一覧").Cells(i, 2).Value = ""
Worksheets("ファイル一覧").Cells(i, 3).Value = ""
i = i + 1
Loop
なんか、すごいわかりやすい感じがする。かける気がする!
文章の書き方が違うからですかね?なんでだろう?
(もくもくとコーディング中・・・)
ちゃんと動いたし、まず最初の①②③はこれであってるかな。
'If ActiveCell.Value = "" Then
If Worksheets("ファイル一覧").Cells(i, 1).Value = "ファイル操作.xlsm" Then
Worksheets("ファイル一覧").Cells(i, 3).Value = "ファイル名は変更しない"
Else
If Worksheets("ファイル一覧").Cells(i, 2).Value = "" Then
Worksheets("ファイル一覧").Cells(i, 3).Value = "記入なし"
Else
'Name Worksheets("ファイル一覧").Cells(i, 2).Value As Worksheets("ファイル一覧").Cells(i, 3).Value
'Name Worksheets("ファイル一覧").Cells(i, 1).Value As Worksheets("ファイル一覧").Cells(i, 2).Value
'Name "C:\work\VB\" & Worksheets("ファイル一覧").Cells(i, 1).Value As "C:\work\VB\" & Worksheets("ファイル一覧").Cells(i, 2).Value
Name ThisWorkbook.Path & "\" & Worksheets("ファイル一覧").Cells(i, 1).Value As ThisWorkbook.Path & "\" & Worksheets("ファイル一覧").Cells(i, 2).Value
Worksheets("ファイル一覧").Cells(i, 3).Value = "ファイル名を変更しました"
End If
End If
ん~、あとは、「ファイルが存在するか」のプログラムか。
「excel ファイル存在」まで入力すると予測?候補で
「excel ファイル存在チェック 関数」って出てきたから、これで検索してみよう。Dir関数ってのを使えばできるのかな?
(もくもくもく)
なんかIFが多くてわかりにくくなってきたな・・・。
とりあえずこんな感じでしょうか?
'If ActiveCell.Value = "" Then
If Worksheets("ファイル一覧").Cells(i, 1).Value = "ファイル操作.xlsm" Then
Worksheets("ファイル一覧").Cells(i, 3).Value = "ファイル名は変更しない"
Else
If Worksheets("ファイル一覧").Cells(i, 2).Value = "" Then
Worksheets("ファイル一覧").Cells(i, 3).Value = "記入なし"
Else
If Dir(ThisWorkbook.Path & "\" & Worksheets("ファイル一覧").Cells(i, 1).Value) = "" Then
Worksheets("ファイル一覧").Cells(i, 3).Value = "A列のファイルが存在しません"
Else
If Dir(ThisWorkbook.Path & "\" & Worksheets("ファイル一覧").Cells(i, 2).Value) <> "" Then
Worksheets("ファイル一覧").Cells(i, 3).Value = "B列のファイルが存在しています"
Else
'Name Worksheets("ファイル一覧").Cells(i, 2).Value As Worksheets("ファイル一覧").Cells(i, 3).Value
'Name Worksheets("ファイル一覧").Cells(i, 1).Value As Worksheets("ファイル一覧").Cells(i, 2).Value
'Name "C:\work\VB\" & Worksheets("ファイル一覧").Cells(i, 1).Value As "C:\work\VB\" & Worksheets("ファイル一覧").Cells(i, 2).Value
Name ThisWorkbook.Path & "\" & Worksheets("ファイル一覧").Cells(i, 1).Value As ThisWorkbook.Path & "\" & Worksheets("ファイル一覧").Cells(i, 2).Value
Worksheets("ファイル一覧").Cells(i, 3).Value = "ファイル名を変更しました"
End If
End If
End If
End If
あーーー、ちゃんと一発で動いたー!!!!!
すっごい嬉しいーー!!!!
今回は、なんか、手ごたえがあります。つくった感が!
If Worksheets("ファイル一覧").Cells(i, 1).Value = "ファイル操作.xlsm" Then
Worksheets("ファイル一覧").Cells(i, 3).Value = "ファイル名は変更しない"
Else
If Worksheets("ファイル一覧").Cells(i, 2).Value = "" Then
Worksheets("ファイル一覧").Cells(i, 3).Value = "記入なし"
Else
If Dir(ThisWorkbook.Path & "\" & Worksheets("ファイル一覧").Cells(i, 1).Value) = "" Then
Worksheets("ファイル一覧").Cells(i, 3).Value = "A列のファイルが存在しません"
Else
If Dir(ThisWorkbook.Path & "\" & Worksheets("ファイル一覧").Cells(i, 2).Value) <> "" Then
Worksheets("ファイル一覧").Cells(i, 3).Value = "B列のファイルが存在しています"
Else
Name ThisWorkbook.Path & "\" & Worksheets("ファイル一覧").Cells(i, 1).Value As ThisWorkbook.Path & "\" & Worksheets("ファイル一覧").Cells(i, 2).Value
Worksheets("ファイル一覧").Cells(i, 3).Value = "ファイル名を変更しました"
End If
End If
End If
End If
If Worksheets("ファイル一覧").Cells(i, 1).Value = "ファイル操作.xlsm" Then
Worksheets("ファイル一覧").Cells(i, 3).Value = "ファイル名は変更しない"
ElseIf Worksheets("ファイル一覧").Cells(i, 2).Value = "" Then
Worksheets("ファイル一覧").Cells(i, 3).Value = "記入なし"
ElseIf Dir(ThisWorkbook.Path & "\" & Worksheets("ファイル一覧").Cells(i, 1).Value) = "" Then
Worksheets("ファイル一覧").Cells(i, 3).Value = "A列のファイルが存在しません"
ElseIf Dir(ThisWorkbook.Path & "\" & Worksheets("ファイル一覧").Cells(i, 2).Value) <> "" Then
Worksheets("ファイル一覧").Cells(i, 3).Value = "B列のファイルが存在しています"
Else
Name ThisWorkbook.Path & "\" & Worksheets("ファイル一覧").Cells(i, 1).Value As ThisWorkbook.Path & "\" & Worksheets("ファイル一覧").Cells(i, 2).Value
Worksheets("ファイル一覧").Cells(i, 3).Value = "ファイル名を変更しました"
End If
同じ結果になるのに、書き方が幾通りもあるものなんですね。
今までプログラムって、絶対正しいコードがあって、
それを探すみたいなことだと思ってました。
はい、ありがとうございました!
漫画や小説みたいに、
プログラムにも書く人の癖がでるなんて知らなかったので目から鱗です。
次までに少し配布プログラムを見てみたいと思います。
今日はありがとうございました!
この記事が気に入ったらサポートをしてみませんか?