2016-09-29 16 views
1
Sub sumexeptblack() 

    For Each cell In Range("4:4") 
     If cell.Font.Color <> 0 Then 
     Range("A3").Value = Range("A3").Value + cell.Value 
     End If 
    Next cell 

End Sub 

このコードを書いてもうまくいきますが、別のループに置いてもエラーや結果がなくても計算できます。第二のコードは次のとおりです。vbaのカスタム和の色の数式を設定します

Sub sumallrowcolored() 
    Dim i As Integer 
    Dim e As Integer 
    e = 1 

    For i = 2 To 168 Step 2 
     e = i - e 
     For Each cell In Range("i:i") 
      If cell.Font.Color <> 0 Then 
       Range("Ae").Value = Range("Ae").Value + cell.Value 
      End If 
     Next cell 
    Next i 

End Sub 
+0

ここで 'Range(" i:i ")'を使ったところ、これは各ループのためにどのようにしたいですか? 'Range(" 2:2 ")'はエラーとなり、カラムレターは提供されません。 – Jordan

+1

@Jordan - 'Range(" 2:2 ")'はA2:XFD2または第2行全体です。 '?Range(" 2:2 ")のイミディエイトウィンドウでの証明。 ' – Jeeped

答えて

2

私が正しくあなたのコードを理解していれば、あなたは(最初の部分に行が4で、第二部では、それはiある)行のすべてのセルを反復処理しようとしています。この場合は、あなたは、このようにコードを調整する必要があります:

Sub sumallrowcolored() 
    Dim i As Integer 
    Dim e As Integer 
    e = 1 
    For i = 2 To 168 Step 2 
    e = i - e 
    For Each cell In Range(i & ":" & i) 
     If cell.Font.Color <> 0 Then 
     Range("A" & e).Value = Range("A" & e).Value + cell.Value 
     End If 
    Next cell 
    Next i 
End Sub 
+0

ありがとう...それは動作します 少し変更して' e = i - e 'でなければなりません'e = i - 1' –

0

あなたはそれが唯一のVBAで宣言されていますよう音声マークの外e変数を維持するために必要なコードの2番目の部分について。試してみてください:

Sub sumallrowcolored() 

Dim i As Integer 
Dim e As Integer 
e = 1 

For i = 2 To 168 Step 2 
    e = i - e 
    For Each cell In Range("i:i") 
     If cell.Font.Color <> 0 Then 
      Range("A" & e).Value = Range("A" & e).Value + cell.Value 
     End If 
    Next cell 
Next i 

End Sub 
+0

応答ありのおかげでありがとう;) –

1

あなたが引用符とするときRange objectを定義する場合、引用符を使用しないを使用する際に検討する必要があります。

Dim cell as range 
Dim i As Long, e As Long 
e = 1 
For i = 2 To 168 Step 2 
    e = i - e 
    'For Each cell In Rows(i)  'could also be Range(i & ":" & i) 
    'better to cut it down to the .UsedRange 
    For Each cell In Intersect(ActiveSheet.UsedRange, Rows(i)) 
     If cell.Font.Color <> 0 Then 
      'the following is a match operation; string concatenation should be a &, not a + 
      Range("A" & e) = Range("A" & e).Value + cell.Value 
     End If 
    Next cell 
Next i 

文字列連結演算子は、+ VBAで&ありません。 +は、数学的な加算用です。私はあなたが実際にほしいと思うものが完全にはわかりません。

+0

絶対に正しい... あなたの説明のためにありがとう –

関連する問題