[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『開いてるExcelのデータを全て1つのExcelブックにまとめたい』(ケイ)
複数のダウンロードしたデータを下記のサンプルコードを使ってまとめてます。
結合まではうまくできてました。以下2点問題があります。
初心者のため是非お力添えを頂きたく存じます。
■問題点
?@開いてるExcelブックには2つの固定された名前のシート合計と月別があり2つとも結合してしまう。※月別だけのシートを結合したいです。
?A1行目には同じ項目名の(売上、販売量など)タイトル行がはいってますが
1行目のタイトル行もこのサンプルコードだと消えてしまいます。
1行目のタイトル行を残したまま
?@のシート名は固定となります。
?A1行目の文字列は基本固定となり同じ文字列の複数データを結合することを想定してます。
?B?@?Aの内容を修正した全サンプルコードをいただけますと大変助かります。
大変お手数ですがご教授よろしくお願いいたします
Option Explicit
Sub folder()
If Application.FileDialog(msoFileDialogFolderPicker).Show = True Then
Range("b2").Value = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)
End If
End Sub
Sub merge()
'シート[merge]を削除
On Error Resume Next
Application.DisplayAlerts = False
Worksheets("merge").Delete
Application.DisplayAlerts = True
'シート[merge]を一番右に追加
Worksheets.Add(after:=Worksheets(Worksheets.Count)).Name = "merge"
'フォルダの場所を変数に入れる
Dim Folder_path
Folder_path = ThisWorkbook.Worksheets("folder").Range("b2").Value
'結合するブックを変数に入れる
Dim FileType
If Worksheets("folder").Range("b1").Value = "Excel" Then
FileType = "\*.xls*"
Else
FileType = "\*.csv"
End If
Dim MergeWorkbook
MergeWorkbook = Dir(Folder_path & FileType)
'指定したフォルダから、Excelファイルを探す
Do Until MergeWorkbook = ""
Workbooks.Open Filename:=Folder_path & "\" & MergeWorkbook
Dim MergeWorkbook_data '結合するブック内のシートのデータ数
Dim ThisWorkbook_data '結合先のシートのデータ数
Dim i
For i = 1 To Workbooks(MergeWorkbook).Worksheets.Count
MergeWorkbook_data = Workbooks(MergeWorkbook).Worksheets(i).Range("a" & Rows.Count).End(xlUp).Row
ThisWorkbook_data = ThisWorkbook.Worksheets("merge").Range("a" & Rows.Count).End(xlUp).Row
Workbooks(MergeWorkbook).Worksheets(i).Rows("2:" & MergeWorkbook_data).Copy ThisWorkbook.Worksheets("merge").Range("a" & ThisWorkbook_data + 1)
Next
'結合するブックを閉じる
Application.DisplayAlerts = False
Workbooks(MergeWorkbook).Close
Application.DisplayAlerts = True
'次のブックを探しに行く
MergeWorkbook = Dir()
Loop
End Sub
< 使用 Excel:Excel2019、使用 OS:Windows10 >
■問題点
1,開いてるExcelブックには2つの固定された名前のシート合計と月別があり2つとも結合してしまう。※月別だけのシートを結合したいです。
2,1行目には同じ項目名の(売上、販売量など)タイトル行がはいってますが
1行目のタイトル行もこのサンプルコードだと消えてしまいます。
1行目のタイトル行を残したまま結合するsheetはタイトル行を削除して2行目から結合したい
1,2の内容を修正した全サンプルコードをいただけますと大変助かります。
(ケイ) 2019/09/23(月) 09:07
(マナ) 2019/09/23(月) 09:32
こんにちは!
先ず一番気になったのは、、エラーをトラップするところ、、 基本的にエラーが発生しない様なコードを書いた方がいいと思います。
次に、変数の宣言は最初にまとめた方がいいと思いますが、、これは個人差があるのでお好きな様に、、、
次に、Set と With を使った方が見通しがいい様に思いますけど、、、これも個人差ですね(^^;
後、、MergeWorkbook_data 何てのは 数?でしょ??? i とか n とか k とか シンプルな方が見やすくないですか??
これも個人差( ̄▽ ̄;)
それと、、肝心の 月別 だけ なら それを判定するコードが必要かとおもいます。
あと、一行目が消えるのは、これまた定番で、、Offset(1) です。
小言ばっかりになりましたが、、お気を悪くなされません様に。。。。
では、、では、、
あっ、、テストしてません。。。(おっっい!!!)
後は、応用してください。。。
Option Explicit Sub folder() If Application.FileDialog(msoFileDialogFolderPicker).Show = True Then Range("b2").Value = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1) End If End Sub Sub merge() Dim wb As Workbook Dim Sh As Variant Dim i As Long Dim Folder_path As String Dim FileType As String Dim MergeWorkbook As String Dim MergeWorkbook_data As Long '結合するブック内のシートのデータ数 Dim ThisWorkbook_data As Long '結合先のシートのデータ数 Dim MyFlg As Boolean Sh = Array("merge", "folder") For i = LBound(Sh) To UBound(Sh) If Not Evaluate("=ISREF(" & Sh(i) & "!A1)") Then Sheets.Add.Name = Sh(i) If Sh(i) = "merge" Then Worksheets(Sh(i)).Cells.Clear Next Worksheets("merge").Move , Worksheets(Worksheets.Count) Folder_path = ThisWorkbook.Worksheets("folder").Range("b2").Value If Worksheets("folder").Range("b1").Value = "Excel" Then FileType = "\*.xls*" Else FileType = "\*.csv" End If MergeWorkbook = Dir(Folder_path & FileType) Do Until MergeWorkbook = "" Set wb = Workbooks.Open(Filename:=Folder_path & "\" & MergeWorkbook) With ThisWorkbook ' For i = 1 To wb.Worksheets.Count i = 2 ' If wb.Worksheets(i).Name Like "*月別*" Then MergeWorkbook_data = wb.Worksheets(i).Range("a" & Rows.Count).End(xlUp).Row ThisWorkbook_data = .Worksheets("merge").Range("a" & Rows.Count).End(xlUp).Offset(1).Row ThisWorkbook_data = .Worksheets("merge").Range("a1").CurrentRegion.Rows.Count + 1 If MyFlg Then wb.Worksheets(i).Rows("2:" & MergeWorkbook_data).Copy .Worksheets("merge").Range("a" & ThisWorkbook_data) Else wb.Worksheets(i).Rows("1:" & MergeWorkbook_data).Copy .Worksheets("merge").Range("a" & ThisWorkbook_data) MyFlg = True End If ' End If ' Next End With wb.Close False MergeWorkbook = Dir() Loop ThisWorkbook.Worksheets("merge").Rows("1:1").Delete Shift:=xlUp Set wb = Nothing End Sub (SoulMan) 2019/09/23(月) 10:21
たとえば、いまうまくいかなかったそのマクロですが、どのシートのb2セルにファイルパスが記入されましたか?
(黄色い循環参照) 2019/09/23(月) 14:10
月別のシートがないんだと思うので
If wb.Worksheets(i).Name = "月別" Then ↓ If wb.Worksheets(i).Name Like "*月別*" Then
でどうでしょうか?? (SoulMan) 2019/09/23(月) 14:45
上のコードを直しておきましたので試してみて下さい。 (SoulMan) 2019/09/23(月) 15:14
それだと↓これが空打ちだと思うので、取り敢えず、、、
ThisWorkbook_data = .Worksheets("merge").Range("a" & Rows.Count).End(xlUp).Offset(1).Row
絶対にある列に変更してみて下さい。
例えば、、B列だと
ThisWorkbook_data = .Worksheets("merge").Range("B" & Rows.Count).End(xlUp).Offset(1).Row
それから、、感動するようなことじゃないですから(^^; (SoulMan) 2019/09/23(月) 15:27
それでもだめだったら、、↓みたいにするとか、、 ThisWorkbook_data = .Worksheets("merge").Range("a1").CurrentRegion.Rows.Count + 1 (SoulMan) 2019/09/23(月) 15:34
ThisWorkbook_data = .Worksheets("merge").Range("a" &Rows.Count).End(xlUp).Offset(1).Row ↑ここの列を変更すればいいんですね?2つともためしましたがまだ1行目は空白のままでした、1行目は文字列になります。本当に助かってます。ありがとうございます。もう少しご教授いただけないでしょうか (ケイ) 2019/09/23(月) 15:42
なんかいつもの私らしくボロボロになってきた様な気がしますが、、(^^;
そもそも、、よくよく見るとタイトル行ってないですよね??
どこかにタイトル行を作るか?一回目だけタイトルを含めてコピーして最後に一行目を削除しないといけないのかな???
取り敢えず上のコードを直してみましたのでお試しください。。。 (SoulMan) 2019/09/23(月) 16:01
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.