所以我被要求比较图表中的数据,其中列数可以变化,目前最多为20,但我告诉我可以改变,所以我想离开那尽可能的动态。
目标是确保一行中的所有单元格包含完全相同的字符串,或者为空。因此,如果有五列,则三个具有数据" Good"而另外两个是空白的,那没关系。
图表将始终从左上角开始,并始终同时包含标题行和行名称。
我以为我会将每个细胞与每行中的第一个细胞进行比较,但我似乎无法弄清楚如何比较可变细胞。
我很擅长使用VBA而且完全是自学成才,所以我可能会走错路。
这是我的示例代码,我知道我需要做几个Do循环来实现这个功能,但我想让这个部分先工作。
Sub Row_Checker()
Dim Col_Count As Integer
Dim I As Integer
Range("a1").Select
Range(Selection, Selection.End(xlToRight)).Select
Col_Count = Application.WorksheetFunction.CountA(Selection)
Selection.End(xlToRight).Select
ActiveCell.Offset(1, 1).Range("A1").Select
For I = 2 To Col_Count
If ("B" & (ActiveCell.Row)) = ("B" & (ActiveCell.Row).Offset(0, I) then
End Sub
答案 0 :(得分:0)
我会为更高效的代码提出一些建议。我也会帮你编写循环。
首先,请尽量避免使用select
。它效率低下,使代码更难阅读,更容易破解。在这里,我将行的第一列的值放在一个名为val1
的变量中,而不是选择,然后我遍历其他列,将它们的值放在一个名为valn
的变量中。
由于可能缺少数据,我使用find函数查找填充的最低行,然后将其分配给变量lRow
。
对于下一部分,你必须在循环内部进行循环。在外部循环中,您将遍历行,在内部循环中,您将遍历列。所以你会去一行,循环遍历所有列,然后转到下一行并做同样的事情。
您可以使用cells(I,J)
在循环中移动不同的单元格。这是循环的一个强大部分。
如果单元格值匹配或为空白,您可以填写您想要发生的事情,如果不匹配,您可以填写您希望它执行的操作。
另外,请务必将sheet1
更改为您正在使用的实际工作表名称。
见下面的代码:
Sub row_checker()
Dim Col_Count As Integer
Dim lRow As Integer
Dim I As Integer
Dim J As Integer
Dim val1 As String
Dim valn As String
Dim output As String
Col_Count = Application.WorksheetFunction.CountA(Rows(1))
lRow = Cells.Find(What:="*", _
After:=Range("A1"), _
LookAt:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
For I = 2 To lRow
For J = 2 To Col_Count
val1 = Cells(I, 1).Value
valn = Cells(I, J).Value
If val1 = valn Or valn = Empty Then
Else: Cells(I, J).Interior.Color = 65535
End If
Next J
Next I
End Sub
祝贺自学成才。我也是100%自学VBA和编程。我不是专家,但我一路上学到了很多东西。我分享的是我花了很长时间才学到的东西。祝你好运,如果你有任何疑问,请告诉我。