2012-10-12 11 views
8
x = 0 
For Each cell in Sheets("01").Range("A:A").Cells 
If cell.Value = "aaa" And cell.Offset(0, 1).Value = "bbb" Then 
x = x+1 
End If 
Next cell 
MsgBox x 

短い方法がありますか?複数の列をカウントするには?

+0

[複数のOR条件でCOUNTIF]の可能複製この

Dim ws As Worksheet Dim rDat As String Dim rSec As String Set ws = ActiveWorkbook.Worksheets("ct") rDat = "ct!A:A" rSec = "ct!B:B" ws.Range("C6").Value = Evaluate("=COUNTIFS(" & rDat & " ,""a""," & rSec & ",""1"")") 

を使用(http://stackoverflow.com/questions/8726627/countif-with-multiple-or-criteria) – brettdj

答えて

23

あなたがしなければならない場合、この

(エクセル2007以降)

=COUNTIFS(A:A,"aaa",B:B,"bbb") 

(エクセル2003以前)

=SUMPRODUCT(--(A:A="aaa")*--(B:B="bbb")) 

あるいは、同様に、式でこれを行うことができますVBAで行います。Evaluate

MsgBox Evaluate("=COUNTIFS(A:A,""aaa"",B:B,""bbb"")") 

MsgBox Evaluate("=SUMPRODUCT(--(A:A=""aaa"")*--(B:B=""bbb""))") 

rDatrSecRange年代であり、ctctがシートの場合、シートCodeNameこの

Dim rDat As Range 
Dim rSec As Range 
Set rDat = ct.[A:A] 
Set rSec = ct.[B:B] 
ct.Range("C6").Value = Evaluate("=COUNTIFS(" & rDat.Address(, , , True) & " ,""a""," & rSec.Address(, , , True) & ",""1"")") 

のようにそれを行う場合には、あなたのコメント

に基づくEDITName、これを使用

Dim ws As Worksheet 
Dim rDat As Range 
Dim rSec As Range 
Set ws = ActiveWorkbook.Worksheets("ct") 
Set rDat = ws.[A:A] 
Set rSec = ws.[B:B] 
ws.Range("C6").Value = Evaluate("=COUNTIFS(" & rDat.Address(, , , True) & " ,""a""," & rSec.Address(, , , True) & ",""1"")") 

rDatrSecが文字列である場合には、(rDatため、範囲などrSec)別のオプション

ct.Range("C6").Value = Application.WorksheetFunction.CountIfs(rDat, "a", rSec, "1") 
+0

Chris、私は試しました値=評価( "= COUNTIFS(rDat、" "a" "、rSec、" 1 "") ")' #NAMEエラーが発生しました。 ctはシート、rDatとrSecは定義された範囲です。 Excel 2010 – Alegro

+0

ありがとうございました。解決された – Alegro

+2

SUMPRODUCTがGoogleスプレッドシートで動作しないことがあまりにも悪いです。 –

関連する問題