- 締切済み
同じフォルダ内における複数ブックの特定項目集計
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
- みんなの回答 (8)
- 専門家の回答
みんなの回答
- n-jun
- ベストアンサー率33% (959/2873)
お礼
本当に不快な思いさせて、申し訳ありません。 VBAをかじった知識しかない私が、人数の削減の影響を受け、業務上やらざるを得ない状況になり、少しでもわかるように素人なりにコメントを補足したのですが、不適切な記載方法でした。 お許しください。