- ベストアンサー
関数の中で参照するセル範囲の記述方法
- 関数を使用してセル範囲を参照する方法について詳しく解説します。
- セル範囲を指定する際に活用できる関数や方法をご紹介します。
- 具体的な例を交えながら、セル範囲の指定方法について説明します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
回答No1です。 直接にセルに式を入れるのでしたら単に次の式でもよいですね。 =SUMIF(B5:B100,B5,C5:C100))) マクロの場合でもB列の最終行を求めて式にする必要もありませんので例えば次のようにしてもよいですね。 ActiveCell.Formula = "=SUMIF(B5:B100,B5,C5:C100)))"
その他の回答 (3)
- keithin
- ベストアンサー率66% (5278/7941)
マクロについてのご質問ですから,マクロについて回答します。 今回はマクロで「書かせたい数式文字列」を作文して,formulaにセットします。 もっともあなたがご相談に書いた >=SUMIF(セル範囲(1),B5,セル範囲(2)) ・セル範囲(1)にはB5:C列の最終データまで ←これはただの誤記だとしても ・セル範囲(2)にはC5:C列の最終データまで では,B5セルがダブって範囲に含まれてしまうので「正しい数式」では無いと判断でき,適切な回答は出来ません。 たとえばいまB列の最下行がB10で,C列の最下行が(B列と変わるのも変なお話に見えますが)仮にC20だとすると,「実際に書かせたい数式」は =SUM(B5:B10,B5,C5:C20) となります。ここでB10の「10」の文字と,C20の「20」の文字だけが,マクロを実行した時点で書き換えなきゃならない部分です。 sub macro1() dim LastRowB as long dim LastRowC as long lastrowB = range("B65536").end(xlup).row lastrowC = range("C65536").end(xlup).row range("J5").formula = "=SUM(B5:B" & lastrowB & ",B5,C5:C" & lastrowC & ")" end sub といった具合です。 formulaに入れる代わりに msgbox "=SUM(B5:B" & lastrowB & ",B5,C5:C" & lastrowC & ")" とでも書いて,「欲しい数式の文字列」が間違い無く作成できているか確認してから,実地に行ってみると良いでしょう。
お礼
とても丁寧で分かり易くご説明頂きありがとうございます。 教えて頂いた構文は今後もかなり役に立ちそうです。 大変勉強になりました。
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
マクロというより、数式ですが Sub Macro2() ActiveCell.FormulaR1C1 = _ "=SUMIF(R5C2:INDEX(R5C2:R10000C2,COUNT(R5C3:R10000C3))," & _ "R5C2,R5C3:INDEX(C3,COUNT(R5C3:R10000C3)))" End Sub Sub Macro3() Dim 最終行 As Long 最終行 = Range("b5").End(xlDown).Row ActiveCell.FormulaR1C1 = _ "=SUMIF(R5C2:R" & 最終行 & "C2,R5C2,R5C3:R" & 最終行 & "C3)" End Sub > =SUMIF(セル範囲(1),B5,セル範囲(2)) は相対参照が含まれているので、どのセルに入力するかで変化します。 上記マクロは絶対参照として回避しましたが、質問時にどのセルに入力するかも書くようにしてください。
お礼
ありがとうございます。 とても参考になりました。
- KURUMITO
- ベストアンサー率42% (1835/4283)
Formulaでセルに式を入力する場合にはマクロを使わなくても計算できる形の式でなければいけませんね。Cells.Rangeなど式に入れることはできません。 どうしてマクロを使って式を入れようとしているのかが分かりません。 マクロを使った計算ならばセルに式を入力するのではなく直接に計算すればよいのでたとえば次のように記述すればよいでしょう。 n = Range("B5").End(xlDown).Row Range("J5") = WorksheetFunction.SumIf(Range(Cells(5, "B"), Cells(n, "B")), Range("B5"), Range(Cells(5, "C"), Cells(n, "C"))) ただ単にマクロを使わない式でしたらJ5セルには例えば次の式を入力すればよいでしょう。 =SUMIF(B5:INDIRECT("B"&5+COUNTIF(B5:B100,"<>")),B5,C5:INDIRECT("C"&5+COUNTIF(C5:C100,"<>"))) この場合にはB5セルからB100までの間にデータがある場合です。B1000としてもよいでしょう。
お礼
ありがとうございます! これで解決してしまいました。 最初のご回答もとても勉強になりました。