2016-04-26 12 views
1

私のコードでは、 "ランタイムエラー13型の不一致"が続きます。 セルを整数にする値を得るコメントに行を挿入すると(qtyCode = Cells(x、 "L")。値)、これは消えます。しかし、私はそれが型不一致である理由を見つけるように見えることができません。VBA Integer from Cell

カラムLは、私のExcelファイルに数字として設定されています。

Sub counting() 
Dim code As String 
Dim lookup As String 
Dim qtyCode As Integer 
Dim qtyLookup As Integer 

Dim numRows As Integer 

numRows = Range("AM2", Range("AM2").End(xlDown)).Rows.Count 
For x = 1 To numRows 
    code = Cells(x, "AM").Text 
    qtyCode = Cells(x, "L").Value 'error here 
    For y = 1 To numRows 
     lookup = Cells(y, "AM").Text 
     If (code = lookup) Then 
     qtyLookup = CInt(Cells(y, "L").Text) 'error here 
     qtyCode = qtyCode + qtyLookup 
     End If 
     ActiveCell.Offset(1, 0).Select 
     Next 
    Cells(x, "AN").Value = qtyCode 
    ActiveCell.Offset(1, 0).Select 
    Next 
    End Sub 

私は解決策が簡単になりますと仮定して、私が最も可能性の高い何かを見下ろすよ..事前に

おかげで、

デビッド

これはコードで、何かがまだあります値の出力に間違いがありますが、この問題は解決されていますので、この問題は解決されます。

+0

は、私は、コードからのコメント」を削除徹底的にシナリオを描くことができかもしれないが、それはラインです:。qtyCode =細胞(X、 『L』)の値とライン:qtyLookup = CInt関数(セル(Y、 "L")。Text) 注意:CIntは文字列 - > intを変換する場合に試行することでした。 –

+0

列Lのすべての内容は整数値ですか? –

+0

はいそうです。ブランクのみの整数ではなく、数値として列形式を設定します –

答えて

1

これがエラーの原因かどうかは不明ですが、Cells()は0ベースであることを覚えておいてください。つまり、セルF7を参照するには、Cells(6,"F")を使用する必要があります。
だから、あなたは、おそらくのようなもの使用して、それに応じてあなたにFOR...NEXT声明を確認する必要があります。この違いを避け、より読みやすいコードについて

For x = 0 To numRow - 1 

を、あなたもRange("F" & x)を使用することができます。おそらく多少効率は低いですが、私はデバッグするのがより快適だと感じています。


EDIT:Cells()は0ベースではなく、1ベースです。誤った情報には申し訳ありませんが、問題を解決するのに役立ちましたことをうれしく思います。

+0

実際これは問題かもしれません。私はヘッダーを忘れて、x = 1なので、それは文字列を取るでしょう。私はまずそれを調整します。 –

+1

「セル」は**ベースではありません**。 'セル(6、" F ")'はF7ではなくF6です。 – Rory

+0

はい、私はあなたの推論のおかげでエラーが見つかりました:)私がしなければならなかったのは、列ヘッダーを除外することでした。なぜなら、彼は整数に文字列を入れていたからです(または少なくともatrying)。ありがとう! –

1

エラーが発生したときにデバッグ情報を追加します。

Sub counting() 
On Error GoTo ErrorTrap 
    Dim code As String 
    Dim lookup As String 
    Dim qtyCode As Integer 
    Dim qtyLookup As Integer 

    Dim numRows As Integer 

    numRows = Range("AM2", Range("AM2").End(xlDown)).Rows.Count 
    For x = 1 To numRows 
    code = Cells(x, "AM").Text 
    mydbgval=Cells(x, "L").Value 
    qtyCode = Cells(x, "L").Value 'error here 
    For y = 1 To numRows 
     lookup = Cells(y, "AM").Text 
     If (code = lookup) Then 
     mydbgval=CInt(Cells(y, "L").Text) 
     qtyLookup = CInt(Cells(y, "L").Text) 'error here 
     qtyCode = qtyCode + qtyLookup 
     End If 
     ActiveCell.Offset(1, 0).Select 
    Next 
    Cells(x, "AN").Value = qtyCode 
    ActiveCell.Offset(1, 0).Select 
Next 
Exit Sub 
ErrorTrap: 
    Beep 
    MsgBox "FAILED" & Chr(13) & "Error number: " & Err & Chr(13) & Error(Err) & Chr(13) & "dbgval:<" & mydbgval & ">" 
End Sub 
1

を主な問題は、シートの列/行の数が容量を超えることができますので、あなたは、Longタイプのよう列/行のインデックスを参照するために使用されるすべての変数を宣言する必要があります変数Integer

また

  • は、このようにすべての変数を宣言すると、コードのより多くの制御を得るために自分自身を強制的に、あなたのモジュールの最上部にOption Explicit声明を配置するのが習慣に取得します。

  • あなたが扱う範囲を確認するために、ワークシートのものまでの完全修飾参照を使用してください。

  • 変更するには、行を数える方法(下記のコードを参照)

これらは限りコーディング習慣は、以下のようになる可能性がある、懸念しているとしてだけでいくつかの提案です:

Option Explicit '<== always use this 

Sub counting() 
Dim code As String 
Dim lookup As String 
Dim qtyCode As Integer 
Dim qtyLookup As Integer 
Dim x As Long, y As Long 

Dim numRows As Long 

With ThisWorkbook.Worksheets("MySheet") '< change it as per your needs 
    numRows = .Range("AM2", .Cells(.Rows.Count, "AM").End(xlUp)).Rows.Count 'get the last non blank row of column "AM" 
    For x = 1 To numRows 
     code = Cells(x, "AM").Text 
     qtyCode = Cells(x, "L").Value 
     For y = 1 To numRows 
      lookup = Cells(y, "AM").Text 
      If (code = lookup) Then 
       qtyLookup = CInt(Cells(y, "L").Text) 
       qtyCode = qtyCode + qtyLookup 
      End If 
      ActiveCell.Offset(1, 0).Select 
     Next y 
     Cells(x, "AN").Value = qtyCode 
     ActiveCell.Offset(1, 0).Select 
    Next x 

End With 
End Sub 

最後に、コードのロジックを把握していません。列 "AM"の2行目から行数を数え始めますが、行1から繰り返します。

はあなたが

+1

**の列数**は(まだ)整数の容量。 – Rory

+0

@Rory:はい、そうです。 「整数」の警告は現在、Excel 2010ワークシートの行番号に対して使用されていますが、これはOPのシナリオである必要があります。現在の不適切なスコープが、今後のExcelバージョンの「安全な習慣」としてコラムに広がっていると考えてください。 – user3598756

+0

私は心から彼らが*決して*これ以上の列を増やすことを願っていません! – Rory