如何使用MS Excel VBA根据B列数据自动在A列输入数据?

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

我试图让 Excel 工作表在 B 列中输入名称时自动在 A 列中输入字符串。

我在单元格 A1 中使用此公式使其完全按照 Google 表格中的预期工作:

={"P#";ArrayFormula(IF(LEN(B2:B), SWITCH(B2:B,"Alpha", "PX", "Bravo", "P1", "Charlie", "P7", "!!"), ""))}

但我没有看到在 Excel 中执行相同操作的简单方法,除非将稍微不同(且较大)的嵌套 IF 混乱复制/粘贴到每个连续单元格中。我相信每当修改 B 列中的单元格时我应该能够运行脚本,但我以前没有使用过 VBS。

下面的脚本似乎接近我需要的,因为它仅在单元格 B2 或以下输入文本时运行,但它只返回默认情况。

Sub Worksheet_Change(ByVal Target As Range)
    If Not Target.Column = 2 Then Exit Sub
        Application.EnableEvents = False                'prevent endless loop
        On Error GoTo Finalize                          'resume events
        Dim LastRow As Long, i As Long, pName As String 'initialize variables
        LastRow = Range("B" & Rows.Count).End(xlUp).Row 'get range
        For i = 2 To LastRow
            pName = Range("B" & i).Value
            Select Case pName
            Case pName = "Alpha", pName = "Bravo"
                Range("A" & i).Value = "P1"
            Case pName = "Charlie"
                Range("A" & i).Value = "P2"
            Case Else                                   'other values
                Range("A" & i).Value = "!!"
            End Select
        Next i
Finalize:
    Application.EnableEvents = True
End Sub

鉴于输入:

Alpha, Charlie, Bravo, Xenon

预期输出为:

P1, P2, P1, !!

但输出是:

!!, !!, !!, !!

任何帮助/澄清将不胜感激。

excel vbscript google-sheets-formula
1个回答
0
投票

看来问题是我对VBS不熟悉。

我已经更正了 switch 语句的语法,它现在似乎可以工作了:

Sub Worksheet_Change(ByVal Target As Range)
    If Not Target.Column = 2 Then Exit Sub
        Application.EnableEvents = False                'prevent endless loop
        On Error GoTo Finalize                          'resume events
        Dim LastRow As Long, i As Long, pName As String 'initialize variables
        LastRow = Range("B" & Rows.Count).End(xlUp).Row 'get range
        For i = 2 To LastRow
            pName = Range("B" & i).Value
            Select Case pName
            Case "Alpha", "Bravo":
                Range("A" & i).Value = "P1"
            Case "Charlie":
                Range("A" & i).Value = "P2"
            Case Else:                                   'other values
                Range("A" & i).Value = "!!"
            End Select
        Next i
Finalize:
    Application.EnableEvents = True
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.