すいません EXCEL VBAで教えていただきたいことがあります。
A列 B列
1行:野菜 秋物
2行:果物 秋物
3行:穀物 夏物
4行:野菜 夏物
5行:野菜 春物
6行:穀物 秋物
7行:果物 夏物
8行:野菜 秋物
・・・以下300行まで続く
というデータがあるとして、A列が「野菜」、B列が「秋物」に合致する
行の合計個数をカウントするのはどうしたらよろしいんでしょうか。
関数だとデータベース関数を使えば何とかできそうな感じなのですが
VBAだと、どうもいいアイデアが浮かびません。よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
300行程度だとどれでもそんなに大きい差(処理時間)はありませんでした。
'=========================================================
Sub 例1()
Dim c1 As String
Dim c2 As String
Dim ans As Long
c1 = "野菜": c2 = "秋物"
With Range("a1", Cells(Rows.Count, "a").End(xlUp)).Resize(, 2)
ans = Evaluate("sumproduct((" & .Columns(1).Address & "=""" & c1 & _
""")*(" & .Columns(2).Address & "=""" & c2 & """))")
MsgBox c1 & "で" & c2 & "の数は " & ans
End With
'私は、この手のことは、大抵これです
End Sub
'=========================================================
Sub 例2()
Dim c1 As String
Dim c2 As String
Dim ans As Long
ans = 0
c1 = "野菜": c2 = "秋物"
With Range("a1", Cells(Rows.Count, "a").End(xlUp)).Resize(, 2)
With .Columns(3)
.Formula = "=if(and(rc[-2]=""" & c1 & _
""",rc[-1]=""" & c2 & """),1,"""")"
If .Rows.Count = 1 And .Cells(1).Value = 1 Then
ans = 1
Else
On Error Resume Next
ans = .SpecialCells(xlCellTypeFormulas, xlNumbers).Count
End If
MsgBox c1 & "で" & c2 & "の数は " & ans
.ClearContents
End With
End With
End Sub
'============================================================
Sub 例3()
Dim c1 As String
Dim c2 As String
Dim crng As Range
Dim ans As Long
ans = 0
c1 = "野菜": c2 = "秋物"
For Each crng In Range("a1", Cells(Rows.Count, "a").End(xlUp))
With crng
If .Value = c1 And .Offset(0, 1).Value = c2 Then ans = ans + 1
End With
Next
MsgBox c1 & "で" & c2 & "の数は " & ans
End Sub
おおっ!できました!ありがとうございます!
こういうやり方があったのですか。
例1の
ans = Evaluate("sumproduct((" & .Columns(1).Address & "=""" & c1 & _
""")*(" & .Columns(2).Address & "=""" & c2 & """))")
のコードが自分ではどうしても作れませんでした。
作っていただいたコードは理解しないといつまで経っても実力が付かないので、とりあえず記載していただいた3つとも全部研究させていただきます。
またわからないことがありましたらよろしくお願いします。
No.3
- 回答日時:
この例題では関数で充分ですが、
VBA初心者で勉強中の方であると想定して敢えてVBAで。
VBAに慣れるまで簡単な命令を使いましょう。
Option Explicit
Private Sub hogehoge()
Dim ANS As Integer
Dim I As Integer
ANS = 0
For I = 1 To 500
If Range("A" & I) = "" Then Exit For
If Range("A" & I) = "野菜" And Range("B" & I) = "秋物" Then
ANS = ANS + 1
End If
Next I
MsgBox "答えは " & ANS
End Sub
'----------------------------------- ここまで
For I = 1 To 500 の500は、300行まで続くとあるので、いくら何でもここまでデータは無いだろう・・・の適当な数字です。
出来ました!ありがとうございます。
If Range("A" & I) = "野菜" And Range("B" & I) = "秋物" Then
ANS = ANS + 1
で出来るということを始めて知りました。
端からCountを使わないと出来ないだろうと決め付けた挙句に
結局暗礁に乗り上げてしまいました。
VBAは始めたばかりでわからないことだらけです。
またよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
切ったら梨の真ん中が茶色黒く...
-
切った梨の表面に、茶色い斑点...
-
梨の皮が黒く変色していました。
-
梨の豊水について。 頂き物の豊...
-
スーパーで買った1つ300円の梨...
-
7文字以上のフルーツをできるだ...
-
【果物・梨】20世紀梨と廿世紀...
-
梶井基次郎の檸檬
-
煮物こんにゃくの冷凍保存について
-
今白いちじくを食べようとして2...
-
プルーンの種
-
★南極みぞれバー★探してます
-
キウイが苦い。 先ほど、ゴール...
-
ライム(果物)を漢字になおす...
-
スポンジケーキってどのくらい...
-
スポーツ後の彼氏への差し入れ...
-
中黒「・」か読点「、」か?
-
果物の消費期限について
-
教えてください!!
-
国産ブルーベリーのほうがいい?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
7文字以上のフルーツをできるだ...
-
切ったら梨の真ん中が茶色黒く...
-
すいかは発酵しても食べられるか。
-
今白いちじくを食べようとして2...
-
梨の皮が黒く変色していました。
-
スーパーで買った1つ300円の梨...
-
梨の豊水について。 頂き物の豊...
-
スイカが炭酸の味!
-
こんなスイカは食べても大丈夫...
-
ラズベリーの種の抜き方を教え...
-
煮物こんにゃくの冷凍保存について
-
中黒「・」か読点「、」か?
-
【ぶどう】 友人からデラウェア...
-
切った梨の表面に、茶色い斑点...
-
ハーブソルトを代用できるもの...
-
スイカは腐るとどんな味がしま...
-
しわしわのぶどうの実をフッカ...
-
教えてください!!
-
国産ブルーベリーのほうがいい?
-
プルーンの種
おすすめ情報