例えば、11.jpg~79.jpgの画像を読み込むとします。
これをvbaで記述すると
j & i & ".jpg"
となります(1の位と10の位の数字は独立していると考えてください)
これを、1-1.jpg~7-9.jpg といった形式をvbaで記述すると、
j & "-"& i & ".jpg"
となります。
これをvbaで記述させるときに、これをA1のセルに「ji」や、「j-i」や、「i」、「j」と入力させたときに様々なパターンに対応させたいと考えております。
(他の方法でもいいです。やりたいことは、複数パターンのファイル名に対応させたいという事です。)
いちいち、写真のファイル名のパターンが違うたびにコード書き直すのも面倒ですし、プログラムわからない人には読み込ませることすらできないです。
4パターンだったら、if文で分けちゃえば?という人もいるでしょうが、それは最終手段として残しておきたいです(プログラムがえらい長くなり、後々の修正が大変だし、パターンが増えるたび追加しなければならないので)
せめて、C言語のように#defineによる置き換えができれば、
#define PATARN j & "-"& i
として、「一か所のみ修正すれば楽ちん」みたいなことができればいいんですけれども、
VBAで、C言語の#defineに該当するものが何かよくわかりません。
(プログラム本文にはPATARNに該当する箇所が何か所かあるので、修正が大変なんです)
もし必要ならと思い、ソースの一部を書いておきます(主要なところだけ残して、後はざっくり削除しています)
やってることは、写真を挿入して、規則的に並べて、JPEG変換しています
(下のコードは写真の挿入のみ)
Sub 写真挿入→JPEG変換()
On Error Resume Next
Dim flag As Integer
Dim xoffset As Integer
Dim yoffset As Integer
Dim Ystart As Integer
Dim i As Integer
Dim j As Integer
Dim Xstart As Integer
Dim str As String
Dim Er As String
Xstart = 1
Dim Xend As Integer
Dim Yend As Integer
flag = 0
xoffset = 1
yoffset = 1
Ystart = 1
Yend = 6
Xend = 6
Application.ScreenUpdating = False
For j = Xstart To Xend
For i = Ystart To Yend
ActiveSheet.Pictures.Insert(ActiveWorkbook.Path & _
j & i & ".jpg").Select
If i = Yend Then
Else
If flag = 0 Then
ActiveCell.Offset(yoffset, 0).Range("A1").Select
ElseIf flag = 1 Then
ActiveCell.Offset(0, xoffset).Range("A1").Select
End If
End If
Next
If flag = 0 Then
ActiveCell.Offset(-(Yend - Ystart) * yoffset, xoffset).Range("A1").Select
ElseIf flag = 1 Then
ActiveCell.Offset(yoffset, -(Yend - Ystart) * xoffset).Range("A1").Select
End If
Next
Application.ScreenUpdating = True
End Sub
No.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
:
という感じ。
いずれにしても、パターンを文字列型変数に設定して
ループカウンタと置き換えてあげれば良いかと思います。
これは凄い。
まさに、パーフェクトな答えです。
知らない関数がいくつか見られたので調べて理解してみようと思います。
ありがとうございました
No.2
- 回答日時:
> 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
と入れれば良かったのか・・・
今気づきました。申し訳ありません。
No.1
- 回答日時:
>
これをvbaで記述すると
j & i & ".jpg"
となります(1の位と10の位の数字は独立していると考えてください)
何のことだか、わからない。初心者的発想では。
ファイル名は
(1)普通フルで入力させる
(2)文字列的にリストから選択させる
(3)今までにに作ったファイル名もあわせて掲示し、ダイアロウグで表示して入力させる。
などが多い。
ーー
たとえファイル名が2つの意味的な部分に分かれているにしても、2つを分けて入力させて合成などするのは
使う人が困惑するのでは。
文字部+番号部の番号部ぐらいは新しい数字文字を案内することはあっても良いかも。
>、プログラムわからない人には読み込ませることすらできないです
なんていっているが、この質問が、珍奇な発想では。
実際に回りにいる人に実例(コードではない)を示してどれが、素直に判りやすいか聞いてみたら。
こんな質問コーナーに質問するよりよほど大切な態度だと思う。
確かに、自分のやっていることは分かりづらいものでしたね・・・
他人に使わせるとしたら、分かりづらかったです。
素直に、周りの人にどんな感じがいいか聞いてみます。
実際上司にも、連番で入力することは少ないんじゃないかって言われました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミング初心者です。 Py...
-
getchar()について 教えてくだ...
-
Eclipseコンソール表示を、リセ...
-
4桁の数字以外を入力したらエラ...
-
コマンドプロンプトからのEOFの...
-
C言語でgetchar();が上手く使え...
-
C言語scanf_sで何故か2回入力に...
-
数値の連続入力終了条件について
-
batプログラム上で文字列を入力...
-
"scanf"でエンターで改行させな...
-
恥ずかしながらC言語解析中のプ...
-
Win32とC++で非アクティブウィ...
-
Yesならこっちへ、NOなら...
-
EDITコントロールで入力できる...
-
入力値が1以下、かつ数字以外の...
-
Userformの入力順序をタブオー...
-
Linuxで入力待ちなしkeyread関...
-
*をユーザーが入力した数字の数...
-
scanf関数 バッファに残ったエ...
-
フローチャートについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正負を反転させて出力するプロ...
-
プログラミング初心者です。 Py...
-
数字以外が入力されたらエラー...
-
Eclipseコンソール表示を、リセ...
-
Excel VBAで、Application.Inpu...
-
*をユーザーが入力した数字の数...
-
java初心者です。入力されたの...
-
Linuxで入力待ちなしkeyread関...
-
batプログラム上で文字列を入力...
-
WindowsでEOF
-
Userformの入力順序をタブオー...
-
コマンドプロンプトからのEOFの...
-
EDITコントロールで入力できる...
-
VisualStudio2019のコードアナ...
-
電卓の小数点
-
Eclipseでコマンドラインを入力...
-
小数か整数かを判定する方法
-
cout関数を使っているのですが...
-
UWSCで変数をキー入力
-
ワードで文字を入力する時の変...
おすすめ情報