こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

エクセルで、ファイル名を(追加で)取得したい

エクセル2010を使用しています。
VBA(マクロ)で以下の作業を実行したいと考えていますが、
初心者につき、ご教示いただけますでしょうか。

以前、ファイル名を取得するコードをご教示いただいたのですが、
使っている内に
「追加」をする機能を付けたいと思うようになりました。

以下は、現状使用しているコードです。
※以前質問させていただいた際とは微妙に仕様変更になったので、配列は多少変更しています。

Sub ファイル名取得()
FolderPath = Cells(10, 7).Value 'パスはG10から読み込む
buf = Dir(FolderPath & "\*.*") '拡張子の指定はしない
cnt = 9 '実施行-1行目を指定
Do While buf <> ""
If (buf Like "*.xls?") And buf <> ThisWorkbook.Name Then '拡張子はエクセル系
cnt = cnt + 1
Cells(cnt, 6) = buf 'F10から順にファイル名を記載
End If
buf = Dir()
Loop
End Sub

必ず「追加」があるわけではないので、
パターン1:新規・追加を判別して、「追加」であれば、現状入っている値(ファイル名ですが)の下の行からファイル名を追加していく
パターン2:上記で「cnt = 9+1」から挿入している部分を変更し、「挿入行」を指定してファイル名を取得する

どちらのパターンが
エラーになりにくく、より簡単に設定できるものなのか?も わかっていないため、
ザックリとした質問になってしまいましたが、
ご教示いただけますと幸いです。

よろしくお願い致します!

投稿日時 - 2016-12-05 14:12:31

QNo.9264225

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

質問していること(やりたいこと)がよくわからない。ポイントの文章表現がまずいのでは。この程度の質問で回答がまだ出ないのは不思議です。それが原因ではないか。
想像も交えて下記を書いている。
私の理解力が足りず、間違っていたら失礼。
それと、本質問者は、そっくりコピペで使えるコードを望まざるを得ない状況と思うが、ここはコードを作成依頼コーナーではない、というのが持論。
ーーーー
昔の時点のデータ(フォルダのファイル状態)で質問に書いたコードを実行して、できたブック名のリストがあるとする(A)。
最近のフォルダのデータ状況で、同じコードを実行する。
アウトプットは結果を出すブックのSheet2(同一ブックの別シート)に出すのがおすすめ(B)。別ブックにすると、後の処理のコードが複雑になる。特に初心者が扱う場合は。
AとBを比べて、Bで増えたブック名をAの最終行以下に順次追加する。
そのようなことをしたいのか。
データ例を簡単にして
上記(A)の例
Sheet1 A1:A11
ーー
ブック名 <-第1行目の見出し名
aa <--ブック名の文字列
ss
dd
fff
gg
hh
j
xx
cc
vv
Sheet2
A1:A15
ーー
上記(B)の例
ブック名 <--見出し
aa
ss
dd
sss
gg
hh
gggg
xx
cc
vv
ddd
s1
der
dfty
ーーー
コード VBAでのCountIf関数を利用した1方法。
Sub test01()
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
rl1 = ws1.Range("A1000").End(xlUp).Row
MsgBox rl1
k = rl1 + 1
rl2 = ws2.Range("A1000").End(xlUp).Row
MsgBox rl2
'---
For i = 2 To rl2
c = WorksheetFunction.CountIf(ws1.Range("A1:A" & rl1), ws2.Range("A" & i))
MsgBox c
If c = 0 Then
ws1.Range("A" & k) = ws2.Range("A" & i)
k = k + 1
End If
Next i
End Sub
ーー
結果
Sheet1のA12:A17に
sss
gggg
ddd
s1
der
dfty
が追加される。
ーー
質問で書いているデータ状況を、上記では考慮していないが、質問者が適宜修正してください。
*例データ開始行が第11行からなど
*rl1 = ws1.Range("A1000").End(xlUp).Row
 のデータ数が1000行以内と仮定とか
ーー
こういう処理にはVBA系でやるならVBScript勉強したらどうですか。質問のコードでDir関数を使っているところなど。

投稿日時 - 2016-12-06 11:22:15

お礼

なるほど・・・そうですね。
読み返してみると、背景がわからない文章になっていました。
申し訳ありません。
いったん取り下げ(?)て、改めて質問し直したいと思います。
ご面倒おかけしましたが、ご指摘ありがとうございました!

投稿日時 - 2016-12-06 14:13:20

あなたにオススメの質問