| 
    
     |  | ▼H=R さん: 
 配列内ループもメモリー内処理ですからけっして非効率ではないと思います。
 10000万行程度なら問題は全くないと思いますよ。
 あるいは、配列を作業シートに落とし込んで、作業シート上でCountIfを使う手もあります。
 
 変数定義は省略しますが以下の例では2次元配列名を v としています。
 
 (配列内ループ方式)
 
 Dim i As Long
 Dim j As Long
 Dim x As Long
 
 For j = LBound(v, 2) To UBound(v, 2)
 x = 0
 For i = LBound(v, 1) To UBound(v, 1)
 If v(i, j) = "ABC" Then x = x + 1
 Next
 MsgBox j & "列目:" & x
 Next
 
 (作業シート使用方式)
 
 Dim r As Range
 
 With Sheets("作業シート")
 .Cells.ClearContents
 .Range("A1").Resize(UBound(v, 1), UBound(v, 2)).Value = v
 For Each r In .Range("A1").CurrentRegion.Columns
 MsgBox r.Column & "列目:" & WorksheetFunction.CountIf(r, "ABC")
 Next
 End With
 
 |  |