Excel VBA-如果a列中的单元格=值,则将同一行的B、C、D列复制到新工作表中

Excel VBA-如果a列中的单元格=值,则将同一行的B、C、D列复制到新工作表中,excel,vba,Excel,Vba,我正在努力寻找任何我可以在这方面使用的信息。在来这里之前,我进行了大量的搜索,如有任何帮助,我将不胜感激。我有一些基本的VBA,但这是有点先进,甚至知道从哪里开始从头开始 如果a列中的单元格=值,则将源工作表的B、C、D列复制到新工作表的a、B、C列 这里有一个例子 谢谢 你应该问得更清楚些,这样我们才能帮助你。每一步都很简单。只是不知道你真正需要什么。你说你做了一些VBA,所以我认为你有基本的。 对于“ColumnA=Value”部分,我假设您询问的是值是否包含在A列的某个地方。 对于“将

我正在努力寻找任何我可以在这方面使用的信息。在来这里之前,我进行了大量的搜索,如有任何帮助,我将不胜感激。我有一些基本的VBA,但这是有点先进,甚至知道从哪里开始从头开始

如果a列中的单元格=值,则将源工作表的B、C、D列复制到新工作表的a、B、C列

这里有一个例子


谢谢

你应该问得更清楚些,这样我们才能帮助你。每一步都很简单。只是不知道你真正需要什么。你说你做了一些VBA,所以我认为你有基本的。 对于“ColumnA=Value”部分,我假设您询问的是值是否包含在A列的某个地方。 对于“将B、C、D列复制到新工作表上的A、B、C列”,我假设您正在复制整个列。 下面的代码将帮助你组织你的想法,并可能让你开始

Sub YourMacr(ByVal compare_value)
    Dim arr As Variant, srcSheet As Worksheet, destSheet As Worksheet
    Set srcSheet = Sheets("xxxxxx")
    Set destSheet = Sheets("xxxxx")
    arr = srcSheet.Columns("A:A")
    If IsInArray(compare_value, arr) Then
        srcSheet.Columns("B:D").Copy
        destSheet.Columns("A:C").PasteSpecial xlPasteValues
    End If
End Sub

Private Function IsInArray(target As Variant, arr As Variant) As Boolean
    Dim ele As Variant
    On Error GoTo IsInArrayError:
    For Each ele In arr
        If ele = target Then
            IsInArray = True
            Exit Function
        End If
    Next ele
    Exit Function
IsInArrayError:
    On Error GoTo 0
    IsInArray = False
End Function
根据您对问题的新描述,您希望将特定行复制粘贴到新工作表,而不是将整个数据网格复制粘贴到工作表。然后,我更喜欢使用数组来完成任务。下面的代码将很好地帮助您。希望这能让你开始

Public Sub YourMacr(ByVal compare_val)
    Dim srcSheet As Worksheet, destSheet As Worksheet

    Set srcSheet = ThisWorkbook.Sheets("your source sheet name ..........")
    Set destSheet = ThisWorkbook.Sheets("your new sheet name ...........")

    'Determine the last row in the source sheet, here I assume your data is on continues range and start from row 1
    Dim lastRow As Long
    lastRow = srcSheet.Range("A1").End(xlDown).Row

    'Loop through the column A, find which rows has value wanted
    ReDim idx_arr(1 To lastRow)
    Dim cnt As Integer
    cnt = 0
    For i = 1 To lastRow
        If srcSheet.Cells(i, 1).Value = compare_value Then
            cnt = cnt + 1
            idx_arr(cnt) = i
        End If
    Next

    If cnt = 0 Then Exit Sub

    For i = 1 To cnt
        destSheet.Cells(i, "A").Value = srcSheet.Cells(idx_arr(i), "B")
        destSheet.Cells(i, "B").Value = srcSheet.Cells(idx_arr(i), "C")
        destSheet.Cells(i, "C").Value = srcSheet.Cells(idx_arr(i), "D")
    Next i

    Dim targetRows(1 To 10000)

End Sub

价值是什么?静止的动态文本数字?要逐行复制吗?或者如果
列A中有任何值
=
,则复制
B
C
D
?这是环路吗?当人们有很多问题的时候,它暗示了一个问得不好的问题。您也没有共享任何代码尝试。我添加了一个示例来说明我正在尝试做什么,希望这比我解释它的拙劣尝试更具体。我没有分享任何代码尝试,因为它会冒犯眼睛和心灵。我已经做了一些更基本的VBA(这对你来说可能是基本的),但我甚至不知道从哪里开始。谢谢你的提示!谢谢,这很有帮助!为了更具体,我添加了一些示例。基本上,我有一个包含4个数据源的工作表,我需要为每个数据源创建一个单独的工作表。因此,如果a列中的单元格=Value1,我需要同一行的B、C、D列中的单元格转到新工作表。我希望我解释得足够好。我感谢你的帮助@克里斯很高兴你觉得这很有帮助。根据你修改过的问题,我创建了一个新的脚本,可以做你想做的。太好了,我将尝试一下。非常感谢你!