プロが教える店舗&オフィスのセキュリティ対策術

以下の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件)

sheet2.B2にパスが正しく格納されていると言う前提で・・・。


D:\Sample\CSV\ の様に最後に¥で終る事が前提です。

With Sheets("Sheet1")が記述されてしまってるので、Sheet2で有る事を明示する必要があります。



Folder_path = Worksheets("Sheet2").Range("B2").Value
    • good
    • 0

失礼


スプレッターをつけ忘れました "\" をフォルダパスとファイル名の間に入れてください
    • good
    • 0

こんにちは


セル指定方法はすでに回答されていますね
以下参考程度で

>都度、
フォルダパスを指定するならフォルダピッカーを使う方が良いかも

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\" は不要です
    • good
    • 0

>ちなみにフォルダパスのところでsheet2.B2を指定してみたのですが


どのように書きましたか?
想像では
Folder_path = sheet2.B2
とでも記述したのではないかと思いますが、これでは「オブジェクトがありません」や「プロパティーがありません」のようなエラーになっていると思います。
sheet2のセルB2へ記載した「D:\users\○○¥~」を文字列情報として得るためには
Folder_path = Sheets(”sheet2”).Range("B2").Text
のように記述しなければいけませんよ。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!