1

首先,我是一个菜鸟。昨天我第一次看VBA。所以我很感激你把你的回答弄糊涂了。哈哈。

每周有几次,我在工作时会收到一份电子表格。我必须拆分邮政编码并将它们移动到那里的透视商店。大约有 20 个邮政编码,虽然我使用了排序选项,但它仍然需要我一段时间。我想用 marco 给每个邮政编码一个商店。

这是我的问题。如果邮政编码与我希望将“Bullhead”写成“M1”的众多邮政编码之一匹配,我正在尝试查看“J1”

我能够做到这一点,我花了几个小时的反复试验才得出最好的结果。我尝试了很多不同的东西。(在最底部是我想出的)

这是问题所在。我需要在电子表格中一直这样做。IE。如果 m3 = 86409 J3 = 金曼。如果 m4 = 86409 j4 = 金曼。以此类推一直到M5000,J5000。

任何帮助将不胜感激。我想做的很简单,但我自己找不到答案,或者我无法理解。我想我将不得不重新开始。并采取不同的方法。不确定是什么。

Sub MoversBirthdays()  
    Dim zipcode As Long, Store As String  
    zipcode = Range("J2").Value   
    If zipcode = "86426" Or "86427" Or "86429" Or "86430" Or "86435" Or "86436" Or "86437" Or "86438" Or "86439" Or "86440" Or "86442" Or "86446" Or "89028" Or "89029" Or "89046" Or "92304" Or "92332" Or "92363" Then Store = "Bullhead" Else: Store = "Kingman"  
    If zipcode = "" Then Store = ""  
    Range("M2").Value = Store  
End Sub 
4

2 回答 2

1
Sub MoversBirthdays()

    Dim varZip As Variant
    Dim arrStore() As String
    Dim StoreIndex As Long

    With Range("J2", Cells(Rows.Count, "J").End(xlUp))
        If .Row < 2 Then Exit Sub   'No data
        ReDim arrStore(1 To .Rows.Count)
        For Each varZip In .Value
            StoreIndex = StoreIndex + 1
            Select Case varZip
                Case 86426 To 86427, 86429 To 86430, 86435 To 86440, 86442, 86446, 89028 To 89029, 89046, 92304, 92332, 92363
                    arrStore(StoreIndex) = "Bullhead"
                Case ""
                    arrStore(StoreIndex) = ""
                Case Else
                    arrStore(StoreIndex) = "Kingman"
            End Select
        Next varZip
    End With

    If StoreIndex > 0 Then Range("M2").Resize(StoreIndex).Value = Application.Transpose(arrStore)

End Sub
于 2013-09-04T14:39:15.503 回答
0

您的代码有几个问题。

首先,您将其定义zipcodeLong,但将其与字符串进行比较。它应该被定义为一个字符串(或与 Longs 相比)。

其次,您不能使用值列表执行 If。它解析,但它被解释为If zipcode is 86426; Or If 86427; Or If 86429.... 您实际上需要If zipcode = "xxx"为每个 zip 说明。

但是由于您使用的是 Excel,因此您可以将 zip 列表放在工作表上,然后参考它进行比较。假设列表在 A 列中,以下代码将满足您的需求:

Sub MoversBirthdays2()
    Dim zipcode As String, Store As String
    Dim c As Range
    For Each c In Range("j2:j5000")
        zipcode = c.Value

        If zipcode = "" Then
            Store = ""
        Else
            If WorksheetFunction.CountIf(Range("a:a"), zipcode) > 0 Then
                Store = "Bullhead"
            Else
                Store = "Kingman"
            End If
        End If
        c.Offset(0, 2) = Store
    Next
End Sub

如果您实际上不需要在 zip 为空白的情况下用空白覆盖 M 列中的值,那么它可以更简单一些:

Sub MoversBirthdays2()
    Dim zipcode As String, Store As String
    Dim c As Range
    For Each c In Range("j2:j5000")
        zipcode = c.Value

        If zipcode <> "" Then
            If WorksheetFunction.CountIf(Range("a:a"), zipcode) > 0 Then
                Store = "Bullhead"
            Else
                Store = "Kingman"
            End If
            c.Offset(0, 2) = Store
        End If
    Next
End Sub
于 2013-09-04T14:51:16.123 回答