VBA;查找变量的多个实例并将范围复制到另一个工作表
我目前有一个电子表格选项卡,其中包含各种客户支付的金额。每个客户机通常有多行。我需要做的是能够选择该客户端的所有实例,然后将该客户端每个实例的所有数据列复制到另一个选项卡中。目前我只知道如何选择记录的第一个实例 例如,我想把ID为1的客户端的所有实例放到另一个选项卡中 数据选项卡 身份证金额 1.20英镑 2.10英镑 3.15英镑 1.10英镑 2.20英镑 发票页签 身份证金额 1.20英镑 1.10英镑 我希望我已经解释得足够好了,但是如果你需要更多的细节,请告诉我。 我是VBA的新手,如果这是一个非常简单的问题,我很抱歉 提前感谢:) 埃塔 我试图修改我发现的一段代码,但它根本不起作用VBA;查找变量的多个实例并将范围复制到另一个工作表,vba,match,lookup,Vba,Match,Lookup,我目前有一个电子表格选项卡,其中包含各种客户支付的金额。每个客户机通常有多行。我需要做的是能够选择该客户端的所有实例,然后将该客户端每个实例的所有数据列复制到另一个选项卡中。目前我只知道如何选择记录的第一个实例 例如,我想把ID为1的客户端的所有实例放到另一个选项卡中 数据选项卡 身份证金额 1.20英镑 2.10英镑 3.15英镑 1.10英镑 2.20英镑 发票页签 身份证金额 1.20英镑 1.10英镑 我希望我已经解释得足够好了,但是如果你需要更多的细节,请告诉我。 我是VBA的新手,如
'What value do you want to find (must be in string form)?
fnd = 1
Set myRange = Worksheets("Data").Range("I:AC")
Set LastCell = Worksheets("Data").Cells(myRange.Cells.Count)
Set FoundCell = myRange.Find(what:=fnd, after:=LastCell)
'Test to see if anything was found
If Not FoundCell Is Nothing Then
FirstFound = FoundCell.Address
Else
GoTo NothingFound
End If
Set rng = FoundCell
'Loop until cycled through all unique finds
Do Until FoundCell Is Nothing
'Find next cell with fnd value
Set FoundCell = myRange.FindNext(after:=FoundCell)
'Add found cell to rng range variable
Set rng = Union(rng, FoundCell)
'Test to see if cycled through to first found cell
If FoundCell.Address = FirstFound Then Exit Do
Loop
'Select Cells Containing Find Value
rng.Select
Exit Sub
请试试这个。目前,它为每个客户端创建多个工作表。如果需要,您应该能够更改行为,一旦您完成了代码,这是显而易见的
Sub MakeInvoiceSheets()
Dim ws As Worksheet, strStartCol As String, strEndCol As String, iStartRow As Integer, iEndRow As Integer
Dim iClient As String, wsInv As Worksheet, strCompletedClients As String
iStartRow = 1
iEndRow = 8
strStartCol = "A"
strEndCol = "B"
Set ws = Sheets("Client")
strCompletedClients = ","
For irow = iStartRow + 1 To iEndRow
iClient = ws.Range(strStartCol & irow).Text
If InStr(1, strCompletedClients, "," & iClient & ",") <= 0 Then
ws.Select
ws.Range("$" & strStartCol & "$" & iStartRow & ":$" & strEndCol & "$" & iEndRow).AutoFilter Field:=1, Criteria1:="=" & iClient
ws.Range(strStartCol & iStartRow).Select
ws.Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.Copy
Set wsInv = Sheets.Add(After:=Sheets(Sheets.Count))
wsInv.Name = "Invoice For Client " & iClient
wsInv.Paste
ws.AutoFilterMode = False
strCompletedClients = strCompletedClients & iClient & ","
End If
Next
End Sub
Sub-MakeInvoiceSheets()
Dim ws作为工作表,strStartCol作为字符串,strEndCol作为字符串,iStartRow作为整数,iEndRow作为整数
Dim iClient作为字符串,wsInv作为工作表,strCompletedClient作为字符串
iStartRow=1
iEndRow=8
strStartCol=“A”
strengdcol=“B”
设置ws=Sheets(“客户端”)
strCompletedClient=“,”
对于irow=iStartRow+1到iEndRow
iClient=ws.Range(strStartCol&irow).Text
如果InStr(1,strCompletedClients,“,”&iClient&“,”),您应该显示代码。没问题,这是对的还是错的。好啊如果显示,我们可以轻松理解并快速解决您的问题。我添加了一段我找到的代码来选择客户端1的所有实例,并尝试对其进行调整,但不起作用:(克里希纳先生,你应该在你的答案中添加一些代码注释。这样,他就很容易理解了。因为他是VBA的初学者。好的。!!如果你有编辑功能,但你不是初学者,那么就要有建设性地开始做。容易给出简单的建议。好的。!!