我有一些工作代码可以找到列'R',然后根据'R'中的值进行迭代,并替换不同列中的值(也经过硬编码)。我想让脚本减少对列放置的依赖。
我已经找到并尝试了一些选项,但仍未找到合适的解决方案。我觉得我需要使用set,但不知道如何替换Select Case(“ R”&i).Value和其他用i引用Range的区域。理想情况下,我可以替换“ T”,“ R”,“ F”和“ N”。
赞赏朝正确方向的任何推动。
Sub BackfillUpdate()
Dim LastRow As Long
Dim i As Long
LastRow = Range("T" & Rows.Count).End(xlUp).Row
For i = 2 To LastRow
Select Case Range("R" & i).Value
Case "Text1"
Range("F" & i).Value = "Example1"
Case "Text2"
Range("N" & i).Value = "Example2"
Case "Text3", "Text4"
Range("N" & i).Value = "Example3"
End Select
Next i
End Sub
假设您的“标题”行是第1行,则可以执行与LastRow
变量等效的列,并通过递增列的范围进行循环。
类似:
Sub BackfillUpdate()
Dim LastColumn As Long
Dim i As Long
LastColumn = Cells(1, Columns.Count).End(xlToLeft).Column
For i = 2 To LastColumn
Select Case Cells(1, i).Value 'Starting from "B1" and moving along columns until it finds your value.
Case "Text1"
Range("F" & i).Value = "Example1"
Case "Text2"
Range("N" & i).Value = "Example2"
Case "Text3", "Text4"
Range("N" & i).Value = "Example3"
End Select
Next i
End Sub
如果Case
范围是您要分配的值,也需要提高动态性,请考虑像上面那样循环,并为每个目标列设置Column
编号(即-i
)的变量,然后使用变量来找到目标并做事。
不确定应用程序,但是将数据放入表中可能会更好。
Sub test()
Dim ws As Worksheet
Dim tbl As Object
Set ws = activeworkbook.activeworksheet
Set tbl = ws.ListObjects("tablename")
Dim rowcount As Integer
rowcount = tbl.ListRows.Count
For i = 1 To rowcount
Dim ColumnName As String ' or integer for index
ColumnName = "header-row-name or Index#"
Select Case tbl.ListRows(i, ColumnName).Value
Case "Text1"
tbl.ListRows(i, ColumnName).Value = "Example1"
Case "Text2"
tbl.ListRows(i, ColumnName).Value = "Example2"
Case "Text3", "Text4"
tbl.ListRows(i, ColumnName).Value = "Example3"
End Select
Next i
End Sub
如果您希望列名或索引是动态的,只需更改名称或为其创建变量并替换ColumnName。