下記の時間割表があります。 A列 日付 B列 曜日 C列 学年 D列 1時限目 E列 授業回数 F列 2時限目 G列 授業回数 H列 3時限目 I列 授業回数 J列 4時限目
下記の時間割表があります。 A列 日付 B列 曜日 C列 学年 D列 1時限目 E列 授業回数 F列 2時限目 G列 授業回数 H列 3時限目 I列 授業回数 J列 4時限目 K列 授業回数 L列 5時限目 M列 授業回数 条件設定シートには、A列に科目、B列に学年の列があります。ボタンを押すと、条件設定に入力した条件をもとに、時間割シートにセルを見つけ、授業回数にカウントした数字を自動入力します。しかし科目が縦に異なっていれば、授業回数はうまくいくのですが、同じ科目が横にならぶとカウントが飛ばされてしまいます。match関数を行ごとに検索して一致したら、次の行に飛んでしまうのですが、原因なのですが、なにかよい方法はないでしょうか。うまくいかないコードが下記のコードになります。よろしくお願いいたします。 Sub 授業回数計算() grow = Worksheets("条件設定").Shapes(Application.Caller).TopLeftCell.Row 'ボタン位置の行 kamoku = Worksheets("条件設定").Range("A" & grow).Value gakunen = Worksheets("条件設定").Range("B" & grow).Value Sheet2.Activate hrow = Sheet2.Cells(Rows.count, 1).End(xlUp).Row '日付の最終行 ct = 0 For i = 3 To hrow On Error Resume Next s = WorksheetFunction.Match(kamoku, Sheet2.Rows(i), 0) If s = 0 Then GoTo tobashi End If If s <> 0 Then kensakugakunen = Sheet2.Cells(i, 3).Value If gakunen = kensakugakunen Then Debug.Print i Debug.Print s Cells(i, s + 1) = ct + 1 ct = ct + 1 End If End If tobashi: kensakugakunen = "" s = 0 SS = 0 Next i MsgBox gakunen & "年の" & kamoku & "は、授業回数" & ct & "回で入力しました。" End Sub
Visual Basic・43閲覧・50
ベストアンサー
Matchを使うのではなく、科目の列を全部チェックする方が簡単です。 Sub test() Dim grow As Long Dim kamoku As String Dim gakunen As Integer Dim hrow As Long Dim ct As Long Dim i As Long Dim s As Integer With Worksheets("条件設定") grow = .Shapes(Application.Caller).TopLeftCell.Row kamoku = .Range("A" & grow).Value gakunen = .Range("B" & grow).Value End With With Worksheets("Sheet2") hrow = .Cells(Rows.Count, 1).End(xlUp).Row For i = 3 To hrow If .Cells(i, 3).Value = gakunen Then For s = 4 To 12 Step 2 If .Cells(i, s).Value = kamoku Then ct = ct + 1 .Cells(i, s + 1) = ct End If Next s End If Next i End With MsgBox gakunen & "年の" & kamoku & "は、授業回数" & ct & "回で入力しました。" End Sub コ-ドの書き方ですがいくつか気になる事がありました。 変数定義はきちんと書いた方がいいです。 >Sheet2.Activate Sheet2 という書き方は間違いやすいので、 Worksheets("Sheet2") か、 二番目のシートなら Worksheets(2) とする方がいいです。 また.ActivateやSelectは処理が遅くなるので必要な時以外書かず、 On Error Resume Next や GoTo も使わないようにした方がいいです。
質問者からのお礼コメント
ありがとうございました。スッキリしたコードで感無量です。
お礼日時:5/23 8:05