Excel 如果满足条件,则复制所选单元格
我在一张纸上有一张名单, A列:6-33包含一些客户的名称 B列:6-33空 C列:6-33空 我还有第四张: 列A 5000客户端名称 C&F栏有该客户的重要数据,我需要将其复制到第3页的B&C栏 所以当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
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.您可以添加计数器。在这种情况下,您必须删除“退出”。