- 締切済み
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”まで繰り返し行いたいのですが、どのようなマクロを組めば良いのでしょうか? 教えて頂きたいです。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- K Kazz(@JazzCorp)
- ベストアンサー率31% (549/1751)
マクロは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
- WindFaller
- ベストアンサー率57% (465/803)
こんにちは。 この種の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
お礼
申し訳ありません。 少し私にとっては難し過ぎてわかりませんでした。。。 お答え頂きありがとうございます。
- keithin
- ベストアンサー率66% (5278/7941)
そもそもマクロの使い方は判ってるんでしょうか。 また教わったマクロをただコピーして、何もせずにいきなり動かしてるんじゃないでしょうね。 チェック: ●書いて置いたように関連するブックを先に開いておく ●マクロはVBA画面で標準モジュールを挿入し、そこに記載する (たまに手抜きしてシートモジュールとかに記載している人がいますが、ダメです) ●当たり前の事ですがマクロに記載されているブック名をキチンと直す ●当たり前の事ですがマクロに記載されているブックの拡張子もキチンと確認する ●当たり前の事ですがマクロに記載されているシート名も必要に応じてキチンと直す >どうしたらいいのでしょうか? 何をしたらどうなってしまって動かないのですか。「うごかないー」とぼけっと口開けて待ってるんじゃなくて、詳しく状況を知らせてくれないと、困りますよ。 エラーが出たなら、どの行でエラーになったのですか。 動かそうとしたら何も反応が無いってのも考えにくいですが、どういう反応があったのですか。 「言われた通りにやりました」じゃなくて「実際にはこうしました」と、あなたが実際に動かそうとして動かなかったそのマクロを、あなたのエクセルからコピーして掲示するぐらいは必ず行ってください。
お礼
申し訳ありません。 色々確認せずに行ってました。 訂正したらできました。
- keithin
- ベストアンサー率66% (5278/7941)
こんばんは。 余計なところでつまづかないよう、ブック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
お礼
ありがとうございます。 しかし動かないのですが、どうしたらいいのでしょうか?
お礼
ありがとうございます。 おかげさまでさくっと作業が終わりました。