プロが教える店舗&オフィスのセキュリティ対策術

月次の品目別内示数量を、統合機能を用いて、その変動数量や変動率を集計しています。
この品目は、新たに追加されたり廃止されたりと、その月々で変動します。

品目数が不変であれば、統合元範囲の設定は、例えば$A$2:$B$500のように
記述すればよいのですが、変動する場合の構文はどのように記述すればよいか、
わかりません。

アクティブセルを指定する、以下のような構文では、
参照が正しくないというエラーとなります。
Range("A2:B2").Select
Selection.CurrentRegion.Select

どなたか、ご教示願います。

質問者からの補足コメント

  • 早速のアドバイス、ありがとうございました。

    しかし、難しくて理解できません。
    先月のデータがA2:B500、今月のデータがD2:E600に入力されていた場合、
    このような構文になります。
    Selection.Consolidate Sources:=Array("[Book1]Sheet1!R2C1:R500C2", _
    "[Book1]Sheet1!R2C4:R600C5"), Function:=xlSum, TopRow:=True, _
    LeftColumn:=True, CreateLinks:=False

    このR1C1形式の構文をどのように記述すれば、行数が変動する値に追従できるのでしょうか。

    ご面倒ですが、再度ご教授のほど、よろしくお願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/10/16 01:18

A 回答 (2件)

ヘルプを見るとConsolidate メソッドの引数は次のように書かれています。



「R1C1 形式の文字列を指定します。指定するセル参照には、必ず統合するシートのパスを含めます。」

要するにRangeをそのまま渡すのではなく、文字列にして渡す必要がありそうです。
Address プロパティを使うと良いでしょう。
この回答への補足あり
    • good
    • 1
この回答へのお礼

早速のアドバイス、ありがとうございました。
もっと勉強し、スキルアップに努めます。

お礼日時:2017/10/16 23:01

統合(Consolidate)機能というのは、MS-DOS時代に残していた機能をそのまま受け継いだので、R1C1 形式だけでしか受け付けません。

「統合」は、今となっては古い名残を残したままになっています。メリットは、別のブックにあっても、ブックを開かなくてもよい点でしょう。(記憶違いかもしれませんが)
しかし、これは、左1列目だけで、その次の項目が抜け落ちるのが欠点ですね。今回は、2列しかありませんから、問題はありませんが。

>先月のデータがA2:B500、今月のデータがD2:E600に入力されていた場合、
1行目は使わないのかな?

Sub ConsolidateMethod()
 Dim a As Range
 Dim b As String
 Dim c As String
 
 With Worksheets("Sheet1")
  b = .Range("A2", .Cells(Rows.Count, 1).End(xlUp).Offset(, 1)) _
  .Address(1, 1, xlR1C1, True)
  c = .Range("D2", .Cells(Rows.Count, "D").End(xlUp).Offset(, 1)) _
  .Address(1, 1, xlR1C1, True)
 End With
 '貼り付け先(直接でもよいです。a,b,c と変数をしたので、単にこう書いたまで)
 Set a = Worksheets("Sheet3").Range("A1")
 a.Consolidate Sources:= _
   Array(b, c), _
   Function:=xlSum, _
   TopRow:=True, _
   LeftColumn:=True
End Sub

ちなみに、
>この質問は特に50代・男性の方
は、ご質問者の年齢層?なら、良く知っている機能なのかもしれませんね。
VBAマクロですと、実際は、CountIf関数などで作ってしまうことが多いです。
    • good
    • 2
この回答へのお礼

ご親切なアドバイス、ありがとうございました。
教えていただいた構文で、無事に解決しました。
これを基に、VBAの技に磨きをかけていきます。

お礼日時:2017/10/16 23:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!