アプリ版:「スタンプのみでお礼する」機能のリリースについて

マクロでCOUNTIFを使いたい

COUNTIFを使いたく、下記のマクロを作成しました。
【転記元】A列の値が【転記先】A列には何回出てくるのか?を転記先C列に書き出す作業を
したいのですが、提示したコードだと、★のC列全てに「1」が入ってしまいます。

ところが、★★の部分を下記のように書き替えると、正常にカウントされた値が入ります。
ent.Cells(i + 1, "C").Formula = Application.WorksheetFunction.CountIf(mst.Range("A2:A100"), ent.Cells(i + 1, "A"))

なぜこうなるのか?原因が知りたくて頭を悩ませております。
お解りの方がいらっしゃればどうぞご指摘ください。
宜しくお願い致します。

------------------------------------------------------------
【転記元のシート】
 A列
 10  
 10
 20
 20
 50

【転記先のシート】
 A列  B列  C列 ←★このC列に結果を表示させたい
 10      2
 20      2
 50      1

------------------------------------------------------------
Sub カウントテスト()

Dim ent As Worksheet, mst As Worksheet
Dim i As Integer
Dim lstcel As String
Dim mstrange As Range
Dim sach As Variant

Set ent = Workbooks("転記先").ActiveSheet
Set mst = Workbooks("転記元").ActiveSheet
Set mstrange = mst.Range("A2:A100")

i = 1

lstcel = mst.Cells(Rows.Count, "A").End(xlUp).Row
sach = ent.Cells(i + 1, "A")
For i = 1 To lstcel
If mst.Cells(i + 1, "A") <> "" Then
'↓★★ここの部分を書き替えるときちんとカウントされる
ent.Cells(i + 1, "C").Formula = Application.WorksheetFunction.CountIf(mstrange, sach)
End If
Next i

End Sub

A 回答 (1件)

ステップ実行でデバッグして見ましたか?


検索条件である変数 sachが For Nextのループの外にあるため、i=1の時の値、「10」から変化していません。検索条件が変化していませんからCOUNTIFの結果も当然同じになります。
sach = ent.Cells(i + 1, "A")
を、For i = 1 To lstcel の下に移動しましょう。

また、セルの.Formula に検索結果の値を入れていますが、値を入れる場合は.Valueです。その辺は間違えていてもExcelが上手い事やってくれていますが、予期せぬバグの原因にならないとも限りません。出来るだけ正しく使いましょう。
    • good
    • 0
この回答へのお礼

>ステップ実行でデバッグして見ましたか?
お恥ずかしい話ですが、何度もしました。そして、検索値が増えないのはなぜなのか?
全く解らずに困っていました。これじゃデバックしても意味が無いですね。
>セルの.Formula
ワークシート関数を使っているのでそうしたのですが、これも間違いでしたね(恥)
ご指摘を受けて間違いに気づくことが出来ました。この度は本当にありがとうございました。

お礼日時:2010/06/21 11:12

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