• ベストアンサー

Excelのループの使い方がわかりません

使用しているエクセルのバージョンは2003です。 ファイル名がa~xまであるcsvファイルを順番に開いて特定の範囲をコピーして 別のエクセルブックの特定の範囲に張り付ける作業をVBAを使って組みたいのですが いまいち分りません。ご指導のほどよろしくお願いします。 WS1は別のエクセルブックを指しています。 Workbooks.Open "a.csv" Worksheets(a).Range("B2:O3").Copy WS1.Range("F7:S8") Worksheets(a).Range("B4:O5").Copy WS1.Range("F10:S11") Worksheets(a).Range("B6:O7").Copy WS1.Range("F13:S14") Worksheets(a).Range("B8:O10").Copy WS1.Range("F16:S18") Windows("a.csv").Activate ActiveWindow.Close Workbooks.Open "b.csv" Worksheets(b).Range("B2:O3").Copy WS1.Range("F21:S22") Worksheets(b).Range("B4:O5").Copy WS1.Range("F24:S25") Worksheets(b).Range("B6:O7").Copy WS1.Range("F27:S28") Worksheets(b).Range("B8:O10").Copy WS1.Range("F30:S32") Windows("b.csv").Activate ActiveWindow.Close Workbooks.Open "c.csv" Worksheets(c).Range("B2:O3").Copy WS1.Range("F35:S36") Worksheets(c).Range("B4:O5").Copy WS1.Range("F38:S39") Worksheets(c).Range("B6:O7").Copy WS1.Range("F41:S42") Worksheets(c).Range("B8:O10").Copy WS1.Range("F44:S46") Windows("c.csv").Activate ActiveWindow.Close Workbooks.Open "d.csv" Worksheets(d).Range("B2:O3").Copy WS1.Range("F49:S50") Worksheets(d).Range("B4:O5").Copy WS1.Range("F52:S53") Worksheets(d).Range("B6:O7").Copy WS1.Range("F55:S56") Worksheets(d).Range("B8:O10").Copy WS1.Range("F58:S60") Windows("d.csv").Activate ActiveWindow.Close これがファイルxまで続きます。

質問者が選んだベストアンサー

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

コピー元のセルが一定で、コピー先のセルも規則性があるので、Forループでまわしてみました。以下にサンプルソースを掲載します。 ★注意  FileName = Array("a", "b", "c") は、csvファイルのファイル名(.csv抜き)を羅列してください。 (本当のファイル名はa,b,cではないと思いますが、ファイル名に規則性があれば、さらに効率的な書き方ができるでしょう) WS1というのは質問文のマクロで定義されてないので、  Workbooks.Open "Book2.xls"  Set WS1 = Workbooks("Book2.xls").Worksheets("Sheet1") と勝手に名前をつけてオープンしています。この処理に至るまでにWS1は定義されていると思うので、ここはカットしてください。 Sub CSV読み込み()  On Error Resume Next  Dim FileName As Variant  Dim i As Integer, j As Integer  Dim BookName As String  Dim WS1 As Worksheet  FileName = Array("a", "b", "c")    Application.ScreenUpdating = False    Workbooks.Open "Book2.xls"  Set WS1 = Workbooks("Book2.xls").Worksheets("Sheet1")    For i = 0 To UBound(FileName)   BookName = FileName(i) & ".csv"   Workbooks.Open BookName   With Workbooks(BookName)    For j = 0 To 3     Worksheets(1).Cells(j * 2 + 2, "B").Resize(2, 14).Copy _     WS1.Cells(i * 14 + 7 + j * 3, "F")    Next    .Close   End With  Next    Application.ScreenUpdating = True End Sub

その他の回答 (1)

  • shinyat1
  • ベストアンサー率16% (1/6)
回答No.2

参考になれば・・・シートにファイルをドラッグ&ドロップするとコピーするマクロです。 A2セルからAAの最下行までをマクロブックに追加します。 CSV確認用固定文字は、ファイル確認するため、B1セルに入っている値を確認しているだけですので、いらないかも知れません。 ****** ThisWorkbookの中に以下のコード ****** Private Sub Workbook_Deactivate() Call Dataadd End Sub ****** 標準モジュールに以下のコード ****** Sub Dataadd() Dim LastRow As Integer, Sheetname As String, Bookname As String, NRow As Integer Dim O_LastRow As Integer, O_Sheetname As String, O_Bookname As String, O_Folder As String Dim a As Variant, b As Variant Application.ScreenUpdating = False Bookname = ThisWorkbook.Name O_Bookname = ActiveWorkbook.Name O_Sheetname = ActiveSheet.Name If Bookname <> O_Bookname Then If Workbooks(O_Bookname).Worksheets(O_Sheetname).Range("B1").Value = "CSV確認用固定文字" Then LastRow = Workbooks(Bookname).Sheets(1).Range("A65536").End(xlUp).Row NRow = LastRow + 1 O_LastRow = Range("A65536").End(xlUp).Row '最下行を取得 Set a = Workbooks(O_Bookname).Worksheets(O_Sheetname).Range("A2:AA" & O_LastRow) 'UsedRange Set b = Workbooks(Bookname).Sheets(1).Range("A" & NRow) a.Copy (b) Set a = Nothing Set b = Nothing Workbooks(O_Bookname).Activate O_Folder = ActiveWorkbook.Path ActiveWindow.Close Cells.Font.Size = 10 'Kill (O_Folder & "\" & O_Bookname) 'コピー元ファイルを削除 End If End If Application.ScreenUpdating = True End Sub

関連するQ&A

  • エクセルで繰り返し同じ作業をしたい

    仕事でDドライブの中のフォルダにエクセルのシートが100種類位入っています。それらのエクセルシートに毎日同じ作業をしなければならないのですが、(エクセルを開いて行う作業は各シート共通です)そのマクロの作り方を教えていただけないでしょうか?ちなみに Workbooks.Open Filename:="D:\業務\あ.xls" Range("D9").Select Selection.Copy Range("E9").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save ActiveWindow.Close Workbooks.Open Filename:="D:\業務\い.xls" Range("D9").Select Selection.Copy Range("E9").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save ActiveWindow.Close Workbooks.Open Filename:="D:\業務\う.xls" Range("D9").Select Selection.Copy Range("E9").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.Save ActiveWindow.Close      その後もまだまだ続きます。 というマクロの記録を使って作ってはいるものの、やたらと長くなってしまいます。VBAの知識がない初心者なのですが、いい方法があれば教えていただけないでしょうか?

  • エクセルマクロ if文を繰り返したい

    マクロ初心者です。 以下のようなマクロを作ったのですが、 これをE34まで繰り返しの処理をしたいです。 どこにどんな文章を挟んでいいのかわかりません。 Sub けいさん() If Workbooks("日報.xls").Worksheets("お手本").Range("O22") = "A" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" ElseIf Workbooks("日報.xls").Worksheets("お手本").Range("O22") = "B" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" ElseIf Workbooks("日報.xls").Worksheets("お手本").Range("O22") = "D" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" ElseIf Workbooks("日報.xls").Worksheets("お手本").Range("C22") = "" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" Else Workbooks("日報.xls").Worksheets("お手本").Range("C22").Copy Workbooks("test.xls").Worksheets("II-1(1)").Range("E11").PasteSpecial End If End Sub

  • 「コピペ」するExcelマクロで困っています。

     エクセルのマクロの自動作成ツールで、下のようなコピペのマクロを作ってみました。 シートをコピーして貼り付けるところまでは動きますが、その後に用済みの「ABCD.csv」を閉るところで、メッセージ画面が出て止まってしまいます。  良く見てみると、その後に開く「はい」「いいえ」「キャンセル」の選択画面(参考画面)の指示が自動では記入出来ないようで、色々調べてみましたがどうもうまくいきません。 Windows("ABCD.csv").Activate   Range("A1:B10").Select Selection.Copy Windows("DATA.xlsm").Activate   Range("A1").Select ActiveSheet.Paste   Windows("ABCD.csv").Activate ActiveWorkbook.Saved = False ActiveWindow.Close  この画面で、「いいえ」を選択するマクロを、誰か教えてください。 マクロを始めてまだ一週間なのでまったくわからず困っています、よろしくお願いします。

  • EXCEL VBA セルからファイル名を読み込む

    EXCEL VBAについての質問です 同じ処理を名前の違う複数のファイルで行いたいと思っています そこで、セルA2へファイル名の『○○.xls』○○部分だけをそれぞれのファイルに書き込んでおき、マクロは共通にしてファイル名をそれぞれのファイルから読み込んで実行したいと思っています。 良い方法を教えてください。 Workbooks("200809.csv").Activate Sheets("200809").Select Range("C3:C33").Copy Windows("○○.xls").Activate'←ここをファイルにあわせて変更できる形にしたい Sheets("報告書").Select Range("G5:G35").Select ActiveSheet.Paste Windows("200809.csv").Activate Range("K3:K33").Copy Windows("○○.xls").Activate’←ここ Sheets("報告書").Select Range("I5:I35").Select ActiveSheet.Paste Workbooks("200809.csv").Close SaveChanges:=False よろしくお願いします。

  • エクセル VBA 繰り返し処理を 簡潔にしたいのでお願いします。

    初心者です。繰り返し処理のシート名操作が分かりません。 上手く説明できないのですが、シートの名前が数字の1~20で 特定のセルを参照してテーブルにします。 現在、とても単純なコードを繰り返しています。 すっきりとさせるには、どのように記載するとよいのか 教えてください。 以下の処理を20回ほど繰り返します。  'シート1の特定セルをコピーします Sheets("1").Range("c3").Copy Range("A3").PasteSpecial Sheets("1").Range("c4").Copy Range("B3").PasteSpecial Sheets("1").Range("o2").Copy Range("C3").PasteSpecial Sheets("1").Range("o3").Copy Range("D3").PasteSpecial Sheets("1").Range("Q6:Q42").Copy Sheets("集計").Select ActiveWindow.ScrollColumn = 14 ActiveWindow.ScrollColumn = 13 ActiveWindow.ScrollColumn = 12 ActiveWindow.ScrollColumn = 11 ActiveWindow.ScrollColumn = 10 ActiveWindow.ScrollColumn = 9 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 1 Range("E3").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True 'シート2の特定セルをコピーします Sheets("2").Range("c3").Copy Range("A4").PasteSpecial Sheets("2").Range("c4").Copy Range("B4").PasteSpecial Sheets("2").Range("o2").Copy Range("c4").PasteSpecial Sheets("2").Range("o3").Copy Range("d4").PasteSpecial Sheets("2").Range("Q6:Q42").Copy Sheets("集計").Select ActiveWindow.ScrollColumn = 14 ActiveWindow.ScrollColumn = 13 ActiveWindow.ScrollColumn = 12 ActiveWindow.ScrollColumn = 11 ActiveWindow.ScrollColumn = 10 ActiveWindow.ScrollColumn = 9 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 1 Range("E4").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Sheets("3").Range("c3").Copy Range("A5").PasteSpecial Sheets("3").Range("c4").Copy Range("B5").PasteSpecial Sheets("3").Range("o2").Copy Range("c5").PasteSpecial Sheets("3").Range("o3").Copy Range("d5").PasteSpecial Sheets("3").Range("Q6:Q42").Copy Sheets("集計").Select ActiveWindow.ScrollColumn = 14 ActiveWindow.ScrollColumn = 13 ActiveWindow.ScrollColumn = 12 ActiveWindow.ScrollColumn = 11 ActiveWindow.ScrollColumn = 10 ActiveWindow.ScrollColumn = 9 ActiveWindow.ScrollColumn = 8 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 1 Range("E5").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True

  • マクロをすっきりさせたい・・・

    いつもお世話になっております。 下記、マクロを組んだのですが、 簡潔にまとめるには、どうしたら良いでしょうか・・・ 宜しくお願い致します。 Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B24")) Range("D14").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False) Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B25")) Range("D15").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False) Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B26")) Range("D16").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False)

  • 横にコピーするには・・。

    教えてください・・。 01.xls・02.xls・03.xlsとあり、その中のシート(01・02・03)をコピーして、全部というシートにまとめたいと思っています。 列にデータを追加したいのですが、行にデータが追加されてしまいます・・。 どうしたらいいのか教えてください。 01のシートがAからDまで 02のシートがEからGまで 03のシートがHからLまで とコピーをしたいと思っています・・。 --------- PathName = ThisWorkbook.Path & "\" ArrBook = Array("01.xls", "02.xls", "03.xls") For i = LBound(ArrBook) To UBound(ArrBook) Workbooks.Open PathName & ArrBook(i) Next Set WS(1) = Workbooks("01.xls").Worksheets("01") Set WS(2) = Workbooks("02.xls").Worksheets("02") Set WS(3) = Workbooks("03.xls").Worksheets("03") Set WS(4) = ThisWorkbook.Worksheets("全部") With WS(4) .Cells.ClearContents .Cells(1, 1) = "A" .Cells(1, 2) = "B" .Cells(1, 3) = "C" .Cells(1, 4) = "D" .Cells(1, 5) = "E" .Cells(1, 6) = "F" .Cells(1, 7) = "G" .Cells(1, 8) = "H" .Cells(1, 9) = "I" .Cells(1, 10) = "J" .Cells(1, 11) = "K" .Cells(1, 12) = "L" .Cells(1, 13) = "M" .Cells(1, 14) = "N" .Cells(1, 15) = "O" .Cells(1, 16) = "P" .Cells(1, 17) = "Q" LastRow(1) = WS(1).Range("A65536").End(xlUp).Row LastRow(2) = WS(2).Range("A65536").End(xlUp).Row LastRow(3) = WS(3).Range("A65536").End(xlUp).Row For i = 1 To 3 LastRow(4) = .Range("A65536").End(xlUp).Row + 1 WS(i).Rows("2:" & LastRow(i)).Copy .Cells(LastRow(4), 1) LastRow(4) = .Range("A65536").End(xlUp).Row End With For i = LBound(ArrBook) To UBound(ArrBook) Workbooks(ArrBook(i)).Close SaveChanges:=False Next End Sub

  • 既存のマクロを他のエクセルファイルで使用したい

    下記のマクロを使おうと思うと、 このマクロがついたファイルを開いて 他のエクセルファイルを開くのですが使えません。 使おうとするとマクロのついたファイルに戻ってしまいます。 Sub test01() Dim ws As Worksheet For Each ws In Worksheets If ws.Name = "統合シート" Then Else ws.Activate d = ws.Range("A65535").End(xlUp).Row ws.Range(Cells(1, "A"), Cells(d, "C")).Copy Sheets("統合シート").Activate Sheets("統合シート").Range("A65535").End(xlUp).Offset(1, 0).Select ActiveSheet.Paste End If Next End Sub どこを変えればよいのでしょうか。 教えてください。 よろしくお願いします。

  • コピー後に値のみ貼り付け エクセル、VBAの記述について

    マクロ初心者です。 エクセルで選択範囲を指定後コピーし、 自動的に別のシートの末尾に貼り付けられるようにしたのですが、 この内容のまま「貼り付け」を「値のみ貼り付け」に訂正する場合 どのように変更すればいいのか、教えてくださると嬉しいです。 宜しくお願いいたします。 Sub 選択範囲をコピー後、指定シートの末尾に貼り付け Worksheets("sheet1").Activate Range("b11:I17").Copy Workbooks("book2.xls").Worksheets("Sheet1").Activate 行 = Range("B1").CurrentRegion.Rows.Count + 1 ActiveSheet.Paste _ Destination:=Workbooks("book2.xls").Worksheets("Sheet1").Range("B" & 行) End Sub

  • VBA初心者です。値を貼り付け について質問です。

    VBA初心者です。 値を貼り付け について教えてください。 Sub test() With Workbooks("A.xls").Worksheets("sheet1") .Range("A1").Copy Workbooks("Bxls").Worksheets("sheet1").Range("B2") .Range("A2").Copy Workbooks("B.xls").Worksheets("sheet1").Range("B4") End With End Sub コピーする方に計算式が入っているので 値を貼り付け したいのですが、どうすればいいのでしょうか? PasteSpecial Paste:=xlPasteValues を使ったらよいというところまではわかったのですが・・・。 教えてください!よろしくお願いします!

専門家に質問してみよう