当前位置: 首页 > 知识库问答 >
问题:

VBA用于搜索列中的字符串并根据相邻单元格中是否存在特定字符串复制整行

邵绪
2023-03-14

我是VBA新手。我有包含数字和字符串的excel数据表。我想在列中搜索特定字符串,比如“CYP”,然后在列C中查找其行的一个单元格,并复制包含单元格C字符串的整行。我想粘贴在同一工作簿的第2页中,并再次循环以查找列中剩余的CYP。

你能帮我一下吗?

根据pnuts的建议,下面是我的宏代码

Sub Macro1()
'
' Macro1 Macro
'

'
    Columns("I:I").Select
    Range("I729").Activate
    Selection.Find(What:="cyp", After:=ActiveCell, LookIn:=xlValues, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False, SearchFormat:=False).Activate
    ActiveWindow.SmallScroll Down:=5
    Range("C749").Select
    Selection.Copy
    Columns("C:C").Select
    Range("C734").Activate
    Selection.Find(What:="EPT001TT0601C000151", After:=ActiveCell, LookIn:= _
        xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext _
        , MatchCase:=False, SearchFormat:=False).Activate
    Rows("746:750").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Sheet2").Select
    ActiveSheet.Paste
End Sub

在这段代码中,在I749中找到了CYP,单元格C749被复制为字符串,搜索C列中包含相同字符串的第一行,然后复制整行,然后再复制4行,然后粘贴到同一工作簿的Sheet2中。我想要的是将此操作一遍又一遍地循环到第I列的末尾并重复相同的操作。

非常感谢。

共有1个答案

楚修为
2023-03-14

在Excelforum的Trebor76的帮助下,我成功地解决了这个问题。在这里,我以这种方式给出解决方案,这可能对像我这样有类似问题的新手有所帮助。

Option Explicit
Sub Macro1()

    'Written and assisted by Trebor76

    'Copy an entire row from Sheet1 to Sheet2 for each unique matching item in Col. C if the text in Col. I contains the text 'CYP' (case sensitive)

    'http://www.excelforum.com/excel-programming-vba-macros/962511-vba-for-searching-string-in-a-column-and-copy-rows-depending-on-string-in-adjacent-cell.html

    Dim rngCell As Range
    Dim objMyUniqueArray As Object
    Dim lngMyArrayCounter As Long
    Dim lngMyRow As Long
    Dim varMyItem As Variant

    Application.ScreenUpdating = False

    Set objMyUniqueArray = CreateObject("Scripting.Dictionary")

    For Each rngCell In Sheets("Sheet1").Range("I1:I" & Sheets("Sheet1").Range("I" & Rows.Count).End(xlUp).Row)
        If InStr(rngCell, "CYP") > 0 Then
            If Not objMyUniqueArray.Exists(Trim(Cells(rngCell.Row, "C"))) Then
                lngMyArrayCounter = lngMyArrayCounter + 1
                objMyUniqueArray.Add (Trim(Cells(rngCell.Row, "C"))), lngMyArrayCounter
                varMyItem = Sheets("Sheet1").Cells(rngCell.Row, "C")
                For lngMyRow = 1 To Sheets("Sheet1").Cells(Rows.Count, "C").End(xlUp).Row
                    If Sheets("Sheet1").Cells(lngMyRow, "C") = varMyItem Then
                        Rows(lngMyRow).Copy Destination:=Sheets("Sheet2").Range("A" & Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row + 1)
                    End If
                Next lngMyRow
            End If
        End If
    Next rngCell

    Set objMyUniqueArray = Nothing

    Application.ScreenUpdating = True

    MsgBox "All applicable rows have been copied.", vbInformation

End Sub

干杯

 类似资料:
  • 本文向大家介绍使用MySQL搜索字符串中的特定字符?,包括了使用MySQL搜索字符串中的特定字符?的使用技巧和注意事项,需要的朋友参考一下 为此,请使用REGEXP。例如,字符J,A,V和A。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是使用MySQL在字符串中搜索字符的查询- 这将产生以下输出-

  • 问题内容: 如何从Clob列获取特定的字符串? 我有以下数据,存储在名为clob的列中 我想从列中搜索字符串 我已经尝试过 上面从我的表中获取全文。 任何帮助都是非常明显的。 问候 问题答案: 就像常规InStr和SubstStr函数一样,使用dbms_lob.instr和dbms_lob.substr。 看一个简单的例子:

  • 我有像这样的字符串: (或) 我想看看这个字符串是否有单词“place”。 如果它们是我使用的字符串中的单词,则包含("place")。因为这是所有一个字符串,我尝试拆分但它给出了语法错误。你能让我知道如何获取它吗?

  • 我怀疑这可能是VBA的工作,这超出了我的能力。但情况是这样的: 表1(CAS1)中的A列包含x行文本值 第2页(CAS2)中的A列包含x行文本值 A部分-对于CAS1中的每个行值,我需要知道字符串是否包含在CAS2中的任何单元格中。不完全匹配,字符串只能是搜索单元格的一部分。 B部分-我需要知道CAS2中包含CAS1值的每个单元格的单元格值(如果它们确实存在,可以在CAS1中搜索的单元格旁边的单元

  • 我的问题 当我搜索时,它会按要求返回,但当我搜索时,它会返回,为什么会出现这种情况,以及如何修复它?

  • 本文向大家介绍在Java中搜索字符串中的字符。,包括了在Java中搜索字符串中的字符。的使用技巧和注意事项,需要的朋友参考一下 您可以使用String类的方法在字符串中搜索特定字母。此方法返回字符串中单词的位置索引(如果找到)。否则返回-1。 示例 输出结果