比较可变数量的列

时间:2017-07-25 17:53:16

标签: excel vba multiple-columns

所以我被要求比较图表中的数据,其中列数可以变化,目前最多为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

1 个答案:

答案 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和编程。我不是专家,但我一路上学到了很多东西。我分享的是我花了很长时间才学到的东西。祝你好运,如果你有任何疑问,请告诉我。