• ベストアンサー

マクロ  関数式の中にRangeでセルを参照するには

Range("B2").Formula = "=COUNTIF($A$2:$A$100,A2)" A行のセル(1列はタイトルなのでA2以降) に入力させているものが A行自身の中に何個あるかを数えて B2以降に表示させたいのですが A列の最終行を取得して(下の式で) ↑の式の$A$100の部分に どのように記述したらよろしいでしょうか? もしくは 考える方向がおかしい、というような 御指摘もありましたらお願いします (B列には現時点では式のまま表示しても  問題ありません。  B列の式を下方向へコピーする方法は  以前こちらで御教授していただきました) Dim mRng As Range Set mRng = Range("A2", Range("A65536").End(xlUp))

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

エクセルVBAで関数を使うには (1)Range("B2").Formula ="=関数"を使う (2)WorksheetFunctionを使う (3)繰り返しのロジックを使う(関数を使うに該当しませんが) (2)は Sub test01() d = Range("A65536").End(xlUp).Row MsgBox d Cells(2, "B") = WorksheetFunction.CountIf(Range(Cells(2, "A"), Cells(d, "A")), Cells(1, "A")) End Sub (1)は Sub test02() d = Range("A65536").End(xlUp).Row MsgBox d x = "A" & d s = "=CountIf(A2:" & x & ",A1)" MsgBox s Cells(2, "B").Formula = s End Sub なんてのも出来ます。 (3)は Sub test03() d = Range("A65536").End(xlUp).Row MsgBox d c = 0 For i = 2 To d If Cells(i, "A") = Cells(1, "A") Then c = c + 1 End If Next i Cells(2, "B") = c End Sub のようなものです。

ennkai
質問者

お礼

遅くなって申し訳ありません 様々な角度からの回答ありがとうございます 同じ結果を出すにも いろいろ方法があるのですね まだ使い分けるまでいたりませんが 地道に勉強したいです

その他の回答 (2)

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.3

Range("B2").Formula = "=COUNTIF($A$2:" & Range("A65536").End(xlUp).Address & ",A2)" で如何でしょうか。  A列のデータがある最終行まで、B列に計算式を設定するのであれば、 Dim Rng As Range For Each Rng In Range("A2", Range("A65536").End(xlUp))   Rng.Offset(, 1).Formula = "=COUNTIF($A$2:" & _   Range("A65536").End(xlUp).Address & "," & Rng.Address(False, False) & ")" Next Rng たぶん、このようなことだと思いますが、違っていたらごめんなさい。

ennkai
質問者

お礼

遅くなって申し訳ないです 式のほかに式コピーまで記入していただいて ありがとうございました。 しかし、addressとrangeの 使い分けというか微妙な記述の違いって 難しそうですね^^ ありがとうございました

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.1

Range("B2").Formula = "=COUNTIF($A$2:$A$" & Range("A65536").End(xlUp).Row & ",A2)" で出来ませんか?

ennkai
質問者

お礼

遅くなって申し訳ないです 無事できました ありがとうございました!

関連するQ&A