我是否可以根据特定的字符串选择范围?

问题描述 投票:0回答:2

我有一些工作代码可以找到列'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
excel vba switch-statement range
2个回答
0
投票

假设您的“标题”行是第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)的变量,然后使用变量来找到目标并做事。


0
投票

不确定应用程序,但是将数据放入表中可能会更好。

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。

© www.soinside.com 2019 - 2024. All rights reserved.