2017-09-01 10 views
0

おはようコピーすべて、私は私の状況をカバーする、ここにスレッドを見つけようとしてきたが、私は成功していないVBAが含まれているすべてのセルを検索し、隣接

。私は、特定の文字列値を含むすべてのセルを検索する所定の範囲内の(可能であれば複数例えば

"*Text*Text*" that would find "123Text123Text123"ストリング)

、その行からID参照を返すようにしようとしています。これまでのところ私は、しかし、これが唯一のを含む完全一致ではなく、を探し、「もしCell.Value = XXX」のシナリオを使用するために管理している:

intMyVal = InputBox("Please enter Sales Order No.") 
    lngLastRow = Cells(Rows.Count, "A").End(xlUp).Row 
    newrow = 1 
    For Each Cell In Range("D2:D" & lngLastRow) 'Data to search 
     If Cell.Value = intMyVal Then 
      Cells(Cell.Row, 1).Copy 'Copy ID1 value 
      Sheets("TempData").Cells(newrow, 1).PasteSpecial xlPasteValues 'Paste ID1 value in temp data 
      newrow = newrow + 1 
      End If 
    Next Cell 

以下の画像を私が参照していたデータの抽出物を示して。列Dには特定のテキスト文字列(「Tesco」や「Ireland」など)を検索する必要があり、ヒットごとに列Aの対応する値を一時データページにコピーする必要があります。

enter image description here

誰もが素晴らしいことだVBAの検索を使用してこれを行うための正しい方法を提案することができれば。事前に

おかげで、 ダン

答えて

2

ではなく、各セル使用FINDFINDNEXTを見て:

Public Sub FindSales() 

    Dim sValToFind As String 
    Dim rSearchRange As Range 
    Dim sFirstAdd As String 
    Dim rFoundCell As Range 
    Dim rAllFoundCells As Range 
    Dim sMessage As String 

    sValToFind = InputBox("Please enter Sales Order No.") 
    'Code to check a valid number entered 
    '. 
    '. 

    With ThisWorkbook.Worksheets("Sheet1") 
     Set rSearchRange = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)) 
    End With 

    With rSearchRange 
     Set rFoundCell = .Find(sValToFind, LookIn:=xlValues, LookAt:=xlPart) 
     If Not rFoundCell Is Nothing Then 
      sFirstAdd = rFoundCell.Address 
      Do 

       sMessage = sMessage & rFoundCell.Row & ", " 

       'Create a range of found cells. 
       If Not rAllFoundCells Is Nothing Then 
        Set rAllFoundCells = Union(rAllFoundCells, rFoundCell) 
       Else 
        Set rAllFoundCells = rFoundCell 
       End If 
       Set rFoundCell = .FindNext(rFoundCell) 
      Loop While rFoundCell.Address <> sFirstAdd 
     End If 
    End With 

    rAllFoundCells.Copy Destination:=ThisWorkbook.Worksheets("Sheet2").Range("A1") 

    sMessage = sValToFind & " found on rows " & Mid(sMessage, 1, Len(sMessage) - 2) & "." 
    MsgBox sMessage, vbOKOnly + vbInformation 

End Sub 
+0

これは完璧なのおかげです。コピーする必要がある値がルックアップと異なる列にあるので、私は少し修正しました。 '設定しtemp_dest = ThisWorkbook.Worksheets( "TempDataを") rAllFoundCells.Offset(-3).Copy temp_dest.Cells(1、1).PasteSpecialペースト:私は今で持っています= xlPasteValues'' – DannyBarnes01

+0

一つの問題これは、私がさまざまな列に検索を広げているときです。私が上で使用したオフセット方法は、データが見つかる列を知っているときにのみ機能します。肯定的な結果を返すデータの各行に対して、常に列Aのデータをコピーできるように調整できますか?ありがとう、Dan – DannyBarnes01

+0

新しい 'Range'変数を追加することができました。私は' rColA'と呼んでいます。 '見つかったセルの範囲を作成する'コメントの上の行に次のコードを追加します:Set 'rColA = ThisWorkbook.Worksheets(" Sheet1 ")。Cells(rFoundCell.Row、1)'。これは、見つかった行の列Aへの参照を返します。次に、2つの 'Set rAllFoundCells ....'行は 'rFoundCell'を' rColA'に変更します。 'rSearchRange'を任意の列に変更すると、見つかった行の列Aの値が常に返されます。 –

1

解決策は単純です:If someCell.Value Like "*Text*Text*" Thenは正確に何をしたいだろう:Like演算子を使用します。あなたのケースでは

私はそれがだろうとします

If Cell.Value Like "*" & intMyVal & "*" Then 
関連する問題