- ベストアンサー
VBAで複数のパターンのファイル名を読み込む方法
- VBAを使用して、複数のパターンのファイル名を読み込む方法を探しています。写真のファイル名のパターンが異なる場合でも対応できる方法を知りたいです。
- C言語のように#defineによる置き換えができれば、一か所のみ修正すれば対応できると便利だと思いますが、VBAでは#defineに相当する機能がないようです。
- プログラム全体を修正せずにファイル名のパターンを変更できる方法を知りたいです。if文で分岐させる方法は最終手段として考えています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Option Explicit Const ptn = "ji" Sub test() Dim a As Long Dim b As Long Dim sa As String Dim sb As String For a = 1 To 2 sa = Replace$(ptn, "j", CStr(a)) If InStr(ptn, "i") = 0 Then MsgBox ActiveWorkbook.Path & "\" & sa & ".jpg" Else For b = 1 To 2 sb = Replace$(sa, "i", CStr(b)) MsgBox ActiveWorkbook.Path & "\" & sb & ".jpg" Next End If If InStr(ptn, "j") = 0 Then Exit For Next End Sub こんな感じですね。 または、A1セルに入力されたパターンを読み込ませるなら Option Explicit Sub test() Dim a As Long Dim b As Long Dim sa As String Dim sb As String Dim ptn As String ptn = Range("A1").Value For a = 1 To 2 : という感じ。 いずれにしても、パターンを文字列型変数に設定して ループカウンタと置き換えてあげれば良いかと思います。
その他の回答 (2)
- bin-chan
- ベストアンサー率33% (1403/4213)
> ActiveSheet.Pictures.Insert(ActiveWorkbook.Path & _ > j & i & ".jpg").Select 結局のところ、ここのパターンを代えるだけでしょ? 事前に"ファイル名"を生成する部分を追加し、変数に格納(Ex:strFileName) する(=IFかSelectCase文)しか無いのでは? ActiveSheet.Pictures.Insert(ActiveWorkbook.Path & _ strFileName).Select
お礼
回答ありがとうございます。 そういうのも考えたんですが、strFileName=j-i と置くと "(パス名)\j-i.jpg"という感じに読み込まれてしまって上手くいきませんでした。 ハッ for文の中に strFileName=j & "-" & i と入れれば良かったのか・・・ 今気づきました。申し訳ありません。
- imogasi
- ベストアンサー率27% (4737/17069)
> これをvbaで記述すると j & i & ".jpg" となります(1の位と10の位の数字は独立していると考えてください) 何のことだか、わからない。初心者的発想では。 ファイル名は (1)普通フルで入力させる (2)文字列的にリストから選択させる (3)今までにに作ったファイル名もあわせて掲示し、ダイアロウグで表示して入力させる。 などが多い。 ーー たとえファイル名が2つの意味的な部分に分かれているにしても、2つを分けて入力させて合成などするのは 使う人が困惑するのでは。 文字部+番号部の番号部ぐらいは新しい数字文字を案内することはあっても良いかも。 >、プログラムわからない人には読み込ませることすらできないです なんていっているが、この質問が、珍奇な発想では。 実際に回りにいる人に実例(コードではない)を示してどれが、素直に判りやすいか聞いてみたら。 こんな質問コーナーに質問するよりよほど大切な態度だと思う。
お礼
確かに、自分のやっていることは分かりづらいものでしたね・・・ 他人に使わせるとしたら、分かりづらかったです。 素直に、周りの人にどんな感じがいいか聞いてみます。 実際上司にも、連番で入力することは少ないんじゃないかって言われました。
お礼
これは凄い。 まさに、パーフェクトな答えです。 知らない関数がいくつか見られたので調べて理解してみようと思います。 ありがとうございました