• 締切済み

マクロでCOUNTIFを使いたい(続)

マクロでCOUNTIFを使いたい(続) Excel2003を使用しています。 【転記元】B列の値が【転記先】A列には何回出てくるのか?を転記先C列に書き出す作業を しております。 【転記元】H列は空白・数値が入力されています。 【転記先】C列には【転記元】のH列が「0以上で"計"を含まない」件数をカウントさせたい のですが、現状のコードだと正確な数値が入りません。(2のところが5だったりとか) お解りの方がいらっしゃればどうぞご指摘ください。 宜しくお願いします。 ------------------------------------------------------------ 【転記元】  B列 … H列  あ    50  あ    20  計    70 ------------------------  い    ※空白  い    0  計    0 ------------------------  う    0  計    0 ------------------------  え    20  え    ※空白  計    20 ------------------------  お    10  お    20  計    30 ------------------------ 【転記先】  A列  B列  C列 ←★このC列に結果を表示させたい  あ      2  え      1  お      2 ------------------------------------------------------------ Sub テスト() Dim ent As Worksheet, mst As Worksheet Dim i As Integer, j As Integer, mstsh As Integer Dim lstcel As String Dim mstRge As Range Dim sach As Variant Set ent = Workbooks("転記先").ActiveSheet Set mst = Workbooks("転記元").ActiveSheet Set mstRge = mst.Range("B5:H2000") ent.Activate ent.Range("C2:C1000").ClearContents lstcel = mst.Cells(Rows.Count, "B").End(xlUp).Row For i = 1 To lstcel sach = ent.Cells(i + 1, "A") If mst.Cells(i + 5, "H") > 0 And mst.Cells(i + 5, "H") <> "計" Then ent.Cells(i + 1, "C").Value = Application.WorksheetFunction.CountIf(mstRge, sach) End If Next i End Sub

みんなの回答

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

既にANo.2の方から指摘のあった様に、ここで使うならCOUNTIFではなく、SUMPRODUCTです。 しかし、Application.WorksheetFunctionでは、SUMPRODUCT関数に複雑なパラメータを渡せませんのでEvaluate を使って見ました。 動作未検証ですが多分動くでしょう。 コードを以下の様に変更して見てください If mst.Cells(i + 5, "H") > 0 And mst.Cells(i + 5, "H") <> "計" Then ent.Cells(i + 1, "C").Value = Application.WorksheetFunction.CountIf(mstRge, sach) End If ↓ ent.Cells(i + 1, "C").Value = Evaluate("SUMPRODUCT((B5:B2000=""" & sach & """)*(H5:H2000>=0)*ISNUMBER(H5:H2000))")

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

前回、解決しているようですが、何か見えてこないのですが。 CountIfを使う必要があるのでしょうか。関数を使うなら、=SUMPRODUCT((B6:B200=I5)*(H6:H200>0)) このような配列数式を埋めこまなくてはなりません。 >【転記元】シートの値が5行目から始まるので(1行目から4行目は空欄の為)" i + 5"としました。 i+5 ということは、データは6から始まっているということでしょうか。以下、そのようにして作られています。 '// Sub SampleTest()  Dim ent As Worksheet, mst As Worksheet  Dim i As Long, j As Long, lstCel As Long, cnt As Long  Dim srchRng As Range  Dim buf As String    Set ent = Workbooks("転記先").ActiveSheet  Set mst = Workbooks("転記元").ActiveSheet    With ent   .Range("A2", .Cells(Rows.Count, 3).End(xlUp)).ClearContents  End With    With mst   'B列の最後を探す   lstCel = .Cells(Rows.Count, 2).End(xlUp).Row   j = 2 '転記先の書き出し最初の行   Application.ScreenUpdating = False   'データの検索の最初の行は、6行目   For i = 6 To lstCel    If Not .Cells(i, 2).Value Like "*計*" And Cells(i, 8).Value > 0 Then     If buf = "" Then      buf = .Cells(i, 2).Value '名称確保     End If     cnt = cnt + 1 'カウント    ElseIf .Cells(i, 2).Value Like "*計*" Then     ent.Cells(j, 1).Value = buf     ent.Cells(j, 3).Value = cnt     cnt = 0     buf = ""     j = j + 1    End If   Next i  End With  Application.ScreenUpdating = True End Sub

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.1

> If mst.Cells(i + 5, "H") > 0 And mst.Cells(i + 5, "H") <> "計" Then この i + 5 は、何を意味していますか?

quia_10
質問者

補足

お返事ありがとうございます。 【転記元】シートの値が5行目から始まるので(1行目から4行目は空欄の為)" i + 5"としました。

関連するQ&A

専門家に質問してみよう