
ExcelVBAにて、同じフォルダ内における複数ブックの特定項目(名前、住所)の集計しようと考えて、以下のように作成しましたが、シートの一行目しか取得できません。2行目以降も取得したいのですが、やり方についてご存じの方がいたら、ご教示ください。
'ボタンをクリックした時の処理
Public Sub sample()
Dim wFile As String
Dim wFilePath As String
Dim i As Long
'Excelファイルが存在していたらファイル名を返す
wFile = Dir(ActiveWorkbook.Path & "\*.xlsx")
'先頭行を指定
i = 2
'カレントディレクトリに存在するExcelファイルを全て読み込む
Do While wFile <> ""
'開くExcelファイルのフルパスを取得
wFilePath = ActiveWorkbook.Path & "\" & wFile
'名前・住所を取得し配列に格納する(区切り文字:|)
strData = Split(File_Load(wFilePath), "|")
'名前
Cells(i, 1) = strData(0)
'住所
Cells(i, 2) = strData(1)
'ファイル名
Cells(i, 3) = wFile
'次のExcelファイルを取得
wFile = Dir()
'行数をカウント
i = i + 1
Loop
End Sub
'Excelファイルを開いてデータを取得
'戻り値:名前|住所 ( | で区切る)
Function File_Load(ByVal wFilePath As String) As String
Dim CurBookName As Variant
Dim ColNo As Long
Dim RowNo As Long
Dim strValue As String
Dim FoundCell As Range
Dim i As Long
'ファイルを開く
Workbooks.Open wFilePath
'開いたExcelのファイル名を取得
CurBookName = Application.ActiveWorkbook.Name
'検索する項目を配列に格納
wItem = Array("名前", "住所")
Dim s As Long
'検索する
For i = LBound(wItem) To UBound(wItem)
Set FoundCell = Cells.Find(What:=wItem(i))
If FoundCell Is Nothing Then
'検索出来なかった場合
If i = 0 Then
strValue = ""
Else
strValue = strValue & "|"
End If
Else
'検索したセルに移動
FoundCell.Select
ColNo = ActiveCell.Column '列番号を取得
RowNo = ActiveCell.Row '行番号を取得
'住所を取得する
If i = 0 Then
'最初の項目
strValue = Cells(RowNo + 1, ColNo).Value
Else
'2番目以降の項目は|で区切る
strValue = strValue & "|" & Cells(RowNo + 1, ColNo).Value
End If
End If
Next i
'結果を返す
File_Load = strValue
'開いたExcelファイルを閉じる
Application.DisplayAlerts = False '確認メッセージの非表示
Workbooks(CurBookName).Close
Application.DisplayAlerts = True '確認メッセージの表示
End Function

A 回答 (11件中11~11件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
どういったレイアウトのシートからデータを取り出すのかわからないですが、少なくとも
>'検索する項目を配列に格納
>wItem = Array("名前", "住所")
検索する項目がシートの固定場所ではなく、ブックによってシート内のあちこちに存在する可能性があると言う事なのでしょうか?
レイアウトが全て統一されているのであれば、そのセルは必ず決まってますよね。
あとはSetステートメントについて勉強をすると扱いやすいコードが出来るのではないかなって思います。
正直ユーザー定義関数の存在意味がわかりかねます。
貴重なアドバイス ありがとうございます。
ご意見はごもっとなことでございます。
ただ、今回は複数事業者が絡んでいるので、レイアウトの統一性が難しい可能性があるため、行・列の追加等を鑑みて、今回のようなややこしい式ににしてしまいました。
私が、事前調整を上手くできればいいのでしょうが、情けない話でございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
選択されたブックを開いてデー...
-
Excelのマクロコードについて教...
-
エクセル フォルダ内の.xlsフ...
-
エクセルのマクロについて教え...
-
VBA 別ブックからコピペしたい...
-
フォルダー内の支店ごとのブッ...
-
エクセルのマクロについて教え...
-
【Excel VBA】表の列の値毎に分...
-
VBA シートをコピーする際に Co...
-
【マクロ】アクティブセルにブ...
-
エクセルのマクロについて教え...
-
Excel VBA 違うxlsファイルの指...
-
別ブックをダイアログボックス...
-
ワイルドカード「*」を使うとう...
-
現在開いているbook全てを対象...
-
Excel ファイルを指定し、指定...
-
VBA シート名が一致した場合の...
-
エクセルのマクロを使ってメー...
-
【困っています2】VBA 追加処...
-
【VBA】別のブックの同じ行番号...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートをコピーする際に Co...
-
VBA 別ブックからコピペしたい...
-
別ブックをダイアログボックス...
-
エクセルVBAが途中で止まります
-
ワイルドカード「*」を使うとう...
-
【Excel VBA】書き込み先ブック...
-
VBAで別ブックのシートを指定し...
-
【ExcelVBA】zip圧縮されたCSV...
-
VBAで別のブックにシートをコピ...
-
VBA コードを実行すると画面が...
-
Excel2007VBAファイルの表示に...
-
VBAで複数のブックを開かずに処...
-
[Excel]ADODBでNull変換されて...
-
Excelファイルを開くとき、読み...
-
VBA 実行時エラー 2147024893
-
Excelマクロ 該当する値の行番...
-
Excel にて、 リストボックスの...
-
VBS Bookを閉じるコード
-
複数のエクセルファイルとシー...
-
【ExcelVBA】インデックスが有...
おすすめ情報
申し訳ありません。
各ブックのシート1の名前、住所を一覧ブックに集計するのは、上記のマクロで問題なく処理できたのですが、また上から新たなものを作成して欲しいと依頼があり、困っております。
今度は、集計する項目が、受付日、氏名、郵便番号、住所、電話番号、金額、用途、入金日、公表名、公表金額、納入方法、個数、品物と増えたうえ、各ブックのシート1だけではなく、全てのシートに項目がちらばっているため、全てのシートから集計するようにしなければなりません。
種々試しているのですが、私のスキルが未熟すぎてうまくいきません。
お忙しいところ、大変恐縮ですが、またご指導、ご鞭撻いただければ幸いでございます。
ご丁寧にありがとうございます。
別の用事で、会社から出てしまっておりますので再度確認して連絡いたします。