2017-09-08 24 views
1

私の考えている変数の定義に問題がありますが、どこか理由がわかりません。教師が割り当てたレッスンの数を数えるのは簡単なコードです。その情報はワークシート「Subects and Teachers 2018」にあり、ワークシート「Teachers」に印刷されていなければなりません。数量は常に名前の左側に表示されます。Excel VBAランタイムエラー '13'タイプの不一致エラー

ここにコードがあります。誰かが私が間違って定義していることについて私にヒントを与えることができたら、私はとても感謝しています!デバッグは、問題がコードの一部ではなく最後に*****の行にあることを示唆しています。

Sub Counter2018() 
    Dim Var1 As String 
    Dim CVar1 As Integer 

    Dim i As Integer 
    Dim j As Integer 
    Dim k As Integer 

    For k = 2 To 50 
     Var1 = Worksheets("Teachers").Cells(k, 3) 
     CVar1 = 0 
     For i = 2 To 45 
      For j = 2 To 45 
       If Worksheets("2018 Subjects and Teachers").Cells(i, j) = Var1 Then 
        CVar1 = CVar1 + Worksheets("2018 Subjects and Teachers").Cells(i, j - 1) ***** 
       End If 
      Next j 
     Next i 
     Worksheets("Teachers").Cells(k, 5) = CVar1 
    Next k 
End Sub 
+1

i&jの値は何ですか?それがクラッシュし、セルi、j-1のデータは何ですか? – SlowLearner

+0

残念ながら、私はこれをチェックする方法を知らない。私はこれにすべて新しいです。 –

+0

その場合は、直前のウィンドウについて調べることをお勧めします。F8キーを押してコードを進んで、この '?i'と'?j'を使ってコード内の値が何であるかを調べることができます: )幸運と楽しみを持ってください – SlowLearner

答えて

0


Option Explicit 

Public Sub Counter2018() 
    Dim wsTeachers As Worksheet, wsSubjects As Worksheet 

    Set wsTeachers = Worksheets("Teachers") 
    Set wsSubjects = Worksheets("2018 Subjects and Teachers") 

    Dim teacher As String, counter As Long 
    Dim i As Long, j As Long, k As Long 

    For k = 2 To 50 
     teacher = wsTeachers.Cells(k, 3) 
     counter = 0 
     For i = 2 To 45 
      For j = 2 To 45 
       If wsSubjects.Cells(i, j).Value2 = teacher Then 
        If Not IsError(wsSubjects.Cells(i, j - 1)) Then 
         counter = counter + Val(wsSubjects.Cells(i, j - 1).Value2) 
        End If 
       End If 
      Next 
     Next 
     wsTeachers.Cells(k, 5) = counter 
    Next 
End Sub 

私は型の不一致エラーがwsSubjects.Cells(i, j - 1)

そのカウンターでの細胞の一部に起因していると思います(未テスト)このバージョンを試してみては中の数字を期待しますその列には文字列やエラーがある可能性があります

+1

私はいつも '' Integer'ではなく '' Long''を使うことを勧めます。 (例えば、Excelには 'Integer'よりも多くの行があります)。また、Integerを使うのに利点はありません(欠点のみ)。 https://stackoverflow.com/a/26409520/3219613 –

+1

ポール・ビカありがとう!それは最初にk =が定義される前に 'teacher = wsTeachers.Cells(k、3)'という行があったため、0行目のセルで開始したので、最初はうまくいきませんでした。多くの皆さん、ありがとう! –

+0

@Peh - 良い点;私は決してIntegersを使用しませんでしたが、これは現在固定されている監視でした –

関連する問題