从单元格中提取文本

时间:2015-06-18 09:05:39

标签: excel

我有一个搜索功能,可以很好地搜索精确数值,但我需要对其进行调整,以便在单元格中搜索文本并仅提取该文本。例如,它搜索第7列。在第7列中,可能有一个包含单词Interface - HPT,SAS,LPT的单元格。理想情况下,我想搜索单词Interface - HPT然后从单元格中提取此文本。我还需要搜索功能才能为多个不同的值执行此操作。例如,运行搜索Interface - HPT 接口 - SAS和接口LPT彼此分离。这可能吗?

这是我目前的代码:

Sub InterfaceMacro()

Dim Headers() As String: Headers = _
    Split("Target FMECA,Part I.D,Line I.D,Part No.,Part Name,Failure Mode,Assumed System Effect,Assumed Engine Effect", ",")

    Worksheets.Add().Name = "Interface"
    Dim wsInt As Worksheet: Set wsInt = Sheets("Interface")
    wsInt.Move after:=Worksheets(Worksheets.Count)
    wsInt.Cells.Clear

    Application.ScreenUpdating = False

    With wsFHA
        For i = 0 To UBound(Headers)
            .Cells(2, i + 2) = Headers(i)
            .Columns(i + 2).EntireColumn.AutoFit
        Next i
        .Cells(1, 2) = "Interface TABLE"
        .Range(.Cells(1, 2), .Cells(1, UBound(Headers) + 2)).MergeCells = True
        .Range(.Cells(1, 2), .Cells(1, UBound(Headers) + 2)).HorizontalAlignment = xlCenter
        .Range(.Cells(1, 2), .Cells(2, UBound(Headers) + 2)).Font.Bold = True
    End With

    Dim SourceCell As Range, FirstAdr As String
    Dim RowCounter As Long: RowCounter = 3

    Dim SearchTarget() As String
    SearchTarget = Split("9.1,18.0", ",")

    For i = 0 To UBound(SearchTarget)
        If Worksheets.Count > 1 Then
            For j = 1 To Worksheets.Count - 1
            With Sheets(j)
                Set SourceCell = .Columns(7).Find(SearchTarget(i), LookAt:=xlWhole)
                If Not SourceCell Is Nothing Then
                    FirstAdr = SourceCell.Address
                    Do
                        wsInt.Cells(RowCounter, 2).Value = SearchTarget(i)
                        wsInt.Cells(RowCounter, 3).Value = .Cells(SourceCell.Row, 6).Value
                        wsInt.Cells(RowCounter, 4).Value = .Cells(3, 10).Value
                        wsInt.Cells(RowCounter, 5).Value = .Cells(2, 10).Value
                        wsInt.Cells(RowCounter, 6).Value = .Cells(SourceCell.Row, 2).Value
                        For k = 0 To SourceCell.Row - 1
                            If .Cells(SourceCell.Row - k, 3).Value <> "continued." Then
                                wsFHA.Cells(RowCounter, 7).Value = .Cells(SourceCell.Row - k, 3).Value
                                Exit For
                            End If
                        Next k
                        wsInt.Cells(RowCounter, 8).Value = .Cells(SourceCell.Row, 14).Value
                        Set SourceCell = .Columns(7).FindNext(SourceCell)
                        RowCounter = RowCounter + 1
                    Loop While Not SourceCell Is Nothing And SourceCell.Address <> FirstAdr
                End If
            End With
            Next j
        End If
    Next i


    End Sub

我认为需要编辑的部分是本节

Dim SourceCell As Range, FirstAdr As String
        Dim RowCounter As Long: RowCounter = 3

        Dim SearchTarget() As String
        SearchTarget = Split("9.1,18.0", ",")

        For i = 0 To UBound(SearchTarget)
            If Worksheets.Count > 1 Then
                For j = 1 To Worksheets.Count - 1
                With Sheets(j)
                    Set SourceCell = .Columns(7).Find(SearchTarget(i), LookAt:=xlWhole)
                    If Not SourceCell Is Nothing Then
                        FirstAdr = SourceCell.Address

1 个答案:

答案 0 :(得分:1)

您可以将数组定义为与为数字定义数组相同的方式进行搜索。

要搜索部分单元格内容,您需要将.Find(SearchTarget(i), LookAt:=xlWhole)更改为.Find(SearchTarget(i), LookAt:=xlPart)

VBA在公式/结果中查找的方式与在“查找/替换”对话框中的工作方式相同。 (将.LookIn设置为xlValuesxlFormulas