2016-09-16 88 views
0

对于VBA比我更熟练的人,此问题可能非常容易。我的问题是,我想要计算包含特定颜色的单元格,但前提是它符合相邻单元格中的条件。我发现了如何做到这一点,如果我只希望根据颜色来算,这是什么样子:如果相邻单元格符合条件,则根据颜色计算单元格

Function CountCcolor(range_data As Range, criteria As Range) As Long 
Dim datax As Range 
Dim xcolor As Long 

xcolor = criteria.Interior.ColorIndex 

For Each datax In range_data 
If datax.Interior.ColorIndex = xcolor Then 
    CountCcolor = CountCcolor + 1 
End If 
Next datax 
End Function 

所以在我的例子,现在我要计数细胞与绿颜色我B列如果相邻的单元格列A等于Apple。 Example image

你能帮我吗?我有点卡在这里!谢谢大家,周日快乐!

回答

1

只需添加另一个条件你If声明

If datax.Interior.ColorIndex = xcolor And LCase(datax.Offset(0,-1).Value) = "apple" Then 

我用LCase两全Appleapple ...

当然,当您使用Offset负值,你必须确保您不会将其应用于靠近工作表末端的单元格(在本例中为第一列),否则您会收到错误消息。

如果你想在同一行的单元作为datax但列A,只是用datax.Row获得的行号:

yoursheet.Cells(datax.Row, 1).Value 

哪里yoursheet是您正在使用的(例如data_range.Sheet)的worksbeet。如果您愿意,您可以用"A"替换列索引(我更喜欢使用数字)。

+0

大谢谢!嗯,我意识到,我没有给我的问题,当我开始这个线程的全貌。我实际上有多个包含颜色的列,但我总是希望在A列中找到相邻的单元格。有没有办法使用偏移量函数并始终使用列A而不是计数?我试着用上面的代码,你提供了我,并把“A”而不是-1,但似乎并没有工作:( – sjansen

+0

我编辑我的帖子 – arcadeprecinct

0

这里有几个途径获得同一行和第一列的单元格:

datax(, 2 - datax.Column)   ' no auto-complete 
datax.Offset(, 1 - datax.Column) ' auto-complete 
datax.EntireRow.Cells(1)   ' no auto-complete 
datax.EntireRow.Resize(, 1)  ' auto-complete 
+0

第一和第二将偏移到右侧,所以它应该是负输入。但是我认为以任何形式得到一个固定的列偏移量是令人困惑的。在我看来,最后的选项是可取的,尽管调整大小的解决方案看起来有点过度。 – arcadeprecinct

+0

谢谢@arcadeprecinct。我在早上发布它太早,没有当我想在它们后面自动完成时,我通常使用.Offset和.Resize。 – Slai

相关问题