• 締切済み

Excelマクロに関しての質問

Excelマクロに関しての質問です。 ファイルAの”シート1”のF1,F16,F42,F65,F97,F122を別のファイルBの”集計シート”のB2,C2,D2,E2,F2,G2にデータ(数値or文字)を移します。 そしてファイルAの”シート2”のF1,F16,F42,F65,F97,F122をファイルBの”集計シート”のB3,C3,D3,E3,F3,G3にデータを移します。 それをファイルAの”シート29”まで繰り返し行いたいのですが、どのようなマクロを組めば良いのでしょうか? 教えて頂きたいです。

みんなの回答

回答No.4

マクロはBOOKB(集計側) アクティブシートに結果が出る BOOKA(データ)は開いておく シートの数だけ処理する Sub RagPicker() Dim xBook As Workbook Dim xSheet As Worksheet Dim nn As Long Set xBook = Workbooks("BookA.xls") ActiveSheet.UsedRange.Clear For nn = 1 To xBook.Sheets.Count Set xSheet = xBook.Worksheets(nn) With ActiveSheet Cells(nn + 1, "B").Value = xSheet.Range("F1").Value Cells(nn + 1, "C").Value = xSheet.Range("F16").Value Cells(nn + 1, "D").Value = xSheet.Range("F42").Value Cells(nn + 1, "E").Value = xSheet.Range("F65").Value Cells(nn + 1, "F").Value = xSheet.Range("F97").Value Cells(nn + 1, "G").Value = xSheet.Range("F122").Value End With Next nn End Sub

ace7shunsuke
質問者

お礼

ありがとうございます。 おかげさまでさくっと作業が終わりました。

回答No.3

こんにちは。 この種のVBAマクロは、ペタっと貼り付けて動くということは、まずないと思ってください。環境などを合わせて、書き換える部分があります。他人のコードをみて研究してください。 なお、これは、集計される側のブックの標準モジュールに書き込むことを想定されています。 ただし、私は、マクロが分かる方を対象として書いていますので、ダメだったら見捨ててください。 '// ''Option Explicit '設定部分・ブック名は拡張子も入れること Const oWB1 As String = "ファイルB.xls " ''集計される側のブック Const oSH As String = "集計シート" Const tWB2 As String = "ファイルA.xls" ''データが書かれている側のブック Const tSH As String = "Sheet" 'シートの基底名 Const oDATA As String = "B2,C2,D2,E2,F2,G2" Const TARGET As String = "F1,F16,F42,F65,F97,F122" Const iCNT As Long = 9 Sub Copy_Data()  Dim wb1 As Workbook  Dim wb2 As Workbook  Dim arData As Variant  Dim arTarget As Variant  Dim i As Long, j As Long  Dim c As Variant  On Error GoTo ErrHandler  Set wb1 = Workbooks(oWB1)  Set wb2 = Workbooks(tWB2)  arData = Split(oDATA, ",")  arTarget = Split(TARGET, ",")  If UBound(arData) <> UBound(arTarget) Then   MsgBox "転記元か転記先のセルの数が違います", vbCritical   Exit Sub  End If  With wb1.Worksheets(oSH)   For i = 1 To iCNT    For j = 0 To UBound(arData)     .Range(arData(j)).Offset(i - 1).Value _     = wb2.Worksheets(tSH & CStr(i)).Range(arTarget(j)).Value    Next j   Next i  End With  Exit Sub ErrHandler:  MsgBox Err.Number & " : " & Err.Description End Sub

ace7shunsuke
質問者

お礼

申し訳ありません。 少し私にとっては難し過ぎてわかりませんでした。。。 お答え頂きありがとうございます。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

そもそもマクロの使い方は判ってるんでしょうか。 また教わったマクロをただコピーして、何もせずにいきなり動かしてるんじゃないでしょうね。 チェック: ●書いて置いたように関連するブックを先に開いておく ●マクロはVBA画面で標準モジュールを挿入し、そこに記載する  (たまに手抜きしてシートモジュールとかに記載している人がいますが、ダメです) ●当たり前の事ですがマクロに記載されているブック名をキチンと直す ●当たり前の事ですがマクロに記載されているブックの拡張子もキチンと確認する ●当たり前の事ですがマクロに記載されているシート名も必要に応じてキチンと直す >どうしたらいいのでしょうか? 何をしたらどうなってしまって動かないのですか。「うごかないー」とぼけっと口開けて待ってるんじゃなくて、詳しく状況を知らせてくれないと、困りますよ。 エラーが出たなら、どの行でエラーになったのですか。 動かそうとしたら何も反応が無いってのも考えにくいですが、どういう反応があったのですか。 「言われた通りにやりました」じゃなくて「実際にはこうしました」と、あなたが実際に動かそうとして動かなかったそのマクロを、あなたのエクセルからコピーして掲示するぐらいは必ず行ってください。

ace7shunsuke
質問者

お礼

申し訳ありません。 色々確認せずに行ってました。 訂正したらできました。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

こんばんは。 余計なところでつまづかないよう、ブックA,Bは既に開いてある事にします で。要は淡々と転記していくだけです。 sub macro1()  dim i as long  workbooks("BookB.xls").select  worksheets("集計シート").select  for i = 1 to 29  with workbooks("BookA.xls").worksheets(i)   cells(i + 1, "B").value = .range("F1").value     cells(i + 1, "C").value = .range("F16").value   cells(i + 1, "D").value = .range("F42").value   cells(i + 1, "E").value = .range("F65").value   cells(i + 1, "F").value = .range("F97").value   cells(i + 1, "G").value = .range("F122").value  end with  next i end sub

ace7shunsuke
質問者

お礼

ありがとうございます。 しかし動かないのですが、どうしたらいいのでしょうか?

関連するQ&A