Excel 如果满足条件,则复制所选单元格

Excel 如果满足条件,则复制所选单元格,excel,vba,Excel,Vba,我在一张纸上有一张名单, A列:6-33包含一些客户的名称 B列:6-33空 C列:6-33空 我还有第四张: 列A 5000客户端名称 C&F栏有该客户的重要数据,我需要将其复制到第3页的B&C栏 所以当Sheet3.Cell Ax==Sheet4.Cell Ax Sheet3.B和C需要复制Sheet4.C和F 不知怎的,我没能把循环弄对。 现在我有隧道视力,似乎无法解决这个问题。一个可能的解决方案是VLOOKUP函数: 第3页 B列公式(导入单元格B6中的公式并向下拖动): =VLOO

我在一张纸上有一张名单, A列:6-33包含一些客户的名称 B列:6-33空 C列:6-33空

我还有第四张: 列A 5000客户端名称 C&F栏有该客户的重要数据,我需要将其复制到第3页的B&C栏

所以当
Sheet3.Cell Ax==Sheet4.Cell Ax
Sheet3.B
C
需要复制
Sheet4.C
F

不知怎的,我没能把循环弄对。
现在我有隧道视力,似乎无法解决这个问题。

一个可能的解决方案是
VLOOKUP
函数:

第3页

  • B列公式(导入单元格B6中的公式并向下拖动):
=VLOOKUP(A6,第4页!$A$1:$F$5000,3,0)

  • C列公式(导入单元格C6中的公式并向下拖动):
=VLOOKUP(A6,第4页!$A$1:$F$5000,6,0)

VBA代码:

Option Explicit

Sub tes()

     Dim ws3 As Worksheet, ws4 As Worksheet
     Dim i As Long
     Dim rngSearch As Range, rngFound As Range
     Dim arr As Variant
     Dim strValueC As String, strValueF As String

     With ThisWorkbook
        Set ws3 = .Worksheets("Sheet3")
        Set ws4 = .Worksheets("Sheet4")
     End With

     With ws3
        arr = .Range("A6:A33")
        .Range("B6:C33").Clear
     End With

     Set rngSearch = ws4.Range("A1:A5000")

     For i = LBound(arr) To UBound(arr)

        Set rngFound = rngSearch.Find(What:=arr(i, 1), LookIn:=xlValues, LookAt:=xlWhole)

        If Not rngFound Is Nothing Then

            With ws4
                strValueC = .Range("C" & rngFound.Row).Value
                strValueF = .Range("F" & rngFound.Row).Value
            End With

            With ws3
                .Range("B" & i + 5).Value = strValueC
                .Range("C" & i + 5).Value = strValueF
            End With

        End If

     Next i

End Sub

一种可能的解决方案是
VLOOKUP
函数:

第3页

  • B列公式(导入单元格B6中的公式并向下拖动):
=VLOOKUP(A6,第4页!$A$1:$F$5000,3,0)

  • C列公式(导入单元格C6中的公式并向下拖动):
=VLOOKUP(A6,第4页!$A$1:$F$5000,6,0)

VBA代码:

Option Explicit

Sub tes()

     Dim ws3 As Worksheet, ws4 As Worksheet
     Dim i As Long
     Dim rngSearch As Range, rngFound As Range
     Dim arr As Variant
     Dim strValueC As String, strValueF As String

     With ThisWorkbook
        Set ws3 = .Worksheets("Sheet3")
        Set ws4 = .Worksheets("Sheet4")
     End With

     With ws3
        arr = .Range("A6:A33")
        .Range("B6:C33").Clear
     End With

     Set rngSearch = ws4.Range("A1:A5000")

     For i = LBound(arr) To UBound(arr)

        Set rngFound = rngSearch.Find(What:=arr(i, 1), LookIn:=xlValues, LookAt:=xlWhole)

        If Not rngFound Is Nothing Then

            With ws4
                strValueC = .Range("C" & rngFound.Row).Value
                strValueF = .Range("F" & rngFound.Row).Value
            End With

            With ws3
                .Range("B" & i + 5).Value = strValueC
                .Range("C" & i + 5).Value = strValueF
            End With

        End If

     Next i

End Sub
Dim clientrange作为范围
将搜索范围变暗为范围
我想我会坚持多久
设置clientrange=ActiveWorkbook.Sheets(3).Range(“A6”)'您可能必须使用工作表(“sheet3”)
使用ActiveWorkbook.Sheets(4)时,您可能必须使用工作表(“sheet4”)
而clientrange.Text“”
'在sheet4中搜索客户
对于i=1至5000
如果.Range(“A”&i)=clientrange.Text,则
'复制值
clientrange.Offset(0,1)=.范围(“C”和i)
clientrange.Offset(0,2)=.范围(“F”和“i”)
退出
如果结束
接下来我
“下一个
设置clientrange=clientrange.Offset(1,0)
温德
以
调暗clientrange作为范围
将搜索范围变暗为范围
我想我会坚持多久
设置clientrange=ActiveWorkbook.Sheets(3).Range(“A6”)'您可能必须使用工作表(“sheet3”)
使用ActiveWorkbook.Sheets(4)时,您可能必须使用工作表(“sheet4”)
而clientrange.Text“”
'在sheet4中搜索客户
对于i=1至5000
如果.Range(“A”&i)=clientrange.Text,则
'复制值
clientrange.Offset(0,1)=.范围(“C”和i)
clientrange.Offset(0,2)=.范围(“F”和“i”)
退出
如果结束
接下来我
“下一个
设置clientrange=clientrange.Offset(1,0)
温德
以

到目前为止,您尝试了什么?在哪里遇到了问题?对于循环经过的第一个单元格,我只能得到一个值。我无法循环整个数据。自2010年以来,我就没有用VB编程过,这简直让我受不了了。我应该在不到3小时内准备好。你可以用vlookup来做这个-不需要VBAI需要能够用一个按钮来做。你到目前为止尝试了什么,在哪里遇到了问题?我只能为循环经过的第一个单元格得到一个值。我无法循环整个数据。自2010年以来,我就没有用VB编程过,这简直让我受不了了。我应该在不到3小时内准备好。你可以用vlookup来做这件事-不需要VBAI需要能够用按钮来做我不能用vlookup,因为我需要写一个宏并将它分配给一个按钮,当它被点击时,它将导入数据。@ErsonCokaj我已经用
array
&
查找方法
,可提供更快的结果。你可以给我一个测试我不能使用VLOOKUP,因为我需要写一个宏并将它分配给一个按钮,当它被点击时,它将导入数据。@Ersonokaj我已经更新了答案,也可以使用VBA使用
array
&
Find method
,这提供了更快的结果。你可以给我一个测试,我想你的代码工作得很好。非常感谢你,我欠你一杯咖啡。如果可以的话,我想问另一个问题。对于范围i=1到5049,sheet3中的单元格可能是==到sheet4中的许多单元格。如何计算在表格中找到每个单元格的次数4.您可以添加计数器。在这种情况下,您必须删除“exit for”,您的代码工作得非常好。非常感谢你,我欠你一杯咖啡。如果可以的话,我想问另一个问题。对于范围i=1到5049,sheet3中的单元格可能是==到sheet4中的许多单元格。如何计算在表格中找到每个单元格的次数4.您可以添加计数器。在这种情况下,您必须删除“退出”。