2016-09-08 9 views
0

このサイトのすべての例と回答を見てきました。しかし、 "802722AA"を含む2行だけを置き換えるのではなく、文字列を含まない他のすべての文字列を置き換えます。なぜこのようなことが起こるのか、アイデアがありません。どんな助けもありがとうございます。Excel VBA長いテキスト文字列の列を検索し、その中の文字を置換します

Sub FindAndReplaceAGF() 

Dim Loc As Range 
Dim RowNum As Integer 
Dim LastRow As Long 

    With Sheets(2).UsedRange 
    Range("A1").Select 
     Set Loc = .Cells.Find(What:="802722AA") 
     If Not Loc Is Nothing Then 
      Do 
       Loc.EntireRow.Select 
     Selection.Replace What:="AGF", Replacement:="AGN", LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
     ReplaceFormat:=False 
       RowNum = Loc.Row 
       Set Loc = .FindNext(Loc) 
      Loop While Loc.Row > RowNum 
     End If 
    End With 
    Set Loc = Nothing 

私のデータはこのように見えますが、私は400+のラインリストであるため、私はそれを編集しています。

802722AA SANTA ROSA LEASING LLC2 AGF 
59511VAA MICRON SEMICONDUCTOR  AGF 
973204AA WINDERMERE AVIATION LLC AGY 
92242VAB VCK LEASE SA    AGF 
68839PAB OSPREY AIRCRAFT LEASING AGF 
79977TAC SANDALWOOD 2013 LLC  AGN 
02154QAA ALTITUDE INVEST 16 LLC  AGF 
802722AA SANTA ROSA LEASING LLC  AGF 
45170$88 ILLINOIS FACILITIES FUND ACM 

これはすべてExcelの列Aにダンプされるテキストファイルです。私はそれをコラムにすることはできませんし、入力を拒否する独自のプログラムにフィードしているので、何の公式も何もできません。そこにはいくつかのAGFがあり、それがテキスト802722AAを含んでいればAGNに変更したいだけです。

+0

上記のvbaマクロは、あなたが望むことをしません。すべてのAGFをAGNに置き換えます。私は答えでそれを解決しようとします – Blenikos

+0

ええ、それはまさにこの時点で私の苦境です - それは私が置き換えたくないものを含むすべてを置き換えます。私は、次の試合を探して交換する必要があるので、ロジックが健全であることを意味します。私はちょうどそれがマッチを持っていない行を置き換えている理由を得ることはありません。ありがとう! –

答えて

1

ようsplit機能を利用すると思います

Option Explicit 

Sub Main() 
    With Worksheets("MySheetName") 
     With .Range("A1", .Cells(.Rows.Count,1).End(xlUp)) 
      .Autofilter field:=1, Criteria1:="802722*" 
      If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then . Replace "AGF", "AGN" 
     End With 
     .AutoFilterMode = False 
    End With 
End With 
+0

あなたの編集のための@ScottCranerありがとう – user3598756

+0

うーん、エラーが発生しているので、うまくいきませんでした。しかし、私はあなたのコードの背後にあるロジックは、各検索条件でフィルタを行い、フィルタリングされた結果をすべて置き換えることだと私は思う。私は、これは、徹底的な行の検索よりも速くなると思う/置換がたくさんある場合は置き換えます。 –

+0

どのエラー? 1) "MySheetName"を実際のワークシート名に変更する2)セルA1にヘッダーを、A2に下位のデータを持つ – user3598756

1

それは私だった、これはすべてのこと、効率的ではないかもしれない場合は、私が1行のヘッダを持つ列「A」のデータについては、この

finalRow = cells(65000,1).end(xlup).row 'get the last row of column A 
for i=2 to finalRow 
    parts = split(cells(i,1), " ") 'make an array out of the parts separated by spaces 
    newString = "" 
    if parts(0) = "802722AA" and parts(ubound(parts))="AGF" then 
     for j=lbound(parts) to ubound(parts) - 1 'get all but the last part 
      newString = newString & " " & parts(j) 'make a new string of all but the last part 
     next j 
     newString = newString & " AGN" 'at the end, replace the AGF with AGN 
    end if 
    cells(i,1)=newString 'replace contents of cell with our newly constructed string 
next i 
+0

私はあなたのものに似たようなことをしました。最初の8文字を検索条件にマッチさせ、IF文で1行ずつループします。それは本当に効果的です。ありがとう! –

+0

あなたは何か仕事ができてうれしいです。乾杯! –

関連する問題