Excel VBA初心者です。
以下のVBAを簡略化したいのですがどうすればいいでしょうか?
Sub Macro1()
Dim cnt As Long, cnt2 As Long, cnt3 As Long, cnt4 As Long, cnt5 As Long, cnt6 As Long, cnt7 As Long, cnt8 As Long, cnt9 As Long, cnt10 As Long, cnt11 As Long, cnt12 As Long, cnt13 As Long, cnt14 As Long, cnt15 As Long, cnt16 As Long, cnt17 As Long, cnt18 As Long, cnt19 As Long, cnt20 As Long, cnt21 As Long
cnt = Evaluate("SUMPRODUCT(((F:F)=I9)*((G:G)=H10))")
cnt2 = Evaluate("SUMPRODUCT(((F:F)=J9)*((G:G)=H10))")
cnt3 = Evaluate("SUMPRODUCT(((F:F)=K9)*((G:G)=H10))")
cnt4 = Evaluate("SUMPRODUCT(((F:F)=L9)*((G:G)=H10))")
cnt5 = Evaluate("SUMPRODUCT(((F:F)=M9)*((G:G)=H10))")
cnt6 = Evaluate("SUMPRODUCT(((F:F)=N9)*((G:G)=H10))")
cnt7 = Evaluate("SUMPRODUCT(((F:F)=O9)*((G:G)=H10))")
cnt8 = Evaluate("SUMPRODUCT(((F:F)=P9)*((G:G)=H10))")
cnt9 = Evaluate("SUMPRODUCT(((F:F)=Q9)*((G:G)=H10))")
cnt10 = Evaluate("SUMPRODUCT(((F:F)=R9)*((G:G)=H10))")
cnt11 = Evaluate("SUMPRODUCT(((F:F)=S9)*((G:G)=H10))")
cnt12 = Evaluate("SUMPRODUCT(((F:F)=T9)*((G:G)=H10))")
cnt13 = Evaluate("SUMPRODUCT(((F:F)=U9)*((G:G)=H10))")
cnt14 = Evaluate("SUMPRODUCT(((F:F)=V9)*((G:G)=H10))")
cnt15 = Evaluate("SUMPRODUCT(((F:F)=W9)*((G:G)=H10))")
cnt16 = Evaluate("SUMPRODUCT(((F:F)=X9)*((G:G)=H10))")
cnt17 = Evaluate("SUMPRODUCT(((F:F)=Y9)*((G:G)=H10))")
cnt18 = Evaluate("SUMPRODUCT(((F:F)=Z9)*((G:G)=H10))")
cnt19 = Evaluate("SUMPRODUCT(((F:F)=AA9)*((G:G)=H10))")
cnt20 = Evaluate("SUMPRODUCT(((F:F)=AB9)*((G:G)=H10))")
cnt21 = Evaluate("SUMPRODUCT(((F:F)=AC9)*((G:G)=H10))")
Range("I10").Value = cnt
Range("J10").Value = cnt2
Range("K10").Value = cnt3
Range("L10").Value = cnt4
Range("M10").Value = cnt5
Range("N10").Value = cnt6
Range("O10").Value = cnt7
Range("P10").Value = cnt8
Range("Q10").Value = cnt9
Range("R10").Value = cnt10
Range("S10").Value = cnt11
Range("T10").Value = cnt12
Range("U10").Value = cnt13
Range("V10").Value = cnt14
Range("W10").Value = cnt15
Range("X10").Value = cnt16
Range("Y10").Value = cnt17
Range("Z10").Value = cnt18
Range("AA10").Value = cnt19
Range("AB10").Value = cnt20
Range("AC10").Value = cnt21
End Sub
かなりの初心者ですのであまり難しくないように回答頂ければ助かります。
現状で動かすとかなり処理が遅いので困ってます。
No.1ベストアンサー
- 回答日時:
こんばんは!
SUMPRODUCT関数は配列数式ですので、列全体を参照範囲としてしまうと
PCにとってはかなりの負担になります。
お使いのバージョンが不明なのですが、Excel2007以降のバージョンですと
COUNTIFS関数が使用できます。
すなわちI10セルに
=COUNTIFS($F:$F,I9,$G:$G,$H10)
という数式を入れフィルハンドルでAC10セルまでコピー!
これで大丈夫だと思います。
どうしてもVBAでやりたい場合は
Sub Sample1()
With Range("I10:AC10")
.Formula = "=COUNTIFS($F:$F,I9,$G:$G,$H10)"
.Value = .Value
End With
End Sub
くらいで大丈夫だと思います。
いかにもVBAらしくやれば
Sub Sample2()
Dim j As Long
For j = 9 To 29 '//I列~AC列まで
Cells(10, j) = WorksheetFunction.CountIfs(Range("F:F"), Cells(9, j), Range("G:G"), Range("H10"))
Next j
End Sub
といった感じでですかね。m(_ _)m
ありがとうございました。
最終的には以下の内容でできました。
すごいですねCuntIfsって、この関数は知りませんでした。
実はWorksheetsFunction.SUMPRODUCT で頑張ってつくってましたが
うまくいかなかったんです。すごく助かりました。
Sub dekiagari1()
Dim i As Long, n As Long
For i = 9 To 29 '//I列~AC列まで
For n = 10 To 51 '//H10~H45行まで
Cells(n, i) = WorksheetFunction.CountIfs(Range("F:F"), Cells(9, i), Range("G:G"), Cells(n, 8))
Next n
Next i
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA初心者です。 2 2022/10/10 11:52
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Visual Basic(VBA) Dateserialで データ抽出 2 2022/06/26 21:07
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) 日付の計算方法 2 2022/07/01 23:35
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) VBA Bookの表示、非表示 1 2022/09/16 20:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MSXMLを使ってノードを削除した...
-
VB.NETで最後フォのフォ...
-
concat関数内でのシングルクォ...
-
XMLのエラーコードの意味が理解...
-
特殊記号が勝手にエスケープさ...
-
CPUの考え方を教えてください ...
-
eclipseへのxmlファイル追加
-
東芝のDynabookなのですがアン...
-
xmlファイルが上手にHTMLに変換...
-
XMLで要素が記述された順番に意...
-
昔Winnyってありましたけど、あ...
-
2分探索木の高さを求めるプロ...
-
XML、XSLTの適応エラー(IEから...
-
同じタグ名の項目取得
-
UTF-8でエンコーディングとはど...
-
VB6.0でDOMを使用して...
-
XMLファイル内のデータ(値)を変...
-
TreeViewについて
-
isnan・isnf関数が「識別子が見...
-
XMLで特殊文字を扱うにはどうし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
4バイトを10進数に変換する方法
-
VB.NETで最後フォのフォ...
-
concat関数内でのシングルクォ...
-
動的な構造体配列の初期化
-
VB2008EEのラジオボタンのチェ...
-
Form内関数のパラメタについて...
-
MSXMLを使ってノードを削除した...
-
Math.sqrt(Math.pow(canvas.wid...
-
ネットスーパーをやっているス...
-
東芝のDynabookなのですがアン...
-
CPUの考え方を教えてください ...
-
XMLで要素が記述された順番に意...
-
昔Winnyってありましたけど、あ...
-
バッチファイルでテキストファ...
-
XML、XSLTの適応エラー(IEから...
-
UTF-8でエンコーディングとはど...
-
SNMP リンクダウンとノードダ...
-
ルート要素ノードが2個ある場合?
-
XMLファイル内のデータ(値)を変...
-
xmlファイルが上手にHTMLに変換...
おすすめ情報