複数のCSVを横に追加していくマクロを作る必要があり、
なんとか動きそうなコードを見つけました。
A列とB列を抜かしてC1セルから最終列と最終行(CSVによって最終列がバラバラです。
最終行は同じ数です。)を取得して
貼り付けることをしたいのですが、
こちらのコードだと、A1セルからの貼り付けとなっています。
VBA初心者過ぎて、色々調べたりセルの値を変えたりしてみましたが
うまくいきません。
どなたか教えていただけませんでしょうか。
よろしくお願いいたします。
Sub merge()
Dim Folder_path As String, buf As String, Target As Worksheet
Dim LastCol As Long, TargetR As Long, TargetC As Long
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 <> ""
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
'値で転記
.Range(.Cells(1, LastCol + 1), .Cells(TargetR, LastCol + TargetC)).Value = _
Target.Range(Target.Cells(1, 1), Target.Cells(TargetR, TargetC)).Value
'次へ
Workbooks(buf).Close False
buf = Dir()
Loop
'空白のA列削除
.Range("A:A").Delete
Application.ScreenUpdating = True
MsgBox "END"
End With
End Sub
No.2ベストアンサー
- 回答日時:
>例えば1番目のcsvは全ての列がコピーされる
>2番目以降が3列目~最終列までがコピーされる
>のように分けてコピーするようにはできるものでしょうか??
最初からそのように提示していただければ、良かったかと。
以下のようにしてください。
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
そうですよね。すみません。
うちの自称VBA得意な社員が「それは難しいかも・・」と言っていたので
最初からあきらめていました(汗
今試してみたところ、まさに希望通りに動きました!!
これで大幅な業務圧縮がかないます。
本当に神です!!ありがとうございました。
No.1
- 回答日時:
値で転記の箇所を、以下のようにしてください。
'値で転記
.Range(.Cells(1, LastCol + 1), .Cells(TargetR, LastCol + TargetC - 2)).Value = _
Target.Range(Target.Cells(1, 3), Target.Cells(TargetR, TargetC)).Value
素早いご回答ありがとうございます!
早速試してみましたが、
2つ目以降のcsvは3列目から最終列までを順番にコピーしてくれたのですが、
なぜか1つ目のcsvは3列目~最終列かー2列の真ん中だけが
コピーされる形でした。
例えば1番目のcsvは全ての列がコピーされる
2番目以降が3列目~最終列までがコピーされる
のように分けてコピーするようにはできるものでしょうか??
まったくのド素人で申し訳ございません。
VBAの知見をお貸しいただけますと幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あるあるbotに投稿したけど採用されなかったあるある募集
あるあるbotに投稿したけど採用されなかったあるあるをこちらに投稿してください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
複数のCSVファイルを横に並べてひとつのエクセルファイルへ結合する方法
Excel(エクセル)
-
VBAで2つのデータを横に結合できますか?
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
B列の最終行までA列をオート...
-
Excelで、あるセルの値に応じて...
-
URLのリンク切れをマクロを使っ...
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
VBAコンボボックスで選択した値...
-
vba 2つの条件が一致したら...
-
VBAを使って検索したセルをコピ...
-
IIF関数の使い方
-
rowsとcolsの意味
-
データグリッドビューの一番最...
-
【Excel VBA】 B列に特定の文字...
-
マクロについて。S列の途中から...
-
VBAで、特定の文字より後を削除...
-
ExcelVBA修正のお願い
-
複数の列の値を結合して別の列...
-
VBマクロ 色の付いたセルを...
-
文字列の結合を空白行まで実行
-
VBAで10行おきにセルの下に罫線...
-
VBAで重複データを確認したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
B列の最終行までA列をオート...
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
【Excel VBA】 B列に特定の文字...
-
IIF関数の使い方
-
VBAのFind関数で結合セルを検索...
-
URLのリンク切れをマクロを使っ...
-
文字列の結合を空白行まで実行
-
データグリッドビューの一番最...
-
【VBA】2つのシートの値を比較...
-
Changeイベントでの複数セルの...
-
VBAを使って検索したセルをコピ...
-
VBA 何かしら文字が入っていたら
-
エクセルVBA intersect colu...
-
VBAでのリスト不一致抽出について
-
マクロ 最終列をコピーして最終...
-
VBAコンボボックスで選択した値...
-
複数の列の値を結合して別の列...
おすすめ情報