Excel VBA更新具有可变列数的表中的单元格值

Excel VBA更新具有可变列数的表中的单元格值,excel,vba,Excel,Vba,我有一个数据表,需要根据a列中的值更改某些值。数据位于标题为Analysis\xx的列中,其中xx是1到60之间的变量值。每行的列数不同,因此第4行可能上升到Analysis\4,而第5行可能上升到Analysis\30。出现在Analysis\xx字段中的每个值都需要更新,其中a列中存在某个值 我有基于单个固定列位置更新值的代码,但我正在努力解决如何迭代每行以更新可变数量的列 如有任何建议,我们将不胜感激 我在下面附上了一个数据样本,它显示了一个很好的变体选择,隐藏了不需要修改的列。第26行实

我有一个数据表,需要根据a列中的值更改某些值。数据位于标题为Analysis\xx的列中,其中xx是1到60之间的变量值。每行的列数不同,因此第4行可能上升到Analysis\4,而第5行可能上升到Analysis\30。出现在Analysis\xx字段中的每个值都需要更新,其中a列中存在某个值

我有基于单个固定列位置更新值的代码,但我正在努力解决如何迭代每行以更新可变数量的列

如有任何建议,我们将不胜感激

我在下面附上了一个数据样本,它显示了一个很好的变体选择,隐藏了不需要修改的列。第26行实际上一直到NB列


您好,您是否尝试过使用类似的方法,其中TEST1是您要替换的变量,Test2是您要将其转换为的变量?此代码对整个工作表执行此操作

Sub Macro1()

    Cells.Replace What:="TEST1", Replacement:="Test2", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
End Sub

假设您的表有一个名称,您可以使用下面的代码循环遍历a列的每一行,在这种情况下,只需打印同一行中某一列的值

Sub Tester()

Dim rg As Range
Dim rgA As Range
Dim sngCell As Range

    Set rg = Range("Your TableName")
    Set rgA = rg.Columns(1)
    For Each sngCell In rgA.Rows
        Debug.Print sngCell.Offset(, 3).Value2
    Next

End Sub
那代码的方向正确吗

编辑:假设您使用listobject,此代码可能会对您有所帮助

Sub ChangeTable()

Const ACCT_NO = "ABCD1234"
Const HEADING = "Analysis*"
Const NEW_VAL = "80321"

Dim tbl As ListObject
Dim x As Long
Dim i As Long
Dim hdrCount As Long

    Set tbl = ActiveSheet.ListObjects("Your Name here")
    hdrCount = tbl.HeaderRowRange.Columns.Count

    For x = 1 To tbl.ListRows.Count
        With tbl.ListRows(x)
            If .Range(1, 1).Value2 = ACCT_NO Then
                For i = 2 To hdrCount
                    If tbl.HeaderRowRange(i).Value2 Like HEADING Then
                        .Range(1, i).Value = NEW_VAL
                    End If
                Next
            End If
        End With
    Next

End Sub

在上面的示例中,AccountNumber ABCD1234的Analysis\xx列中的每个值都需要更改为80321,而不管字段当前包含什么。新的分析\xx值将由AccountNumber固定。我只需要更改列标题为Analysis\xx的值。在上面的数据中,它上升到Analysis\57(366列宽,包括其他未更改的相关数据)。每个文件中通常有大约200行,其中可能有20-30行受到影响。我想是的,但我只需要查找标题行中的值称为Analysis\xx的列。每个文件中的分析列数都会发生变化,可以是4到60+之间的任意值。还有至少50列我不想更改的数据。错误地按enter键。查询需要使用逻辑“对于accountnumber=ABCD1234和column heading=analysis\1到x的每个单元格,将intersect处的值更改为80321”问题:您的工作表中是否使用Listobjects?这是一个很大的帮助,谢谢。剩下的唯一一点是只更新已经包含值的单元格。上述代码使用相关列/行值更新所有单元格,而不考虑现有单元格内容。