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

oyjwcjzk  于 2023-11-20  发布在  其他
关注(0)|答案(1)|浏览(84)

我正尝试在B列中输入名称时,让Excel工作表自动在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, !!
但是输出结果是:!!, !!, !!, !!
任何帮助/澄清将不胜感激。

vfh0ocws

vfh0ocws1#

问题似乎是我对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

字符串

相关问题