Vba 颜色范围之间的和值
我试图求两个具有相同内部颜色的单元格之间的值的总和。输出应指向一个单元格。用户的目标是为输出定义起始单元格和单元格,函数应一直运行,直到它更改列或找到具有相同内部函数的单元格为止 这就是我所做的,但每次都会出现#值错误。请注意,我没有在列移动以停止计算时添加规则,我的总和可能是导致错误的原因,但我不确定Vba 颜色范围之间的和值,vba,excel,Vba,Excel,我试图求两个具有相同内部颜色的单元格之间的值的总和。输出应指向一个单元格。用户的目标是为输出定义起始单元格和单元格,函数应一直运行,直到它更改列或找到具有相同内部函数的单元格为止 这就是我所做的,但每次都会出现#值错误。请注意,我没有在列移动以停止计算时添加规则,我的总和可能是导致错误的原因,但我不确定 Function CountCcolor(range_data As Range, criteria As Range, valx As Range) As Long Dim datax As
Function CountCcolor(range_data As Range, criteria As Range, valx As Range) As Long
Dim datax As Range
Dim xcolor As Long
xcolor = criteria.Interior.ColorIndex
valx = 0
For Each datax In range_data
If datax.Interior.ColorIndex = xcolor Then
Exit For
End If
If datax.Interior.ColorIndex <> xcolor Then
valx = datax.Value
End If
Next datax
End Function
函数CountCcolor(范围\数据作为范围,标准作为范围,valx作为范围)长度
Dim datax As范围
暗X色和长X色一样
xcolor=criteria.Interior.ColorIndex
valx=0
对于范围_数据中的每个数据x
如果datax.Interior.ColorIndex=xcolor,则
退出
如果结束
如果是datax.Interior.ColorIndex xcolor,则
valx=数据x.值
如果结束
下一个数据
端函数
要获取彩色单元格之间的单元格值之和,可以使用以下方法:
Function CountCcolor(range_data As Range, criteria As Range)
Dim datax As Range, CountVal, x%
For Each datax In range_data
If datax.Interior.Color = criteria.Interior.Color Then
x = x + 1
End If
If datax.Interior.Color <> criteria.Interior.Color And x = 1 Then
CountVal = CountVal + datax.Value
End If
Next datax
CountCcolor = CountVal
End Function
函数CountCcolor(范围\数据作为范围,标准作为范围)
Dim datax作为范围,CountVal,x%
对于范围_数据中的每个数据x
如果datax.Interior.Color=criteria.Interior.Color,则
x=x+1
如果结束
如果datax.Interior.Color criteria.Interior.Color和x=1,则
CountVal=CountVal+datax.Value
如果结束
下一个数据
CountCcolor=CountVal
端函数
输出
要获取彩色单元格之间的单元格计数,可以使用以下方法:
Function CountCcolor(range_data As Range, criteria As Range)
Dim datax As Range, CountVal, x%
For Each datax In range_data
If datax.Interior.Color = criteria.Interior.Color Then
x = x + 1
End If
If datax.Interior.Color <> criteria.Interior.Color And x = 1 Then
CountVal = CountVal + 1
End If
Next datax
CountCcolor = CountVal
End Function
函数CountCcolor(范围\数据作为范围,标准作为范围)
Dim datax作为范围,CountVal,x%
对于范围_数据中的每个数据x
如果datax.Interior.Color=criteria.Interior.Color,则
x=x+1
如果结束
如果datax.Interior.Color criteria.Interior.Color和x=1,则
CountVal=CountVal+1
如果结束
下一个数据
CountCcolor=CountVal
端函数
输出
看起来您没有为函数指定返回值: 例如
我可能误解了您的要求,但我想到的是:
结果: 此功能位于Sheet1模块中:
Option Explicit
Public Sub x()
With Me
sumColor .UsedRange, .Range("B8"), .Range("D8")
sumColor .UsedRange, .Range("B9"), .Range("D9")
sumColor .UsedRange, .Range("B10"), .Range("D10")
sumColor .UsedRange, .Range("B11"), .Range("D11")
End With
End Sub
我已经编辑了你的标题。请看“”,其中的共识是“不,他们不应该”。谢谢@JohnSaunders
Option Explicit
Public Sub sumColor(dataRng As Range, criteriaRng As Range, sumRng As Range)
Dim xFound As Variant, xData As Range, xColor As Long, sumData As Long, lr As Long
Dim fr As Long, fc As Long, foundRng As Range, inProgress As Boolean
xColor = criteriaRng.Interior.ColorIndex
sumData = 0
lr = dataRng.Rows.Count
For Each xData In dataRng 'For Each cell in 2D range, it traverse row by row
With xData
If .Interior.ColorIndex = xColor Then 'found first cell
fr = .Row 'get its row
fc = .Column 'and col
sumData = xData.Value2 'capture its value
With dataRng 'rest of the column bellow first found
Set foundRng = .Range(.Cells(fr + 1, fc), .Cells(lr, fc))
End With
For Each xFound In foundRng 'iterate to end of column
inProgress = xFound.Interior.ColorIndex = xColor
If inProgress Then
sumData = sumData + xFound.Value2
Else
Exit For
End If
Next
If Not inProgress Then Exit For
End If
End With
Next
sumRng.Value2 = sumData
If sumData > 0 Then sumRng.Offset(0, 1).Value2 = "(Col " & xData.Column & ")"
End Sub
Option Explicit
Public Sub x()
With Me
sumColor .UsedRange, .Range("B8"), .Range("D8")
sumColor .UsedRange, .Range("B9"), .Range("D9")
sumColor .UsedRange, .Range("B10"), .Range("D10")
sumColor .UsedRange, .Range("B11"), .Range("D11")
End With
End Sub