- ベストアンサー
エクセルVBAで特定のファイルの特定の列を並べる方法
- エクセルVBAを使用して、特定のフォルダ内にある特定のファイルの特定の列のデータをコピーして並べる方法について教えてください。
- フォルダ内の複数のファイルから、「結果」という名前のシートのC4~AU37までのセルに入っているデータをコピーし、「記録集計第3期」ファイルの「年度末結果」シートに並べてコピーする方法について教えてください。
- エクセルVBAを使用して、特定のフォルダ内の特定のファイルから特定の列のデータをコピーし、別のファイルの特定のシートに並べてコピーする方法について教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 あと一息ですね。 A列B列が消えてしまう件ですが、 ThisWorkbook.Worksheets("年度末結果").Cells.Clear の行で、「年度末結果」シート上のセルを最初に全てクリアしています。 ここを消すか、先頭に'を付けてコメントにすれば大丈夫です。 もし、ある特定のセルをクリアしたければ、 ThisWorkbook.Worksheets("年度末結果").Range("C2:F9").Clear にすれば良いです。 列クリアなら ThisWorkbook.Worksheets("年度末結果").Columns("C:F").Clear などにしてください。
その他の回答 (3)
- ka_na_de
- ベストアンサー率56% (162/286)
#1、#2です。 大事なことを忘れていました。 私のコードはエクセル2003以前を対象とした作りになっています。 もし、エクセル2007を使っているのであれば、 ファイルの拡張子が[.xls]ではなく[.xlsx]になっていますので、 myWbName = "記録集計第" & i & "期.xls" を myWbName = "記録集計第" & i & "期.xlsx" に変更してください。
お礼
はじめまして、ka_na_deさん。 何度も御丁寧に教えて頂き、本当にありがとうございます。 同じような例が無いかと検索ばかりしていたのですが、 やはり、そう簡単には解決法も見つからず、 あきらめかけていましたが、 こんなに親切に教えて頂けて、本当に本当に感謝しております。 早速、明日にでもチャレンジしてみたいと思います。 ありがとうございました。
補足
ka_na_deさん、すみません。 実際にやってみたのですが、 コピー先のシート『年度末結果』のC2以降へのコピーは完璧だったのですが、 元々入っていたA列とB列の文字が全て消えてしまっていました。 解決できますでしょうか? 甘えてばかりですみません。 お時間がございましたら、教えてくださいませ。 追伸:この文章をお礼のところに書き加えたかったのですが、 補足入力の所で書かせて頂きました。
- ka_na_de
- ベストアンサー率56% (162/286)
#1です。 不具合がありましたので修正します。 <不具合内容> 例えば、「2009」のフォルダーの中の「記録集計第3期」にて 年度末結果を出力しようとした際、「2008」のフォルダーの 中の「記録集計第1期」や「記録集計第2期」が既に開いていた場合、 「2009」ではなく「2008」のファイルの値をコピーしてしまう。 <変更点> 「記録集計第1期」や「記録集計第2期」が開いている場合は、 一旦閉じてから再実行するように警告を出すようにしました。 Sub Test2() Dim i As Long Dim flg As Boolean Dim myWb As Workbook Dim myWbName As String Application.ScreenUpdating = False ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path ThisWorkbook.Worksheets("年度末結果").Cells.Clear For i = 1 To 3 flg = False myWbName = "記録集計第" & i & "期.xls" If myWbName <> ThisWorkbook.Name Then For Each myWb In Workbooks If myWb.Name = myWbName Then flg = True Next myWb If flg = False Then Workbooks.Open Filename:=myWbName Else Workbooks(myWbName).Activate MsgBox myWbName & "を閉じてから再実行してください。" Exit Sub End If End If Worksheets("結果").Range("C4:AU37").Copy ThisWorkbook.Worksheets("年度末結果").Range("C2").Offset(, 45 * (i - 1)).PasteSpecial Paste:=xlPasteValues If myWbName <> ThisWorkbook.Name Then Application.DisplayAlerts = False Workbooks(myWbName).Close SaveChanges:=False Application.DisplayAlerts = True End If Next i Application.CutCopyMode = False Application.ScreenUpdating = True End Sub
- ka_na_de
- ベストアンサー率56% (162/286)
こんばんは。 一例です。 <注意> ・ファイルを開いてから処理してます。 VBAで開いたものは閉じて終了します。 ・コピーの際は、値のみ貼り付けしてます。 Sub Test() Dim i As Long Dim flg As Boolean Dim myWb As Workbook Dim myWbName As String Application.ScreenUpdating = False ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path ThisWorkbook.Worksheets("年度末結果").Cells.Clear For i = 1 To 3 flg = False myWbName = "記録集計第" & i & "期.xls" For Each myWb In Workbooks If myWb.Name = myWbName Then flg = True Next myWb If flg = False Then Workbooks.Open Filename:=myWbName Else Workbooks(myWbName).Activate End If Worksheets("結果").Range("C4:AU37").Copy ThisWorkbook.Worksheets("年度末結果").Range("C2").Offset(, 45 * (i - 1)).PasteSpecial Paste:=xlPasteValues If myWbName <> ThisWorkbook.Name And flg = False Then Application.DisplayAlerts = False Workbooks(myWbName).Close SaveChanges:=False Application.DisplayAlerts = True End If Next i Application.CutCopyMode = False Application.ScreenUpdating = True End Sub
お礼
何から何まで本当にありがとうございました。 完璧です!! すごいです!! これをきっかけにVBAを勉強してみたくなりました。 色々とお世話になりました。 ありがとうございました。