ここで質問させていただき、配列に必要なデータを入力する所までは出来ました。
次に各行ごとの"OK"の数をカウントしたいのですが、どのように記述すればよいのでしょうか?
Sub count0(a, b, c, d, e)
Dim i1 As Long
Dim i2 As Long
Dim A1 As String
Dim bb As Variant
Dim cc As Variant
Dim dd As Variant
Dim ee As Variant
Dim myLastRow As Long
Sheets(a).Select
myLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
bb = Range(b).Resize(myLastRow, 6)
cc = Range(c).Resize(myLastRow, 6)
dd = Range(d).Resize(myLastRow, 6)
ee = Range(e).Resize(myLastRow)
For i1 = 1 To myLastRow
For i2 = 1 To 6
If bb(i1, i2) = "" Then
A1 = "NG"
ElseIf bb(i1, i2) = "A1" Or cc(i1, i2) = "A1" Then
A1 = "-"
ElseIf bb(i1, i2) = cc(i1, i2) Then
A1 = "OK"
Else
A1 = "NG"
End If
dd(i1, i2) = A1
Next i2
'配列をカウントするこの行以降の記述が良く分かりません。
ee(i1) = Application.WorksheetFunction.CountIf(dd(), "OK")
Next i1
Range(e).Resize(myLastRow) = ee
End Sub
No.3ベストアンサー
- 回答日時:
質問のコードをもとに作りました。
Sub count0(a, b, c, d, e)
Dim i1 As Long
Dim i2 As Long
Dim A1 As String
Dim bb As Variant
Dim cc As Variant
Dim dd As Variant
Dim ee As Variant
Dim myLastRow As Long
Dim ctOK As Long
Sheets(a).Select
myLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
bb = Range(b).Resize(myLastRow, 6)
cc = Range(c).Resize(myLastRow, 6)
dd = Range(d).Resize(myLastRow, 6)
ee = Range(e).Resize(myLastRow)
For i1 = 1 To myLastRow
ctOK = 0
For i2 = 1 To 6
If bb(i1, i2) = "" Then
A1 = "NG"
ElseIf bb(i1, i2) = "A1" Or cc(i1, i2) = "A1" Then
A1 = "-"
ElseIf bb(i1, i2) = cc(i1, i2) Then
A1 = "OK"
ctOK = ctOK + 1
Else
A1 = "NG"
End If
dd(i1, i2) = A1
Next i2
ee(i1, 1) = ctOK
Next i1
Range(d).Resize(myLastRow, 6) = dd
Range(e).Resize(myLastRow) = ee
End Sub
余談ですが、違和感を感じる点を挙げておきます。
1) 最終行という名の変数名に、最終行番号に1を加えた値が代入されている。
2)セルに出現するA1という文字列と同じ名前の変数名A1を使っている。
No.2
- 回答日時:
ん?
セルに書き込む・セルから読み出すのを避けたくて配列を使っているのではないのですか?
あなたが既に書かれたマクロのように
例:
For i1 = 1 To myLastRow
For i2 = 1 To 6
If dd(i1, i2) = "OK" Then
Ans = Ans + 1
のようにして,逐一セルを読んだり書いたりをしないで,メモリの中に格納した配列の値の計算だけで高速化を図っているのがあなたが今やっていることです。
>ド素人が
どういうのがご希望なんでしょうか。
こちらの掲示板などは「素人です」を前面に免罪符にして実は丸投げ依頼をしてもあんまり怒る人はいないみたいですが,他の掲示板なんかでは,ぼこぼこに叩かれちゃう所も少なくありませんね。
自分に説明力が無くて何でもかんでも貰うばっかりでまかり通るにしても,「VBE画面の開き方」「標準モジュールを挿入します」から教えて貰わないと何も出来ないでは話しも前に進みませんし,それだけサンプルマクロを動かしておいて今さらド素人を自称してもナニ甘えてるんですかみたいにスルーされるのがオチかなといった印象を持たれる方が多いんじゃないでしょうか。
でも大概の場合において,
1.プログラムで判らない言葉が出てきたら,F1キーを押したりオブジェクトブラウザで調べてVBAのヘルプを読む
2.新しいマクロの記録で記録させたマクロを読む
3.書いたプログラムをデバッグできる手順を教わっておく
の三点は,どこのサイトで勉強するにも出来てて当たり前,出来てない人は素人の入口にも立ってないと見なされます。
ありがとうございました。
サンプルで頂いた内容でクリアできました。
ご気分を害し申し訳ありません。
関数は使えたので、なんとなくサンプルコードは読めましたが、
様々なサイトを拝見しても、VBAの概念が今ひとつ理解できませんでした。
もし基本的な概念を分かりやすいサイトがあればご紹介頂きたかったのです。
No.1
- 回答日時:
そこに配列を入れることはできません。
Countifを利用するなら,セル範囲(たとえばdd)のセルに直接A1等を記入し,
application.countif(range(d).resize( ),"OK")
などのようになります。
メモリの中でfor nextをもう一回2重回しして,配列ddの要素を逐一"OK"と等しいか調べても勿論数えられます。
もっと言うなら,現在の二重のfor nextループの中でOKの回数を数え上げていった方が簡単そうにも思われます。
この回答への補足
早速のご回答ありがとうございます。
>メモリの中でfor nextをもう一回2重回しして,配列ddの要素を逐一"OK"と等しいか調べても勿論数えられます。
何から何までで恐縮ですが、メモリの中で数え上げるにはどのようにしたら良いのでしょうか?
また、ど素人が参考にすると良いサイトなどももしあればご紹介頂けないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
エクセルでXY座標に並べられた...
-
配列の中の最大値とそのインデ...
-
複数のtextboxの処理を一括で行...
-
グラフの「項目軸ラベルに使用...
-
配列のペースト出力結果の書式...
-
VBA Dowhile 判断条件に動的配...
-
VB6のメモリ解放に関して
-
Excel2010のinputboxで複数デー...
-
VB6からの移行したいけど、VB.N...
-
構造体配列の特定のメンバーをF...
-
C#でbyte配列から画像を表示さ...
-
Excelのメモリ(配列)の上限は2G...
-
vba フィルター 複数条件 3つ以...
-
pictureboxの名前を変数で設定...
-
COBOLの基本的な事なので...
-
VBScriptでCSVファイルを読み出...
-
VBAで配列引数を値渡しできない...
-
VBScript で ADO Streamオブジ...
-
Redim とEraseの違いは?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
vba フィルター 複数条件 3つ以...
-
エクセルでXY座標に並べられた...
-
Dir関数で読み取り順を操作でき...
-
Excel2010のinputboxで複数デー...
-
構造体配列の特定のメンバーをF...
-
Redim とEraseの違いは?
-
配列のペースト出力結果の書式...
-
COBOLの基本的な事なので...
-
大量の変数を定義するにはどう...
-
DBから取得した値を配列へ代入する
-
EXCEL VBAの課題です
-
VBScriptでCSVファイルを読み出...
-
VBAでMODE関数をつくる
-
配列の中の最大値とそのインデ...
-
定数配列の書き方
-
構造体配列内の文字列検索のよ...
-
CheckBoxの配列化
-
Excelのメモリ(配列)の上限は2G...
おすすめ情報