[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『vbsで特定の列に画像のファイル名を抽出する方法』(びんご)
Option Explicit
Dim bk, c, ex, f, gf, i, n, r, sh, so
Set so = CreateObject("Scripting.FileSystemObject")
Set gf = so.GetFolder(".")
Set ex = GetObject(, "Excel.Application")
Set bk = ex.Workbooks(1)
Set sh = bk.Worksheets(1)
r = sh.Cells(sh.Rows.Count, 1).End(-4162).Row
For i = 1 to r
n = sh.Cells(i, 1).Value
For Each f In gf.Files
If n = Left(f.Name, Len(n)) and LCase(so.GetExtensionName(f.Name)) = "jpg" Then
c = sh.Cells(i, sh.Columns.Count).End(-4159).Column + 1
sh.Cells(i, c).Value = f.Name
End If
Next
Next
Set gf = Nothing
Set so = Nothing
MsgBox("Finished!")
上記のvbsは
A列に記入されている「商品番号」と、特定のフォルダで保存しているファイル名の頭の文字が一致し、なおかつ、拡張子が「jpg」の場合に横に書き出すというマクロです。
c = sh.Cells(i, sh.Columns.Count).End(-4159).Column + 1
の部分で
B列以降のセルに順番に書き出すという処理をしているのですが、
今回は特定のE列、G〜O列にファイル名を抽出したいと考えております。
ですが、上記のように順番に書き出しではなく特定の場所に書き出す方法がわからないのでお教え頂けませんか?
< 使用 Excel:Excel2013、使用 OS:Windows10 >
(1) VBSっていってるけど、VBスクリプトじゃなくて、VBAのコードに見えるので、VBAの間違いでしょうか?(まぁ、私はVBS知らないのでそう見えるだけかもですけど)
【以下、VBAのコードとしてです。】
(2) インデントがついてないのですごく読みづらいです。
(3) 特定のE列、G〜O列の「特定」ってどこですか?エクセルの話であればシートやセルで説明してもらえませんか?
(E1〜E3、G4〜O10 の範囲に出力したいなど)
(4) 順番に書き出しではなく特定の場所 とのことですが、順序と出力場所 は別の話ではないでしょうか?
(5)FSO使うくらいのスキルがあるなら、型は省略しないほうがよくないですか?
ざ〜っとみると、カレントフォルダの1つ上の階層に入ってるjpgファイルを列挙するVBAのコードのように見えますが外してますか?
(もこな2) 2018/02/01(木) 21:36
(2) インデントの件は申し訳ございません。
(3) 運営しているネットショップで商品を一括登録するときに画像も登録する必要があり、その際に
のような商品画像URLを記述する必要があります。
そのセルの場所がE列とG〜O列に商品画像URLを記入する箇所になっており、その箇所に抽出するにはどのようにすべきか悩んでおります。
(4)確かにその通りでございます。
(5) FSOとは何でしょうか?
ちなみに、カレントフォルダの1つ上の階層に入ってるjpgファイルを列挙するVBAのコードのように見えますが外してますか?とはどう言う意味でしょうか?
(びんご) 2018/02/01(木) 22:11
横からすみません。
これはvbsのコードにしか見えません。
また、vbsは変数の型は宣言出来ません。全てVariant型になります。
(通りすがり) 2018/02/01(木) 22:14
>びんごさん
(1)は上記のとおり、私がわかってなかっただけのようです。ごめんなさい。
(2)は、ExcelでVisual Basic Editorというのを開くと、VBAのコードを入力する専用の画面が
ひらくのでインデントつけるときに便利です。
(3)はちょっとよくわかりません。なんか画像のフルパスの例と、このフォルダ名がどの列に
入ってほしいなどの情報があると、VBAの方でお手伝いできるかもしれません。
(5)は分かりづらくてすみません。FileSystemObjectの略です。
外してますか? はちがいますか?って意味ですね。まぁVBAコードじゃなかったわけですが。。。
(もこな2) 2018/02/01(木) 22:32
For i = 1 To r c = 5 n = sh.Cells(i, 1).Value For Each f In gf.Files If n = Left(f.Name, Len(n)) And LCase(so.GetExtensionName(f.Name)) = "jpg" Then
sh.Cells(i, c).Value = f.Name If c = 5 Then c = c + 2 Else c = c + 1 End If End If Next Next
(マナ) 2018/02/01(木) 22:36
で、次の「商品番号」に変わると、c=5でリセット
(マナ) 2018/02/01(木) 23:07
D列とG〜O列だとしたら
C=4で
If c = 5 Then c = c + 2 Else c = c + 1
の箇所が
IF c =4 then
c = c + 3 Else c = c + 1 になるということでしょうか? (びんご) 2018/02/01(木) 23:13
もし、ファイル数が多いと、
P列以降にも書き込まれちゃいますが
わかりますよね。
(マナ) 2018/02/01(木) 23:25
AIからAK列、AM,AP,AS列が画像ファイル名を入力する項目なのですが、
If c = 36 Then c = c + 1 Else c = c + 4 else c = c + 7 else c = c + 10 であっておりますでしょうか?
(びんご) 2018/02/03(土) 23:57
http://excelvba.pc-users.net/fol6/6_1.html
(通りすがり) 2018/02/04(日) 10:34
a = Array(35, 36, 37, 39, 42, 45)
For i = 1 To r c = 0 n = sh.Cells(i, 1).Value For Each f In gf.Files If n = Left(f.Name, Len(n)) And LCase(so.GetExtensionName(f.Name)) = "jpg" Then sh.Cells(i, a(c)).Value = f.Name c = c + 1 If c > UBound(a) Then Exit For End If Next Next
(マナ) 2018/02/04(日) 11:01
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.