- ベストアンサー
Excel 2007 マクロ 表の集計について
- Excel 2007を使用して、2つのシート(Sheet1とSheet2)の情報を集計し、Sheet3に反映する方法を知りたいです。
- Sheet1のC列、D列、E列とSheet2のC列が空欄の場合はSheet3に反映しないようにしたいです。
- Sheet1のC列、D列、E列とSheet2のC列のいずれかに数値が入っている場合にはSheet3に行を反映したいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
例によって実際のシートがご質問に掲示されたサンプルと違うと,失敗します。 Sub Macro1() Dim a1 As String Dim a2 As String 'あれこれ準備 Worksheets("Sheet2").Range("B1").Value = Worksheets("Sheet1").Range("B1").Value Worksheets("Sheet3").UsedRange.ClearContents a1 = Worksheets("Sheet1").Range("A1").CurrentRegion.Offset(0, 1).Address(ReferenceStyle:=xlR1C1) a2 = Worksheets("Sheet2").Range("A1").CurrentRegion.Offset(0, 1).Address(ReferenceStyle:=xlR1C1) 'データタブの「統合」の機能 Worksheets("Sheet3").Range("A1").Consolidate _ sources:=Array("Sheet1!" & a1, "Sheet2!" & a2), _ Function:=xlSum, _ TopRow:=True, _ LeftColumn:=True, _ CreateLinks:=False '空白行の抽出と削除 With Worksheets("Sheet3") With .Range("A1:E" & .Range("A65536").End(xlUp).Row) .AutoFilter field:=2, Criteria1:="=" .AutoFilter field:=3, Criteria1:="=" .AutoFilter field:=4, Criteria1:="=" .AutoFilter field:=5, Criteria1:="=" End With .AutoFilter.Range.Offset(1).Delete shift:=xlShiftUp .AutoFilterMode = False End With End Sub
その他の回答 (1)
- seastar3
- ベストアンサー率69% (99/142)
マクロよりは関数式の埋め込みでできそうです。 シート1とシート2は多数データがありそうですから、SUMIF()関数が適当でしょう。 シート1とシート2が100行以内と想定します。そしてシート3のりんごの行の各列に以下の関数を埋め、品物の種類分だけ下方向にコピーします。 国産の列 : =SUMIF(Sheet1!$B$3:$E$102,$A3,Sheet1!$C$3:$C$102) 外国産の列: =SUMIF(Sheet1!$B$3:$E$102,$A3,Sheet1!$D$3:$D$102) 不明の列 : =SUMIF(Sheet1!$B$3:$E$102,$A3,Sheet1!$E$3:$E$102) 本数の列 : =SUMIF(Sheet2!$B$3:$C$102,$A3,Sheet2!$C$3:$C$102) もし、100件以上のデータがあるときは、102という数を増やして使います。
お礼
ご回答ありがとうございました。関数での解決方法は知りませんでした。参考にさせていただきます。
お礼
ご回答ありがとうございました。問題なく動きました。コメントまで入れて頂き非常に助かります。