Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4223 / 13646 ツリー ←次へ | 前へ→

【57819】配列変数を使用したカウントアップ さえ 08/9/15(月) 9:02 質問[未読]
【57820】Re:配列変数を使用したカウントアップ りん 08/9/15(月) 9:05 発言[未読]
【57821】Re:配列変数を使用したカウントアップ さえ 08/9/15(月) 9:16 お礼[未読]

【57819】配列変数を使用したカウントアップ
質問  さえ  - 08/9/15(月) 9:02 -

引用なし
パスワード
   シート1のデータ5件分をジャンル別に登録している基準となるデータシート2と比較して、ジャンルの何番に該当するか、件数を数えようとしています。又、その結果を別のシート3に出力しようとしています。
以下にコードを乗せてありますが、エラーこそでませんが、カウント件数がすべて0件になってしまいます。私的にミスなく組んだつもりなだけに、原因がまったく掴めていません。一読して、致命的なミスに気づかれる方がいましたら助言をどうかよろしくお願いします。 
///////////例////////////////
シート1
aaa
aaa
bbb
ccc
シート2
1  2  3
aaa bbb ddd
シート3
1 2(件数)
2 1
3 0
/////////////////////////////////

この場合、シート1のaaaと言うデータはシート2にのaaaのデータにヒットするので、シート3の出力結果に1の項目が2件と表示され、同様に、bbbは1件,cccは0件と表示される用にしています。上記の例をプログラムで作った物が以下になります。

Sub ジャンルの統計出力()
Dim myCell2 As Range
Dim jan As Long
Dim jan2 As Long
Dim mymaxrow3 As Long
Dim ZAN(1 To 3) As Long
Dim i As Long

Set myCell2 = Sheets("1").Range("A1:A8")
For a = 1 To 4 '読み込ます対象は4件

For jan = 1 To 3 'ジャンルは3種類
 
Sheets("2").Activate
Worksheets("2").Range("A1").Select
mymaxrow3 = Sheets("2").Cells(500, jan).End(xlUp).Row
  
For jan2 = 1 To mymaxrow3 '
 
If Sheets("2").Cells(jan2, jan).Value = myCell2.Cells(a, 1).Value Then
ZAN(jan) = ZAN(jan) + 1 'ここで件数をカウントアップ
Exit For
End If
Exit For
Next jan2
Next jan
Next a

Sheets("3").Activate
Sheets("3").Range("A1").Select
For i = 1 To 3 'ここでシート3に出力する。
Sheets("3").Cells(i, 1).Value = ZAN(i)
ZAN(i) = 0
Next i
End Sub

【57820】Re:配列変数を使用したカウントアップ
発言  りん E-MAIL  - 08/9/15(月) 9:05 -

引用なし
パスワード
   さえ さん、おはようございます。

>一読して、致命的なミスに気づかれる方がいましたら助言をどうかよろしくお願いします。 

ざっと見た感じだと、下の↓#↓のところがおかしいですね(いらないActivateとかは省いてあります)。

Sub ジャンルの統計出力()
  Dim myCell2 As Range
  Dim jan As Long, jan2 As Long, mymaxrow3 As Long, i As Long, a As Long
  Dim ZAN(1 To 30) As Long
  '
  Set myCell2 = Sheets("1").Range("E9:E58")
  '
  For a = 1 To 50 '読み込ます対象は50件
   For jan = 1 To 30 'ジャンルは30種類
     mymaxrow3 = Sheets("2").Cells(500, jan).End(xlUp).Row
     For jan2 = 1 To mymaxrow3 '
      If Sheets("2").Cells(jan2, jan).Value = myCell2.Cells(a, 1).Value Then
        ZAN(jan) = ZAN(jan) + 1 'ここで件数をカウントアップ
        Exit For
      End If
      '↓1↓ 上の条件と合致しなくてもここを通った時点で脱出しています
      Exit For
     Next jan2
   Next jan
  Next a
  '
  Sheets("3").Activate
  For i = 1 To 30 'ここでシート3に出力する。
   '↓2↓ シート2に書き出してます。
   Sheets("2").Cells(i, 1).Value = ZAN(i)
  ZAN(i) = 0
  Next i
End Sub

とりあえず、
 ↓1↓ → 下のExit Forが不要
 ↓2↓ → Sheets("3")に変更
でしょうか。

【57821】Re:配列変数を使用したカウントアップ
お礼  さえ  - 08/9/15(月) 9:16 -

引用なし
パスワード
   りんさん、回答ありがとうございます。
プログラム変更して、実行したらばっちりできました。
シート3が2になってたのは書きミスで修正していたのですが、
exit forのミスには全然気づけませんでした。
これで、なんとか目的の物が作れそうです。どうも朝早くからありがとうございました。

4223 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free