- 締切済み
エクセルで、ファイル名を(追加で)取得したい
エクセル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」から挿入している部分を変更し、「挿入行」を指定してファイル名を取得する どちらのパターンが エラーになりにくく、より簡単に設定できるものなのか?も わかっていないため、 ザックリとした質問になってしまいましたが、 ご教示いただけますと幸いです。 よろしくお願い致します!
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
質問していること(やりたいこと)がよくわからない。ポイントの文章表現がまずいのでは。この程度の質問で回答がまだ出ないのは不思議です。それが原因ではないか。 想像も交えて下記を書いている。 私の理解力が足りず、間違っていたら失礼。 それと、本質問者は、そっくりコピペで使えるコードを望まざるを得ない状況と思うが、ここはコードを作成依頼コーナーではない、というのが持論。 ーーーー 昔の時点のデータ(フォルダのファイル状態)で質問に書いたコードを実行して、できたブック名のリストがあるとする(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関数を使っているところなど。
お礼
なるほど・・・そうですね。 読み返してみると、背景がわからない文章になっていました。 申し訳ありません。 いったん取り下げ(?)て、改めて質問し直したいと思います。 ご面倒おかけしましたが、ご指摘ありがとうございました!