
以下のVBAコードだとフォルダの場所が決まってしまっているので
フォルダの場所を
sheet2のセルB2へ記載した「D:\users\○○¥~」
みたいに場所を都度指定できるようにしたいです。
可能でしょうか??
※ちなみにフォルダパスのところでsheet2.B2を指定してみたのですが
うまく動きませんでした・・・
お力お貸しいただけますと幸いです。よろしくお願いいたします。
Sub merge()
Dim Folder_path As String, buf As String, Target As Worksheet
Dim LastCol As Long, TargetR As Long, TargetC As Long
Dim ctr As Long: ctr = 0
Application.ScreenUpdating = False
With Sheets("Sheet1")
'1行目クリア、2行目以降を削除
.Rows(1).ClearContents
.Rows("2:" & Rows.Count).Delete
'フォルダの場所
Folder_path = "D:\Sample\CSV\"
'ファイルを順番に開く
buf = Dir(Folder_path & "*.csv")
Do While buf <> ""
ctr = ctr + 1
Workbooks.Open Folder_path & buf, ReadOnly:=True
'CSVシート名を変数に入れる
Set Target = Workbooks(buf).Sheets(Split(buf, ".")(0))
'mergeシートのA1基準での最終列
LastCol = .Cells(1, Columns.Count).End(xlToLeft).Column
'開いたシートのA1基準での最終行、最終列
TargetR = Target.Cells(Rows.Count, 1).End(xlUp).Row
TargetC = Target.Cells(1, Columns.Count).End(xlToLeft).Column
'値で転記
If ctr = 1 Then
.Range(.Cells(1, LastCol + 1), .Cells(TargetR, LastCol + TargetC)).Value = _
Target.Range(Target.Cells(1, 1), Target.Cells(TargetR, TargetC)).Value
Else
.Range(.Cells(1, LastCol + 1), .Cells(TargetR, LastCol + TargetC - 2)).Value = _
Target.Range(Target.Cells(1, 3), Target.Cells(TargetR, TargetC)).Value
End If
'次へ
Workbooks(buf).Close False
buf = Dir()
Loop
'空白のA列削除
.Range("A:A").Delete
Application.ScreenUpdating = True
MsgBox "END"
End With
End Sub
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
sheet2.B2にパスが正しく格納されていると言う前提で・・・。
D:\Sample\CSV\ の様に最後に¥で終る事が前提です。
With Sheets("Sheet1")が記述されてしまってるので、Sheet2で有る事を明示する必要があります。
↓
Folder_path = Worksheets("Sheet2").Range("B2").Value
No.2
- 回答日時:
こんにちは
セル指定方法はすでに回答されていますね
以下参考程度で
>都度、
フォルダパスを指定するならフォルダピッカーを使う方が良いかも
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "フォルダを選択してください"
'.InitialFileName = "D:\Sample"
If .Show = 0 Then Exit Sub
Folder_path = .SelectedItems(1)
End With
挿入位置はApplication.ScreenUpdating = False の上
.InitialFileName で初期親フォルダパスを指定することも出来ます
Folder_path = "D:\Sample\CSV\" は不要です
No.1
- 回答日時:
>ちなみにフォルダパスのところでsheet2.B2を指定してみたのですが
どのように書きましたか?
想像では
Folder_path = sheet2.B2
とでも記述したのではないかと思いますが、これでは「オブジェクトがありません」や「プロパティーがありません」のようなエラーになっていると思います。
sheet2のセルB2へ記載した「D:\users\○○¥~」を文字列情報として得るためには
Folder_path = Sheets(”sheet2”).Range("B2").Text
のように記述しなければいけませんよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAにてツリー階層表示ツールの...
-
会社のネットワーク上のファイ...
-
Windows10でコマンドプロンプト...
-
ファイル名と同名のフォルダを...
-
指定フォルダの絶対パス取得
-
パス名に2バイト文字(マルチバ...
-
言語[C#]..フォルダ選択ダイア...
-
条件に合うフォルダが存在する...
-
VBプロジェクトでのフォルダ構...
-
ファイル名に特定の文字列を含...
-
バッチファイルで指定フォルダ...
-
Excelvbaでブックをコピー名前...
-
EXCELのセルにフォルダのパスの...
-
マクロについて教えてください...
-
【VC++6.0(MFC)】適切なSHBrows...
-
【マクロ】ファイル名の日付に...
-
CreateObject("Scripting.FileS...
-
Excelのハイパーリンクについて...
-
フォルダに一括でファイル振り...
-
レイアウトが崩れてしまいます、、
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Windows10でコマンドプロンプト...
-
会社のネットワーク上のファイ...
-
ファイル名と同名のフォルダを...
-
デスクトップの画像をhtmlに表...
-
VBA 最新のフォルダ取得
-
VBA フォルダ名に特定の文字を...
-
Access VBA で フォルダ権限...
-
ディレクトリ名変更してコピー...
-
excelマクロ 冒頭3文字が一致す...
-
Excelで指定したフォルダに保存...
-
パス名に2バイト文字(マルチバ...
-
ExcelのVBAでフォルダ指定がで...
-
excel VBA Dirにて検索したフォ...
-
【マクロ】ファイル名の日付に...
-
VBA フォルダの複数選択ができない
-
Excelのハイパーリンクについて...
-
あるフォルダーのファイルを違...
-
C ファイル出力で、フォルダが...
-
フォルダを開いて、閉じるのプ...
-
ThisWorkbookがあるフォルダ更...
おすすめ情報