2016-09-14 26 views
1

マクロでcountif関数を使用して、指定したセルのスコアの頻度を表示するのに問題があります。これは、現在エクスポートされているデータのセットからレポートを生成するために現在作業している大きなマクロの一部です。vbaで関数が正常に動作しない場合をカウントします。

コードを実行しようとすると、その条件に一致するデータがあるにも関わらず、指定したセルのすべてのゼロが返されます。

このコードを批評したいのであれば、私がプログラミングを始めて、可能な限り学びたいと思っているように、気軽にお気軽にお問い合わせください。

ありがとうございます!ここで

は、コードのコピーです:

i = WorksheetFunction.CountIf(Range("S2:CCC2"), 5) 

テキストその-ルックスライク-数が数と同じものではありません、と

Dim i As Integer 
Dim ws_raw As Worksheet 
Dim ws_rpt As Worksheet 

Set ws_raw = Sheets("Raw Data") 
Set ws_rpt = Sheets("Report") 

If ws_raw.Range("H2") <> "" Then 

    i = WorksheetFunction.CountIf(Range("S2:CCC2"), "5") 
    ws_raw.Range("I2").Value = i 

    i = WorksheetFunction.CountIf(Range("S2:CCC2"), "6") 
    ws_raw.Range("J2").Value = i 

    i = WorksheetFunction.CountIf(Range("S2:CCC2"), "7") 
    ws_raw.Range("K2").Value = i 

    i = WorksheetFunction.CountIf(Range("S2:CCC2"), "8") 
    ws_raw.Range("L2").Value = i 

Else 

End If 

答えて

4

はそれを試してみてください。例えば5<>"5"

関連資料では、.Parentワークシートを明示的に参照することは、「ベストプラクティス」と広く考えられています。 With ... End With statementは、コードをクリーンアップするだけでなく、スピードアップします。 WorksheetFunction objectの上にExcel Application objectを使用することをお勧めします。何らかのエラーがバリアントに返される可能性があります。

Dim i As Variant 
Dim ws_raw As Worksheet, ws_rpt As Worksheet 

Set ws_raw = Sheets("Raw Data") 
Set ws_rpt = Sheets("Report") 

With ws_rpt 
    If ws_raw.Range("H2") <> "" Then 
     i = Application.CountIf(.Range("S2:CCC2"), 5) 
     ws_raw.Range("I2").Value = i 

     i = Application.CountIf(.Range("S2:CCC2"), 6) 
     ws_raw.Range("J2").Value = i 

     i = Application.CountIf(.Range("S2:CCC2"), 7) 
     ws_raw.Range("K2").Value = i 

     i = Application.CountIf(.Range("S2:CCC2"), 8) 
     ws_raw.Range("L2").Value = i 
    Else 

    End If 
End With 
1

あなたは、二重引用符でそれらを置くことによってテキストに変換カウントしている数字をしました - これを試してみてください。

i = WorksheetFunction.CountIf(Range("S2:CCC2"), 5) 
ws_raw.Range("I2").Value = i 


i = WorksheetFunction.CountIf(Range("S2:CCC2"), 6) 
ws_raw.Range("J2").Value = i 


i = WorksheetFunction.CountIf(Range("S2:CCC2"), 7) 
ws_raw.Range("K2").Value = i 


i = WorksheetFunction.CountIf(Range("S2:CCC2"), 8) 
ws_raw.Range("L2").Value = i 
関連する問題