【问题标题】:VBA - copy cells from another sheet based on multiple criteriaVBA - 根据多个条件从另一个工作表复制单元格
【发布时间】:2017-03-20 11:14:48
【问题描述】:

我是 VBA 新手,遇到了非常糟糕的问题。 我有两个工作表。我必须根据每个客户的地址为他们分配一个销售人员。 在 Sheet1 上,我使用三个数据列,Zip (K)、City (I) 和 Country (L)。 在 Sheet2 上,我在 B 列和 C 列(低值和高值)、城市 (D) 和国家 (E) 中有一个邮政编码范围。每一行都有指定销售人员的姓名。

对代码的要求: 检查客户所在国家/地区是否与第一个销售人员所在国家/地区匹配。 如果是,请检查客户的邮政编码是否在范围内。如果匹配,则将销售人员姓名复制到 Sheet1 并移至下一行。 如果在 Sheet2 上没有给出 Zip 范围作为标准,或者客户的 zip 不匹配,请检查 City 是否匹配,如果匹配,则将销售人员姓名复制到 Sheet1 并移动到下一行。如果 Sheet2 上没有给出城市作为条件或客户所在城市不匹配,请检查国家/地区是否匹配并将销售人员姓名复制到 Sheet1。

到目前为止,如果有的话:

`Sub Territory()
    Dim i As Integer
    Dim sh1 As Worksheet, sh2 As Worksheet
   Dim sh1Rws As Long, sh1Rng As Range, s1 As Range
   Dim sh2lowRws As Long, sh2lowRng As Range, s2l As Range
   Dim sh2highRws As Long, sh2highRng As Range, s2h As Range

   Set sh1 = Sheets("Sheet1")
   Set sh2 = Sheets("Sheet2")
   Set i = 1
   With sh1
        sh1Rws = .Cells(Rows.Count, "K").End(xlUp).Row
        Set sh1Rng = .Range(.Cells(1, "K"), .Cells(sh1Rws, "K"))
    End With

    With sh2l
        sh2lowRws = .Cells(Rows.Count, "B").End(xlUp).Row
        Set sh2lowRng = .Range(.Cells(1, "B"), .Cells(sh2lowRws, "B"))
    End With
    With sh2h
        sh2highRws = .Cells(Rows.Count, "C").End(xlUp).Row
        Set sh2highRng = .Range(.Cells(1, "C"), .Cells(sh2highRws, "C"))
    End With

    For Each s1 In sh1Rng
        For Each s2l In sh2lowRng
            If s1 > s2l And s1 < s2h Then sh2lowRws.Copy       Destination:=Sheet.sh1.Range("u", i)
            End If
            Set i = i + 1

    End Sub`

【问题讨论】:

  • 您的两个循环都没有关闭,并且您的 End If 不是必需的 - 这是我所看到的最明显的错误......除此之外,无法提供帮助,因为您实际上还没有说代码有什么问题以及错误发生在哪里
  • 在分配整数等基本变量时也不要使用Set(参见set i = ...)。 Set 关键字仅在分配对象引用时使用。
  • Set sh1 = Sheets("Sheet1") Set sh2 = Sheets("Sheet2") With sh1 sh1Rws = .Cells(Rows.Count, "I").End(xlUp).Row Set sh1Rng = .Range(.Cells(1, "I"), .Cells(sh1Rws, "I")) End With With sh2l sh2Rws = .Cells(Rows.Count, "D").End(xlUp).Row Set sh2Rng = .Range(.Cells(1, "D"), .Cells(sh2Rws, "D")) End With For Each s1 In sh1Rng For Each s2 In sh2Rng If s1 = s2 Then MsgBox "Test" Next s2 Next s1 End Sub
  • 感谢您看这个!!它不会显示正确的格式...(或者我无法使用该站点:))。我收到此代码的运行时错误 424。我不能执行的操作:复制包含匹配条件的行并创建一个用于 zip 验证的条件

标签: vba excel


【解决方案1】:

试试下面的代码,让我知道它是否有效或需要更改

Sub test()
i = Sheets(1).Range("a1048576").End(xlUp).Row
l = Sheets(2).Range("a1048576").End(xlUp).Row

    For k = 2 To i
        For x = 2 To l
        CityCus = Sheets(1).Range("I" & k).Value
        CitySales = Sheets(2).Range("D" & x).Value

        CotyCus = Sheets(1).Range("L" & k).Value
        CotySales = Sheets(2).Range("E" & x).Value

        ZipCus = Sheets(1).Range("K" & k).Value
        ZipUpperSales = Sheets(2).Range("B" & x).Value
        ZiplowerSales = Sheets(2).Range("C" & x).Value

        c = Sheets(1).Range("b" & k).Value
        d = Sheets(2).Range("A" & x).Value

            If CotyCus = CotySales Then
                If CityCus = CitySales Then

                     If ZipCus <= ZiplowerSales And ZipCus >= ZipUpperSales Then

                       Sheets(1).Range("b" & k).Value = Sheets(2).Range("A" & x).Value
                     End If
                End If
             End If
        Next
    Next
End Sub

【讨论】:

  • 您好,我更改了订单,但除此之外一切正常,谢谢!!!
猜你喜欢
  • 2014-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多