搜索/过滤Excel工作表中的所有列以获取字符串,然后将包含的行复制到另一个工作表中的第一个空行

时间:2013-04-15 11:37:17

标签: vba

新的stackoverflow和VBA(以及通常在较小程度上编写脚本)所以,如果我违反了任何规则或犯了任何愚蠢的错误,我会道歉。

目前我有一个包含多个字符串的一维数组。我想构建一个循环,为数组中的每个字符串搜索字符串的sheet1列的所有,然后将包含的行复制到sheet2中的第一个空行。

问题是我找不到一个内置的子程序,它允许我搜索搜索词的多个/所有列,只搜索单个列中的列。我认为有内置的东西可以做到这一点,因为它似乎是一件显而易见的事情 - 我在哪里可以找到它?如果你感觉很亲切并且你有一些示例代码,请发布它:)

谢谢,
路易斯

P.S。如果有人想要推荐一些VBA指南/文档,请做!我的google fu很弱,到目前为止我找不到多少。

1 个答案:

答案 0 :(得分:0)

这不是一个非常有效的代码,但它应该让你非常清楚如何使用循环(列,行,数组)
note :如果您的电子表格中有某种结构(例如标题),那么您可以在行中找到最后使用的列 - 这比循环遍历所有列更有效片材。

   Sub doTheJob()
        Application.ScreenUpdating = False
        Dim ws1 As Worksheet, ws2 As Worksheet, arr() As String, str$, i&, j&, k&

        Set ws1 = ThisWorkbook.Sheets(1)
        Set ws2 = ThisWorkbook.Sheets(2)

        str = "this is your string"
        arr = Split(str, " ")

        For i = 1 To ws1.Columns.Count
            For j = 1 To ws1.Cells(Rows.Count, i).End(xlUp).Row
                For k = LBound(arr) To UBound(arr)
                    If StrComp(CStr(ws1.Cells(j, i).Value), arr(k), vbTextCompare) = 0 Then
                        ws1.Rows(j & ":" & j).Select
                        Selection.Copy
                        Dim nxt&
                        nxt = ws2.Range("A" & Rows.Count).End(xlUp).Row + 1
                        ws2.Rows(nxt & ":" & nxt).Select
                        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                        :=False, Transpose:=False
                    End If
                Next k
            Next j
        Next i
    Application.ScreenUpdating = True
End Sub

发布编辑 - 现在应该复制整行......