VBA搜索和复制

时间:2016-06-22 20:21:06

标签: vba excel-vba excel

我正在自动执行我必须做的更新,并且我要编写的宏的一部分需要来自填充内容的特定文本。 我在同一列中有以下几种类型的文本,包含数百行:

ScreenRecording ^的 naushi02 ^ PROCR ^ 10035

PROCR ^ 10635 ^ ScreenRecording ^的 misby01

ScreenRecording ^的 liw03 ^ PROCR ^ 10046

粗体我需要的文字。我想用我需要的东西替换整个文本,或者在下一列,同一行中放置我需要的东西。

在我意识到格式存在差异之前,我已经写了一些可以工作60行的东西。对于主要的,这一切都是一样的,这就是我一开始没有意识到的原因,我花了很多时间浪费时间写一些现在没用的东西......所以我请求专家帮助。

一旦我从第一行得到了我需要的东西,我需要向下移动直到最后一个条目重复。

我有一些显然没有完全运作的代码。

我考虑过在搜索中使用“ScreenRecording”文本以及我在键盘上找不到的特殊字符,然后尝试从该点复制所有文本,包括第二个数字字符。我不知道该怎么做,如果它能起作用,或者即使这是一个好主意,但因为我花了很多时间试图解决它,我需要一些帮助。

提前致谢

2 个答案:

答案 0 :(得分:2)

如果您总是希望在单词' ScreenRecording`之后返回值,则可以使用以下函数来执行此操作。

如果需要,请将其包含在SubRoutine中进行替换:

Function SplitScreenRecording(sInput As String) As String
    Dim a As Variant

    Const SDELIM As String = "^"
    Const LOOKUP_VAL As String = "ScreenRecording"

    a = Split(sInput, SDELIM)

    If IsError(Application.Match(LOOKUP_VAL, a, 0)) Then
        SplitScreenRecording = CVErr(2042)
    Else
        SplitScreenRecording = a(Application.Match(LOOKUP_VAL, a, 0))
    End If
End Function

Sub ReplaceInPlace()
    Dim rReplace As Range
    Dim rng As Range

    Set rReplace = Range("A1:A3")

    For Each rng In rReplace
        rng.Value = SplitScreenRecording(rng.Value)
    Next rng
End Sub

答案 1 :(得分:0)

如果你想替换:

Sub main2()
    Dim key As String
    Dim replacementStrng As String

    key = "ScreenRecording"
    replacementStrng = "AAA"
    With Worksheets("mysheet01").columns("A") '<--| change "mysheet01" and "A" to your actual sheet name and column to filter
        .Replace what:=key & "^*^", replacement:=key & "^" & replacementStrng & " ^ ", LookAt:=xlPart
        .Replace what:="^" & key & "^*", replacement:="^" & key & "^" & replacementStrng, LookAt:=xlPart
    End With
End Sub

如果你想在下一栏中放置你需要的东西:

Sub main()
    Dim myRng As Range

    Set myRng = GetRange(Worksheets("mysheet01").columns("A"), "ScreenRecording^") '<--| change "mysheet01" and "A" to your actual sheet name and column to filter
    myRng.Offset(, 1) = "value that I need to place in next row" '<--| change the right part of the assignment to what you need
End Sub

Function GetRange(rng As Range, key As String) As Range
    With rng
        .AutoFilter Field:=1, Criteria1:="*" & key & "*" '<--| apply current filtering
        If Application.WorksheetFunction.Subtotal(103, .Cells) > 0 Then '<--| if there are visible cells other than the "header" one
            With .SpecialCells(xlCellTypeConstants)
                If InStr(.SpecialCells(xlCellTypeVisible).Cells(1, 1), key  & "^") > 0 Then
                    Set GetRange = .SpecialCells(xlCellTypeVisible) '<--|select all visible cells
                Else
                    Set GetRange = .Resize(.Parent.Cells(.Parent.Rows.Count, .Column).End(xlUp).row - 1).Offset(1).SpecialCells(xlCellTypeVisible) '<--|select visible rows other than the first ("headers") one
                End If
            End With
        End If
        .Parent.AutoFilterMode = False '<--| remove drop-down arrows
    End With
End Function