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

CountIf関数が使えなくて(構文エラーになる)困っています。ワークシートで試した時には、普通に動いていたのですが、、、、A列のデータに重複がないか調べるプログラムで、flag列というのがあって
ここに0が入っている行のデータのみ重複をチェックするようにする(途中)です。
矢印で書いた部分がおかしくて、なぜか構文エラーとなります。COUNTIF(A:A,A&i) という風に本当は使いたいのですが ":"で構文エラーになってしまいます。さんざん調べたのですが、私の力では解決できません。将来的にCOUNTIFのカウント数が1>でNGと表示させるつもりです。
よろしくお願いします。

'flagデータ数を配列に代入
For i = 1 To lRow
flag_column(i) = Cells(i + 1, flag_column_number).Value '各行の情報を配列に代入

Next i

'配列が0の行についてCOUNTIF関数を実行
For i = 1 To lRow
If flag_column(i) = 0 Then
j = COUNTIF(A1:A10, A & i)  <- ここ
Cells(i + 1, 6).Value = j
End If
Next i

A 回答 (3件)

こんばんわ



とりあえず、速報的な回答として、ワークシート関数をVBA上で使用する使い方が間違っている。


サンプルとしてこんな感じとか。
Sub ASD()
Dim rRange As Range
Dim j As Long
Set rRange = Worksheets("Sheet1").Range("A1:A10")
A = 1
j = Application.WorksheetFunction.CountIf(rRange, A & i)
MsgBox (j)
End Sub

ココとか
http://officetanaka.net/excel/vba/db/db02.htm

ココを参考にしてみて。
http://hinekure.vba-soft.com/?eid=484729

参考URL:http://hinekure.vba-soft.com/?eid=484729
    • good
    • 0
この回答へのお礼

回答ありがとうございます。勉強不足でした。ありがとうございます。

お礼日時:2012/01/01 08:16

標準モジュールに


Sub test01()
j = WorksheetFunction.CountIf(Range("a1:A10"), 1)
MsgBox j
End Sub
で正しく件数をカウントしましたよ。2007、2010でも変わりない。
(1)ワークシート関数をVBAで使う場合、前にWorksheetFunction.またはApplication.WorksheetFunction.をつける必要があること。
(2)VBAでは、セル範囲を示す引数は、シートの場合のA1:A10などはRange("A1:A10")としなければならない。
あるいはRange(Cells(・・),Cells(・・))
(3)VBAではそのままは使えない関数がある。(本質問の件の関数のことではないが)
これらはVBAでワークシートの関数を使うときの常識。
データ最下行が固定で無い場合は
Sub test02()
d = Range("a65536").End(xlUp).Row
'MsgBox d
j = WorksheetFunction.CountIf(Range("a1:A" & d), 1)
MsgBox j
End Sub
--
一般にエクセルのシートがメモリ的には配列的に考えられるので、データをさらに配列に入れることは必要が無いのでは?と
振り返ることが必要。
全般に少時間の勉強・経験で、ことをやろうとしている感じ。
まだまだ使うよりVBAやエクセルの智識輸入の時期だろう。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2012/01/01 08:16

そこにあるデータをなぜわざわざ配列に格納したいのか不明という回答:


sub macro1()
 dim c as long
 dim r as long
 dim i as long

 c = あなたのflag_column_number
 r = あなたのlRow

 for i = 1 to r
  if cells(i + 1, c) = 0 then
   cells(i + 1, 6) = application.countif(range("A1:A10"), cells(i, "A"))
  end if
 next i
end sub



アナタのヤリタイ流儀を最大限尊重した回答:
間違い:
j = COUNTIF(A1:A10, A & i)  <- ここ
正解:
j = application.worksheetfunction.countif(range("A1:A10"), range("A" & i).value)
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2012/01/01 08:16

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