2010-11-19 12 views
1

実行時エラー13が発生しています。型の不一致。しかし、私は理由を理解できません。どんな助け?VBAで「エラー:型の不一致」が発生する

Sub Separate_with_OR_without_comission() 

Dim I As Integer 
Dim WRng As Range 
Dim NoRng As Range 
Dim NameRgn As Range 
Dim TotalCRng As Range 

Set WRng = Range("with_comission") 
Set NoRng = Range("without_comission") 
Set NameRgn = Range("total_comission_name") 
Set TotalCRng = Range("ttotal_comission") 

For I = 1 To NameRgn.Rows.Count 
    If TotalCRng.Rows(I) > 0 Then   // ERROR HERE 
     WRng.Rows(I) = NameRgn.Rows(I) 
    End If 
    If TotalCRng.Rows(I) < 1 Then   // AND HERE 
     NoRng.Rows(I) = NameRgn.Rows(I) 
    End If 
Next I 
End Sub 

私は他のテストセルを使用しようと結構です、問題はそれらを使用することです....しかし、VBAは、何か他のものとしてそれを取るんなぜ彼らは「ttotal_comission」内の数字ですか?

+0

ここで "TotalCRng.Rows(I)> 0"の行のインデックスまたはセルの値を比較しますか? – Arseny

答えて

3

問題はRows(I)が範囲オブジェクトではなく、整数値を返しているということです。あなたの文は、TotalCRng.Rows(I).Cells(1, 1).ValueまたはおそらくTotalCRng.Cells(1, 1).Valueのように完全修飾してください。それがそのまま書かれていれば、Excelは1つのセルである場合には行(I)から値を返します。その場合は範囲​​のvalueプロパティが呼び出されますが、そうでない場合は表示されている型の不一致エラーが発生します範囲を整数と比較しようとしています。

例:また

'no error 
Debug.Print Sheet1.Range("B1") 

'type mismatch error 
Debug.Print Sheet1.Range("B1:B12") 

、マージされた範囲の唯一の左上のセルは、実際に値を返すことに注意してください。

2

あなたは、このように構造体を使用し使用することができます

for each c in range("rangeName1") 
    'if the source range is 3 columns to the right, same row' 
    c = c.offset(0,3).value 
next c 
0

各行のセルの値を確認する場合は、セルをループして値を個別に比較する必要があります。

範囲が単一の列である場合、各行をループする代わりに、同じ効果の各セルをループすることができます。

For I = 1 To NameRgn.Rows.Count 
    For j = 1 to NameRgn.rows(I).cells.count 
    If TotalCRng.Rows(I).cells(j).value > 0 Then   // ERROR HERE 
     WRng.Rows(I).cells(j) = NameRgn.Rows(I).cells(j) 
    End If 
    If TotalCRng.Rows(I).cells(j).value < 1 Then   // AND HERE 
     NoRng.Rows(I).cells(j) = NameRgn.Rows(I).cells(j) 
    End If 
    Next j 
Next I