Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA;查找变量的多个实例并将范围复制到另一个工作表_Vba_Match_Lookup - Fatal编程技术网

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的新手,如

我目前有一个电子表格选项卡,其中包含各种客户支付的金额。每个客户机通常有多行。我需要做的是能够选择该客户端的所有实例,然后将该客户端每个实例的所有数据列复制到另一个选项卡中。目前我只知道如何选择记录的第一个实例

例如,我想把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的初学者。好的。!!如果你有编辑功能,但你不是初学者,那么就要有建设性地开始做。容易给出简单的建议。好的。!!