Excel VBA更新表中具有可变列数

时间:2017-01-04 17:14:04

标签: excel-vba vba excel

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

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

任何建议都会感激不尽。

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

Data Sample

2 个答案:

答案 0 :(得分:0)

你好,你试过使用这样的东西吗?TEST1是你要替换的Varibale,而Test2是你喜欢的变量吗?此代码用于整个工作表。

Sub Macro1()

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

答案 1 :(得分:0)

假设您的表有一个名称,您可以使用以下代码遍历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