2017-06-01 10 views
2

私は、「Releves」と「Observations」と呼ばれる2枚のシートをExcelで使用しています。 Observations Sheetsの列のセルの内容に基づいて、Relevesシートの列に色を付ける必要があります。VBA Excelのループごとにダブル

文は、この1のようになります。

my_column_observations_sheetのセルが空でない場合は、my_column_releves_sheetに黄色 色を置きます。

ループごとに2倍にしましたが、動作しません。私は、スクリプトを実行すると、my_column_releves_sheetのすべてのセルはmy_column_observations_sheetのセルが空であっても、着色している​​...ここで

は私のスクリプトです:

Sub condition() 

Dim espece As Range 
Dim num_releve As Range 

ThisWorkbook.Sheets("Relevé").Activate 
Set num_releve = ActiveSheet.Range("G3:G6") 

ThisWorkbook.Sheets("Observations").Activate 
Set espece = ActiveSheet.Range("B3:B6") 

    For Each i In espece 
     For Each j In num_releve 
     If Not IsNull(i.Value) Then j.Interior.ColorIndex = 6 
     Next 
    Next 
End Sub 
+0

:しかし、エラー値の用心 -

あなたはように空の値を持つ細胞を処理する必要がある場合は、空の文字列をチェックしますそのセルに何が入っていても「偽」になります。 'IsEmpty'をチェックすることを意味しましたか? –

答えて

1
For Each i In espece 
    For Each j In num_releve 
     If Not IsNull(i.Value) Then j.Interior.ColorIndex = 6 
    Next 
Next 

IsNullこのように使用することはできません。空のセルの値は、空のであり、ではなく、ではありません。代わりにIsEmptyを使用してください:非空のセルとして、空の文字列を返す式を有するセルを扱います

For Each i In espece 
    For Each j In num_releve 
     If Not IsEmpty(i.Value) Then j.Interior.ColorIndex = 6 
    Next 
Next 

。 `のIsNull(任意のセル値)が常に起こって`されているためです

For Each i In espece 
    For Each j In num_releve 
     If Not IsError(i.Value) Then 
      If CStr(i.Value) <> vbNullString Then j.Interior.ColorIndex = 6 
     End If 
    Next 
Next 
+0

ありがとうございました!しかし、私は同じ結果を持っています..関連するセルが空であっても、私のすべてのjセルは色付けされています..おそらく、各ループのダブルに問題がありますか? – Julien

+0

あなたは 'IsNull'で何をしようとしているのか明確にしていません。問題はループではなく、内部の状態です。 –

関連する問題