ExcelVBA複数のシートへのコピー方法
- ExcelVBAを使用して複数のシートへのコピー方法を学びたいです。コードを編集してもうまく行きません。
- 特定のフォルダ内にある複数のファイルからデータを抽出し、別のシートにコピーしたいです。
- 特定の年号を選択すると、複数のファイルからデータを抽出して結果のシートにコピーする処理を行いたいです。
- ベストアンサー
【補足】ExcelVBA複数のシートへのコピー方法
「ExcelVBA複数のシートへのコピーの方法」 http://okwave.jp/qa/q8504035.html 上記質問の補足です。 '////////////////////////////////////////////////////// 「ExcelVBA別フォルダにあるブックのコピー方法」 http://okwave.jp/qa/q8488933.html で教えていただいたコードを元に自分なりに編集したのですがうまくいきません。 結果先のシートは複数なのですが、複数のシートにコピーする編集方法がうまくいきません。 '////////////////////////////////////////////////////// 「yyyy」のファイルは「1999~2012」のファイルがあります。 ※「yyyy」の箇所にはそれぞれの年号が入ります。 ※例えば「1999_ファイルA.xls」 「yyyy2」のファイルは「2000~2012」のファイルがあります。 ※「yyyy2」の箇所にはそれぞれの年号が入ります。 ※例えば「2000_ファイルB.xls」 1_フォルダA ∟yyyy_ファイルA.xls(Sheet名:「dateA」で統一) 2_フォルダB ∟yyyy_ファイルB.xls(Sheet名:「dateB」で統一) 3_フォルダC ∟yyyy2_ファイルC.xls(Sheet名:「dateC」で統一) 4_フォルダD ∟yyyy_ファイルD.xls(Sheet名:「dateD」で統一) 5_フォルダE ∟ファイルE_結果.xls (Sheet名:A広域/B広域/C広域/D広域/E広域) 例えばコンボボックスで「2007」を選択した場合、 表【地域A男性】 「2006_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)D7~D25にコピー 「2007_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)E7~E25にコピー 「2008_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)F7~F25にコピー 「2006_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)H7~H25にコピー 「2007_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)I7~I25にコピー 「2008_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)J7~J25にコピー 「2007_ファイルC.xls」のC4~C22を「ファイルE_結果.xls」の(A広域)L7~L25にコピー 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(A広域)N7~N25にコピー 表【地域A女性】 「2006_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)D26~D44にコピー 「2007_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)E26~E44にコピー 「2008_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)F26~F44にコピー 「2006_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(A広域)H26~H44にコピー 「2007_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(A広域)I26~I44にコピー 「2008_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(A広域)J26~J44にコピー 「2007_ファイルC.xls」のC24~C42を「ファイルE_結果.xls」の(A広域)L26~L44にコピー 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(A広域)N26~N44にコピー 表【地域B男性】 「2006_ファイルA.xls」のF5~F23を「ファイルE_結果.xls」の(A広域)D51~D69にコピー 「2007_ファイルA.xls」のF5~F23を「ファイルE_結果.xls」の(A広域)E51~E69にコピー 「2008_ファイルA.xls」のF5~F23を「ファイルE_結果.xls」の(A広域)F51~F69にコピー 「2006_ファイルB.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)H51~H69にコピー 「2007_ファイルB.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)I51~I69にコピー 「2008_ファイルB.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)J51~J69にコピー 「2007_ファイルC.xls」のD4~D22を「ファイルE_結果.xls」の(A広域)L51~L69にコピー 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(A広域)N51~N69にコピー 表【地域B女性】 「2006_ファイルA.xls」のG5~G23を「ファイルE_結果.xls」の(A広域)D70~D88にコピー 「2007_ファイルA.xls」のG5~G23を「ファイルE_結果.xls」の(A広域)E70~E88にコピー 「2008_ファイルA.xls」のG5~G23を「ファイルE_結果.xls」の(A広域)F70~F88にコピー 「2006_ファイルB.xls」のD25~D43を「ファイルE_結果.xls」の(A広域)H70~H88にコピー 「2007_ファイルB.xls」のD25~D43を「ファイルE_結果.xls」の(A広域)I70~I88にコピー 「2008_ファイルB.xls」のD25~D43を「ファイルE_結果.xls」の(A広域)J70~J88にコピー 「2007_ファイルC.xls」のD24~D42を「ファイルE_結果.xls」の(A広域)L70~L88にコピー 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(A広域)N70~N88にコピー 表【地域C男性】 「2006_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)D7~D25にコピー 「2007_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)E7~E25にコピー 「2008_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)F7~F25にコピー 「2006_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)H7~H25にコピー 「2007_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)I7~I25にコピー 「2008_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)J7~J25にコピー 「2007_ファイルC.xls」のC4~C22を「ファイルE_結果.xls」の(B広域)L7~L25にコピー 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(B広域)N7~N25にコピー 表【地域C女性】 「2006_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(B広域)D26~D44にコピー 「2007_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(B広域)E26~E44にコピー 「2008_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(B広域)F26~F44にコピー 「2006_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(B広域)H26~H44にコピー 「2007_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(B広域)I26~I44にコピー 「2008_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(B広域)J26~J44にコピー 「2007_ファイルC.xls」のC24~C42を「ファイルE_結果.xls」の(B広域)L26~L44にコピー 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(B広域)N26~N44にコピー ※「表【地域C女性】」等はワークシートの表のタイトルです。 '//////////////////////////////////////////////////////
- minminwamidori
- お礼率65% (31/47)
- Visual Basic
- 回答数3
- ありがとう数2
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
' ' ///(3/投稿を3分割しています。) ' ' ■■■4_フォルダD sWbkSubName = "4_フォルダD\" & vTgYear & "_ファイルD.xls" ' ● sShtName = "dateD" ' ● On Error Resume Next Set sht元データ = Workbooks.Open(sMyDir & sWbkSubName).Sheets(sShtName) On Error GoTo 0 If sht元データ Is Nothing Then sMsg = sMsg & vbLf & "ブック◆" & sWbkSubName & vbLf & vbTab & "◆シート◆" & sShtName Else With sht元データ ' ' 8) 地域A男 [2007_ファイルD.xls]dateD!E8:E26→A広域!N7:N25 shtA広域.Range("N7:N25").Value = .Range("E8:E26").Value ' ● ' ' 16) 地域A女 [2007_ファイルD.xls]dateD!E8:E26→A広域!N26:N44 shtA広域.Range("N26:N44").Value = .Range("E8:E26").Value ' ● ' ' 24) 地域B男 [2007_ファイルD.xls]dateD!E8:E26→A広域!N51:N69 shtA広域.Range("N51:N69").Value = .Range("E8:E26").Value ' ● ' ' 32) 地域B女 [2007_ファイルD.xls]dateD!E8:E26→A広域!N70:N88 shtA広域.Range("N70:N88").Value = .Range("E8:E26").Value ' ● ' ' 40) 地域C男 [2007_ファイルD.xls]dateD!E8:E26→B広域!N7:N25 shtB広域.Range("N7:N25").Value = .Range("E8:E26").Value ' ● ' ' 48) 地域C女 [2007_ファイルD.xls]dateD!E8:E26→B広域!N26:N44 shtB広域.Range("N26:N44").Value = .Range("E8:E26").Value ' ● .Parent.Close SaveChanges:=False End With Set sht元データ = Nothing End If ' ' "ファイルC_2006~2008年結果.xls"形式の名前を付け保存する Application.DisplayAlerts = False wbk結果.SaveAs Filename:=sMyDir & "5_フォルダE\" & ComboBox1.Value & "_ファイルE.xls" ' ● Application.DisplayAlerts = True With Application .ScreenUpdating = True .Calculation = xlCalculationAutomatic End With Set shtA広域 = Nothing: Set shtB広域 = Nothing: Set wbk結果 = Nothing If sMsg = "" Then MsgBox Label1.Caption & vbLf & "処理完了", vbInformation Else MsgBox sMsg & vbLf & "開くことが出来ませんでした", vbExclamation End If End Sub ' ' /// 以上です。
その他の回答 (2)
- cj_mover
- ベストアンサー率76% (292/381)
' ' ///(2/投稿を3分割しています。) ' ' ■■■2_フォルダB sWbkSubName = "2_フォルダB\" & vTgYear + i & "_ファイルB.xls" ' ● sShtName = "dateB" ' ● On Error Resume Next Set sht元データ = Workbooks.Open(sMyDir & sWbkSubName).Sheets(sShtName) On Error GoTo 0 If sht元データ Is Nothing Then sMsg = sMsg & vbLf & "ブック◆" & sWbkSubName & vbLf & vbTab & "◆シート◆" & sShtName Else With sht元データ ' ' 4) 地域A男 [2006_ファイルB.xls]dateB!C5:C23→A広域!H7:H25 ' ' 5) 地域A男 [2007_ファイルB.xls]dateB!C5:C23→A広域!I7:I25 ' ' 6) 地域A男 [2008_ファイルB.xls]dateB!C5:C23→A広域!J7:J25 shtA広域.Range("I7:I25").Offset(, i).Value = .Range("C5:C23").Value ' ● ' ' 12) 地域A女 [2006_ファイルB.xls]dateB!C25:C43→A広域!H26:H44 ' ' 13) 地域A女 [2007_ファイルB.xls]dateB!C25:C43→A広域!I26:I44 ' ' 14) 地域A女 [2008_ファイルB.xls]dateB!C25:C43→A広域!J26:J44 shtA広域.Range("I26:I44").Offset(, i).Value = .Range("C25:C43").Value ' ● ' ' 20) 地域B男 [2006_ファイルB.xls]dateB!D5:D23→A広域!H51:H69 ' ' 21) 地域B男 [2007_ファイルB.xls]dateB!D5:D23→A広域!I51:I69 ' ' 22) 地域B男 [2008_ファイルB.xls]dateB!D5:D23→A広域!J51:J69 shtA広域.Range("I51:I69").Offset(, i).Value = .Range("D5:D23").Value ' ● ' ' 28) 地域B女 [2006_ファイルB.xls]dateB!D25:D43→A広域!H70:H88 ' ' 29) 地域B女 [2007_ファイルB.xls]dateB!D25:D43→A広域!I70:I88 ' ' 30) 地域B女 [2008_ファイルB.xls]dateB!D25:D43→A広域!J70:J88 shtA広域.Range("I70:I88").Offset(, i).Value = .Range("D25:D43").Value ' ● ' ' 36) 地域C男 [2006_ファイルB.xls]dateB!C5:C23→B広域!H7:H25 ' ' 37) 地域C男 [2007_ファイルB.xls]dateB!C5:C23→B広域!I7:I25 ' ' 38) 地域C男 [2008_ファイルB.xls]dateB!C5:C23→B広域!J7:J25 shtB広域.Range("I7:I25").Offset(, i).Value = .Range("C5:C23").Value ' ● ' ' 44) 地域C女 [2006_ファイルB.xls]dateB!C25:C43→B広域!H26:H44 ' ' 45) 地域C女 [2007_ファイルB.xls]dateB!C25:C43→B広域!I26:I44 ' ' 46) 地域C女 [2008_ファイルB.xls]dateB!C25:C43→B広域!J26:J44 shtB広域.Range("I26:I44").Offset(, i).Value = .Range("C25:C43").Value ' ● .Parent.Close SaveChanges:=False End With Set sht元データ = Nothing End If Next i ' ' ■■■3_フォルダC sWbkSubName = "3_フォルダC\" & vTgYear & "_ファイルC.xls" ' ● sShtName = "dateC" ' ● On Error Resume Next Set sht元データ = Workbooks.Open(sMyDir & sWbkSubName).Sheets(sShtName) On Error GoTo 0 If sht元データ Is Nothing Then sMsg = sMsg & vbLf & "ブック◆" & sWbkSubName & vbLf & vbTab & "◆シート◆" & sShtName Else With sht元データ ' ' 7) 地域A男 [2007_ファイルC.xls]dateC!C4:C22→A広域!L7:L25 shtA広域.Range("L7:L25").Value = .Range("C4:C22").Value ' ● ' ' 15) 地域A女 [2007_ファイルC.xls]dateC!C24:C42→A広域!L26:L44 shtA広域.Range(" L26:L44").Value = .Range("C24:C42").Value ' ● ' ' 23) 地域B男 [2007_ファイルC.xls]dateC!D4:D22→A広域!L51:L69 shtA広域.Range("L51:L69").Value = .Range("D4:D22").Value ' ● ' ' 31) 地域B女 [2007_ファイルC.xls]dateC!D24:D42→A広域!L70:L88 shtA広域.Range("L70:L88").Value = .Range("D24:D42").Value ' ● ' ' 39) 地域C男 [2007_ファイルC.xls]dateC!C4:C22→B広域!L7:L25 shtB広域.Range("L7:L25").Value = .Range("C4:C22").Value ' ● ' ' 47) 地域C女 [2007_ファイルC.xls]dateC!C24:C42→B広域!L26:L44 shtB広域.Range("L26:L44").Value = .Range("C24:C42").Value ' ● .Parent.Close SaveChanges:=False End With Set sht元データ = Nothing End If ' ' つづく
- cj_mover
- ベストアンサー率76% (292/381)
「今」混乱せずに先に進めるように、要領を示す意味で簡単ストレートな書き方を心掛けました。 ダミーサンプル(フォルダ ブック シート データ)すべて作成し動作確認済です。 以下、コメント先頭の数字は 直下の処理が、ご提示の対応表での何件めに対応しているか、を示しています。 ちょっと目的が判らない不自然な処理が指示されているようにも思えますが 対応関係を参照すれば混乱することはないでしょうから ひとつひとつ確認しながら必要ならそちらで書換えるようにしてください。 (セル参照を修正する場合はコメントも直してください。) ' ' ///(1/投稿を3分割します。) Private Sub CommandButton1_Click() ' ● Re: 8488933 8503466 8504035 504383 Dim vTgYear As Variant Dim wbk結果 As Workbook Dim shtA広域 As Worksheet Dim shtB広域 As Worksheet Dim sht元データ As Worksheet Dim sMyDir As String Dim sWbkSubName As String Dim sShtName As String Dim sMsg As String Dim i As Long vTgYear = ComboBox1.Value ' ● If Not vTgYear Like "####" Then MsgBox "年次を指定してからやり直し", vbExclamation Exit Sub End If Select Case vTgYear Case 1999 To 2012 ' ● Case Else MsgBox "1999~2012の間で年次を指定してからやり直し", vbExclamation ' ● Exit Sub End Select sMyDir = ThisWorkbook.Path & "\" With Application .ScreenUpdating = False .Calculation = xlCalculationManual End With ' ' ファイルE_結果.xls を開く sWbkSubName = "5_フォルダE\ファイルE_結果.xls" ' ● On Error Resume Next Set wbk結果 = Workbooks.Open(sMyDir & sWbkSubName) On Error GoTo 0 If wbk結果 Is Nothing Then MsgBox "ブック◆" & sWbkSubName & vbLf & "を開くことが出来ませんでした", vbExclamation Exit Sub End If ' ' ファイルE_結果.xls シート"A広域" を取得 sShtName = "A広域" ' ● On Error Resume Next Set shtA広域 = wbk結果.Sheets(sShtName) On Error GoTo 0 If shtA広域 Is Nothing Then MsgBox "ブック◆" & sWbkSubName & vbLf & vbTab & "◆シート◆" & sShtName & vbLf & "が見当たりません", vbExclamation Set wbk結果 = Nothing Exit Sub End If ' ' ファイルE_結果.xls シート"B広域" を取得 sShtName = "B広域" ' ● On Error Resume Next Set shtB広域 = wbk結果.Sheets(sShtName) On Error GoTo 0 If shtB広域 Is Nothing Then MsgBox "ブック◆" & sWbkSubName & vbLf & vbTab & "◆シート◆" & sShtName & vbLf & "が見当たりません", vbExclamation Set wbk結果 = Nothing Exit Sub End If ' ' 出力先のセル範囲を値消去 テンプレートが空白なら、以下2行不要 shtA広域.Range("(7:44,51:88) (D:F,H:J,L:L,N:N)").ClearContents ' ● shtB広域.Range("(7:44) (D:F,H:J,L:L,N:N)").ClearContents ' ● ' ' 前年~翌年、ループ For i = -1 To 1 ' ' ■■■1_フォルダA sWbkSubName = "1_フォルダA\" & vTgYear + i & "_ファイルA.xls" ' ● sShtName = "dateA" ' ● On Error Resume Next Set sht元データ = Workbooks.Open(sMyDir & sWbkSubName).Sheets(sShtName) On Error GoTo 0 If sht元データ Is Nothing Then sMsg = sMsg & vbLf & "ブック◆" & sWbkSubName & vbLf & vbTab & "◆シート◆" & sShtName Else With sht元データ ' ' 1) 地域A男 [2006_ファイルA.xls]dateA!C5:C23→A広域!D7:D25 ' ' 2) 地域A男 [2007_ファイルA.xls]dateA!C5:C23→A広域!E7:E25 ' ' 3) 地域A男 [2008_ファイルA.xls]dateA!C5:C23→A広域!F7:F25 shtA広域.Range("E7:E25").Offset(, i).Value = .Range("C5:C23").Value ' ● ' ' 9) 地域A女 [2006_ファイルA.xls]dateA!D5:D23→A広域!D26:D44 ' ' 10) 地域A女 [2007_ファイルA.xls]dateA!D5:D23→A広域!E26:E44 ' ' 11) 地域A女 [2008_ファイルA.xls]dateA!D5:D23→A広域!F26:F44 shtA広域.Range("E26:E44").Offset(, i).Value = .Range("D5:D23").Value ' ● ' ' 17) 地域B男 [2006_ファイルA.xls]dateA!F5:F23→A広域!D51:D69 ' ' 18) 地域B男 [2007_ファイルA.xls]dateA!F5:F23→A広域!E51:E69 ' ' 19) 地域B男 [2008_ファイルA.xls]dateA!F5:F23→A広域!F51:F69 shtA広域.Range("E51:E69").Offset(, i).Value = .Range("F5:F23").Value ' ● ' ' 25) 地域B女 [2006_ファイルA.xls]dateA!G5:G23→A広域!D70:D88 ' ' 26) 地域B女 [2007_ファイルA.xls]dateA!G5:G23→A広域!E70:E88 ' ' 27) 地域B女 [2008_ファイルA.xls]dateA!G5:G23→A広域!F70:F88 shtA広域.Range("E70:E88").Offset(, i).Value = .Range("G5:G23").Value ' ● ' ' 33) 地域C男 [2006_ファイルA.xls]dateA!C5:C23→B広域!D7:D25 ' ' 34) 地域C男 [2007_ファイルA.xls]dateA!C5:C23→B広域!E7:E25 ' ' 35) 地域C男 [2008_ファイルA.xls]dateA!C5:C23→B広域!F7:F25 shtB広域.Range("E7:E25").Offset(, i).Value = .Range("C5:C23").Value ' ● ' ' 41) 地域C女 [2006_ファイルA.xls]dateA!D5:D23→B広域!D26:D44 ' ' 42) 地域C女 [2007_ファイルA.xls]dateA!D5:D23→B広域!E26:E44 ' ' 43) 地域C女 [2008_ファイルA.xls]dateA!D5:D23→B広域!F26:F44 shtB広域.Range("E26:E44").Offset(, i).Value = .Range("D5:D23").Value ' ● .Parent.Close SaveChanges:=False End With Set sht元データ = Nothing End If ' ' つづく
関連するQ&A
- ExcelVBA複数のシートへのコピーの方法
以下の質問の補足質問です。よろしくお願い致します。 「ExcelVBAコードの編集方法を教えてください」 http://okwave.jp/qa/q8503466.html 「ExcelVBA別フォルダにあるブックのコピー方法」 http://okwave.jp/qa/q8488933.html で教えていただいたコードを元に自分なりに編集したのですがうまくいきません。 結果先のシートは複数なのですが、複数のシートにコピーする編集方法がうまくいきません。 '////////////////////////////////////////////////////// yyyy = 1999~2012 yyyy2 = 2000~2012 Sheet名:A広域、B広域 1_フォルダA ∟yyyy_ファイルA.xls 2_フォルダB ∟yyyy_ファイルB.xls 3_フォルダC ∟yyyy2_ファイルC.xls 4_フォルダD ∟yyyy_ファイルD.xls 5_フォルダE ∟ファイルE_結果.xls 例えばコンボボックスで「2007」を選択した場合、 '地域A男性 「2006_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)D7~D25にコピー 「2007_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)E7~E25にコピー 「2008_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)F7~F25にコピー '地域A女性 「2006_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)D26~D44にコピー 「2007_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)E26~E44にコピー 「2008_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)F26~F44にコピー '地域B男性 「2006_ファイルA.xls」のF5~F23を「ファイルE_結果.xls」の(A広域)D51~D69にコピー 「2007_ファイルA.xls」のF5~F23を「ファイルE_結果.xls」の(A広域)E51~E69にコピー 「2008_ファイルA.xls」のF5~F23を「ファイルE_結果.xls」の(A広域)F51~F69にコピー '地域B女性 「2006_ファイルA.xls」のG5~G23を「ファイルE_結果.xls」の(A広域)D70~D88にコピー 「2007_ファイルA.xls」のG5~G23を「ファイルE_結果.xls」の(A広域)E70~E88にコピー 「2008_ファイルA.xls」のG5~G23を「ファイルE_結果.xls」の(A広域)F70~F88にコピー '地域C男性 「2006_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)D7~D25にコピー 「2007_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)E7~E25にコピー 「2008_ファイルA.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)F7~F25にコピー '地域C女性 「2006_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(B広域)D26~D44にコピー 「2007_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(B広域)E26~E44にコピー 「2008_ファイルA.xls」のD5~D23を「ファイルE_結果.xls」の(B広域)F26~F44にコピー '地域A男性 「2006_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)H7~H25にコピー 「2007_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)I7~I25にコピー 「2008_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(A広域)J7~J25にコピー '地域A女性 「2006_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(A広域)H26~H44にコピー 「2007_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(A広域)I26~I44にコピー 「2008_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(A広域)J26~J44にコピー '地域B男性 「2006_ファイルB.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)H51~H69にコピー 「2007_ファイルB.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)I51~I69にコピー 「2008_ファイルB.xls」のD5~D23を「ファイルE_結果.xls」の(A広域)J51~J69にコピー '地域B女性 「2006_ファイルB.xls」のD25~D43を「ファイルE_結果.xls」の(A広域)H70~H88にコピー 「2007_ファイルB.xls」のD25~D43を「ファイルE_結果.xls」の(A広域)I70~I88にコピー 「2008_ファイルB.xls」のD25~D43を「ファイルE_結果.xls」の(A広域)J70~J88にコピー '地域C男性 「2006_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)H7~H25にコピー 「2007_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)I7~I25にコピー 「2008_ファイルB.xls」のC5~C23を「ファイルE_結果.xls」の(B広域)J7~J25にコピー '地域C女性 「2006_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(B広域)H26~H44にコピー 「2007_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(B広域)I26~I44にコピー 「2008_ファイルB.xls」のC25~C43を「ファイルE_結果.xls」の(B広域)J26~J44にコピー '地域A男性 「2007_ファイルC.xls」のC4~C22を「ファイルE_結果.xls」の(A広域)L7~L25にコピー '地域A女性 「2007_ファイルC.xls」のC24~C42を「ファイルE_結果.xls」の(A広域)L26~L44にコピー '地域B男性 「2007_ファイルC.xls」のD4~D22を「ファイルE_結果.xls」の(A広域)L51~L69にコピー '地域B女性 「2007_ファイルC.xls」のD24~D42を「ファイルE_結果.xls」の(A広域)L70~L88にコピー '地域C男性 「2007_ファイルC.xls」のC4~C22を「ファイルE_結果.xls」の(B広域)L7~L25にコピー '地域C女性 「2007_ファイルC.xls」のC24~C42を「ファイルE_結果.xls」の(B広域)L26~L44にコピー '地域A男性 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(A広域)N7~N25にコピー '地域A女性 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(A広域)N26~N44にコピー '地域B男性 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(A広域)N51~N69にコピー '地域B女性 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(A広域)N70~N88にコピー '地域C男性 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(B広域)N7~N25にコピー '地域C女性 「2007_ファイルD.xls」のE8~E26を「ファイルE_結果.xls」の(B広域)N26~N44にコピー '////////////////////////////////////////////////////// コピー先は複数あるのですが、文字数の関係で割愛させていただきます。 この内容で伝わると良いのですが。 何卒よろしくお願いします。
- ベストアンサー
- Visual Basic
- ExcelVBA別フォルダにあるブックのコピー方法
ExcelVBAでデータを条件に応じてコピーしたいと思っています。 同一階層に「VBAファイル.xls」「1_フォルダA」「2_フォルダB」「3_フォルダC」があります。 「1_フォルダA」と「2_フォルダB」には年代別に分かれたファイルがあります。 ファイルとフォルダの構造は以下の通りです。 VBAファイル.xls 1_フォルダA ∟1999_ファイルA.xls ∟2000_ファイルA.xls ∟2001_ファイルA.xls ∟2002_ファイルA.xls ∟2003_ファイルA.xls ∟2004_ファイルA.xls ∟2005_ファイルA.xls ∟2006_ファイルA.xls ∟2007_ファイルA.xls ∟2008_ファイルA.xls ∟2009_ファイルA.xls ∟2010_ファイルA.xls ∟2011_ファイルA.xls ∟2012_ファイルA.xls 2_フォルダB ∟1999_ファイルB.xls ∟2000_ファイルB.xls ∟2001_ファイルB.xls ∟2002_ファイルB.xls ∟2003_ファイルB.xls ∟2004_ファイルB.xls ∟2005_ファイルB.xls ∟2006_ファイルB.xls ∟2007_ファイルB.xls ∟2008_ファイルB.xls ∟2009_ファイルB.xls ∟2010_ファイルB.xls ∟2011_ファイルB.xls ∟2012_ファイルB.xls 3_フォルダC ∟ファイルC_結果.xls 「VBAファイル.xls」では添付の画像のような「ActiveXコントロール」を設定しました。 コンボボックスで西暦を選択すると、選択した年を中心年として、 前後1年を合わせて合計3年がラベルに表示されます。 その年のファイルのデータが「ファイルC_結果.xls」にコピーされるようにしたいです。 例えば画像のように「2007」を選択した場合、 ・「2006_ファイルA.xls」のC7~C25を「ファイルC_結果.xls」のD7~D25にコピー ・「2007_ファイルA.xls」のC7~C25を「ファイルC_結果.xls」のE7~E25にコピー ・「2008_ファイルA.xls」のC7~C25を「ファイルC_結果.xls」のF7~F25にコピー ・「2006_ファイルB.xls」のC6~C24を「ファイルC_結果.xls」のH7~H25にコピー ・「2007_ファイルB.xls」のC6~C24を「ファイルC_結果.xls」のI7~I25にコピー ・「2008_ファイルB.xls」のC6~C24を「ファイルC_結果.xls」のJ7~J25にコピー というようにしたいです。 「ファイルC_結果.xls」のD/E/F列はファイルAのデータで、 D列は前年、E列は当年、F列は翌年 H/I/J列はファイルBのデータで、 H列は前年、I列は当年、J列は翌年の値をコピーして貼り付けたいです。 また、可能であれば「ファイルC_結果.xls」は原本なので、 値をコピーする際にファイル名が変更できればよりよいです。 いろいろ書いてしまい、うまく伝わっているか不安なのですが 処理するデータが多くとても困っています。 お知恵のある方、どなたか助けていただけますと幸いです。 よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- VBA 他シートを参照しているセルのコピー
お世話になります。 以下のシートがあります。 [sheet a] A B C D E 1 2004 2005 2006 2007 2008 2 =b!A2 =b!C2 =b!E2 =b!G2 =b!I2 3 10 15 16 4 11 4 12 30 20 9 2 5 =SUM(A3:A4) =SUM(B3:B4) =SUM(C3:C4) =SUM(D3:D4) =SUM(E3:E4) [sheet b] A B C D E F G H I J 2004 2005 2006 2007 2008 1 あ1 い1 う1 え1 お1 か1 き1 く1 け1 こ1 2 あ2 い2 う2 え2 お2 か2 き2 く2 け2 こ2 ・・・・・・・・・ [sheet a]F列以降に入れるデータは、VBA(マクロ)を使って、別のブックから取り出しています。 (例) F1…=E1+1(E1の数式をコピー) F3,F4…任意の値(別のブックからコピー) F5…=SUM(F3:F4)(E5の数式をコピー) 1行目,5行目の場合は左のセルをコピーして数式を貼り付けると、列が自動的に列が変わりますが、2行目の場合は元のシートを1行おきに参照しているので、単純にコピーしただけでは正しい数式が入りません。 2行目の参照をVBAで作るには、どのようにしたらいいでしょうか。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 1つのファイルを複数のディレクトリにコピーする
ディレクトリAの中に ディレクトリ B ディレクトリ C ディレクトリ D ディレクトリ E ファイル F があるとします.ここでファイルFをB,C,D,Eにコピーするにはどうコマンドを打てばよいのでしょうか?
- 締切済み
- Linux系OS
- ExcelVBAでセルに入力された値をみて複数のファイルコピーするマクロ
VBA初心者です。関連する質問はみたのですが、組み合わせが他と違い うまくできませんでした。 EXCELのマクロを使って、それぞれ格納場所が異なる2つのエクセルファイル(格納元D:\AAA\123A.xlsと格納元D:\BBB\123B.xls)をコピーして指定のフォルダ(格納先D:\ZZZ\)内へ2つファイルを保存したいのですが・・ Private Const cnsSrc = "D:\AAA\123A.xls" Private Const cnsDst = "D:\ZZZ\123A.xls" Sub COPY_Func() ' ファイルをコピー FileCopy cnsSrc, cnsDst End Sub まで考えたんですが 複数のファイルまでコピーさせることができませんでした。 また、それぞれのフォルダ内には○○○A.xlsと○○○B.xlsが複数あるため コピーするファイル名は選択させたく、sheet1のA1セルに入力された"123"を みて123A.xls123B.xlsをコピーさせたいのですが、可能でしょうか? 宜しくお願い致します。
- 締切済み
- Visual Basic
- 簡単にコピーする方法
A、C、E、F列に3行目から250行目程度データが入っています。 H~J列のよう縦方向に順番にコピーする簡単な方法を教えて下さい。 但し、6行目の様に各スペース行を設ける。 また、結果が1000行となってしまっても良いです。 マクロ使用でも構いません。 A B C D E F G H I J 1 2 3 ss 3-6 m 7 m 7 4 sz 1-8 g 6 ss 5 3-6 6 7 g 6 8 sz 9 1-8 . . . .
- ベストアンサー
- オフィス系ソフト
- sheet1、sheet2の値をsheet3に集めたい。
エクセルについて教えてください。 山田君のテストの結果 sheet1に、中間テスト結果A1B1C1D1E1、 sheet2に、期末テスト結果A1B1C1D1E1があり、 sheet3のA1B1C1D1E1、A2B2C2D2E2に 移動させていと考えています。 されに、小島さんのテスト 中間テスト結果が、sheet1のA2B2C2D2E2、 期末テスト結果が、sheet2のA2B2C2D2E2 にあり、それら2つを sheet3のA3B3C3D3E3、A4B4C4D4E4 に続けて移動させたいです。 実際は、2人だけではなく、 約200人以上を続けてsheet3に集めたいと思っています。 連続的に集めるためには、 どうすればよいか教えてください。 よろしくお願いします。
- ベストアンサー
- その他MS Office製品
- エクセル(マクロ) 特定セルのファイル間コピペ
マクロで下記内容の処理を行いたいと思っております。 どのようなコードにすればよいかご教授よろしくお願い致します。 1.A.xlsを開く 2.B.xlsを開く 3.B.xlsの特定セルの値をコピーする。(特定セルを仮にB4、C7、D9とする) 4.A.xlsのC列にあるファイル名リストから「B.xls」というファイル名の入ったセルを検索する。 5.仮に5行目に「B.xls」というファイル名があれば、同じ行にある特定列 (行は固定で、例えばE5、F5、G5とする)に3.でコピーしたB4、C7、D9の値を張り付ける。 ※B4はE列、C7はF列、D9はG列に対応するものとする 6.B.xlsを閉じる 7.C.xlsを開く 8.C.xlsの特定セルの値をコピーする。(特定セルはB.xlsと同じB4、C7、D9) 9.A.xlsのC列にあるファイル名リストから「C.xls」というファイル名の入ったセルを検索する。 10.仮に7行目に「C.xls」というファイル名があれば、同じ行にある特定列 (行は固定で、例えばE7、F7、G7とする)に8.でコピーしたB4、C7、D9の値を張り付ける。 ※B4はE列、C7はF列、D9はG列に対応するものとする 11.C.xlsを閉じる 12.D.xlsを開く 以下、同じ処理を繰り返す。
- 締切済み
- Visual Basic
- エクセルで斜めに参照コピー
1| A1 | B1 | C1 | D1 | E1・・・ 2| A2 | B2 | C2 | D2 | E2・・・ 3| A3 | B3 | C3 | D3 | E3・・・ 4| A4 | B4 | C4 | D4 | E4・・・ ・・・ と普通に並んでいるデータを 1| A1 | B2 | C3 | D4 | E5 |・・・ 2| = | A2 | B3 | C4 | D5 | E6 |・・・ 3| = | = | A3 | B4 | C5 | D6 | E7 |・・・ ・・・ (=は空白セル) とななめに参照コピーさせたいのですが、普通にドラッグコピーさせたのではうまくいきません。データ数が結構多いもので一つ一つコピーするのも大変です。何か簡便な方法はあるでしょうか?列毎もしくは行毎の作業でもいいので、何か良い方法がありましたらご教示いただけませんでしょうか?
- ベストアンサー
- オフィス系ソフト
- 複数シートのデータをまとめたい
複数のシートを下の例のように一つにまとめたいのですが、どうすればよいでしょうか? 注)見づらい例で申し訳ありません。 --------------------------------(例)---------------------------- [sheet1]と[sheet2]のデータを[sheet3]に出力させたい。 ※例では[sheet1][sheet2]共,5行目までしかデータがありませんが、 これより少ない時も多い時もあります。 [sheet1] (A1):担当者A (A2):項目A (B2):項目B (C2):項目C (D2):項目D (A3):テキスト1 (B3):15 (C3):2 (D3):テキスト4 (A4):テキスト2 (B4):3 (C4):1 (D4):テキスト5 (A5):テキスト3 (B5):4 (C5):2 (D5):テキスト6 [sheet2] (A1):担当者B (A2):項目A (B2):項目B (C2):項目C (D2):項目D (A3):テキスト7 (B3):5 (C3):3 (D3):テキスト10 (A4):テキスト8 (B4):7 (C4):2 (D4):テキスト11 (A5):テキスト9 (B5):9 (C5):4 (D5):テキスト12 [sheet3] (A2):項目A(B2):項目B(C2):項目C(D2):項目D(E2):担当者 (A3):テキスト1(B3):15(C3):2(D3):テキスト4(E3):担当者A (A4):テキスト2(B4):3(C4):1(D4):テキスト5(E4):担当者A (A5):テキスト3(B5):4(C5):2(D5):テキスト6(E5):担当者A (A6):テキスト7(B6):5(C6):3(D6):テキスト10(E6):担当者B (A7):テキスト8(B7):7(C7):2(D7):テキスト11(E7):担当者B (A8):テキスト9(B8):9(C8):4(D8):テキスト12(E8):担当者B ----------------------------------------------------------------
- ベストアンサー
- オフィス系ソフト
お礼
お世話になりました。自力で解決できました。ありがとうございました。
補足
ご回答いただきましてありがとうございました。やりたいことができたのですがコピーの内容が大きくなってしまい、「プロシージャが大きすぎます」となってしまい1つのプロシージャに収まりませんでした。そこで、2つに分けようと思ったのですが「すでに開いています。内容が破棄されます。」的なメッセージが出てしまい、前に入力された内容が保存されなくなってしまいました。コピー内容が多くなってしまい、プロシージャを2つに分けたい場合にはどうしたらよいでしょうか?私は、結果ファイルを開いておいてそこにコピーしていく方法を考え【http://okwave.jp/qa/q8508566.html】のようなコードを書いてみたのですが、エラーになってしまいました。もしご存じでしたらご教授いただけますと幸いです。