• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:関数の中で参照するセル範囲(変動する)の記述方法)

関数の中で参照するセル範囲の記述方法

このQ&Aのポイント
  • 関数を使用してセル範囲を参照する方法について詳しく解説します。
  • セル範囲を指定する際に活用できる関数や方法をご紹介します。
  • 具体的な例を交えながら、セル範囲の指定方法について説明します。

質問者が選んだベストアンサー

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

回答No1です。 直接にセルに式を入れるのでしたら単に次の式でもよいですね。 =SUMIF(B5:B100,B5,C5:C100))) マクロの場合でもB列の最終行を求めて式にする必要もありませんので例えば次のようにしてもよいですね。 ActiveCell.Formula = "=SUMIF(B5:B100,B5,C5:C100)))"

nonam3800
質問者

お礼

ありがとうございます! これで解決してしまいました。 最初のご回答もとても勉強になりました。

その他の回答 (3)

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

マクロについてのご質問ですから,マクロについて回答します。 今回はマクロで「書かせたい数式文字列」を作文して,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 & ")" とでも書いて,「欲しい数式の文字列」が間違い無く作成できているか確認してから,実地に行ってみると良いでしょう。

nonam3800
質問者

お礼

とても丁寧で分かり易くご説明頂きありがとうございます。 教えて頂いた構文は今後もかなり役に立ちそうです。 大変勉強になりました。

回答No.3

マクロというより、数式ですが 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)) は相対参照が含まれているので、どのセルに入力するかで変化します。 上記マクロは絶対参照として回避しましたが、質問時にどのセルに入力するかも書くようにしてください。

nonam3800
質問者

お礼

ありがとうございます。 とても参考になりました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

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としてもよいでしょう。

関連するQ&A