- 締切済み
マクロで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
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- mt2008
- ベストアンサー率52% (885/1701)
既に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)
前回、解決しているようですが、何か見えてこないのですが。 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)
> If mst.Cells(i + 5, "H") > 0 And mst.Cells(i + 5, "H") <> "計" Then この i + 5 は、何を意味していますか?
補足
お返事ありがとうございます。 【転記元】シートの値が5行目から始まるので(1行目から4行目は空欄の為)" i + 5"としました。