2017-05-01 9 views
-1

私の仕事は、シリアル番号の特定のサブセットを取得し、置換えをして、より大きな一連のシリアル番号の代わりに&を置き換えます。私はこのマクロを実行しています:Excel VBAは先行ゼロのセルでは機能しません

Sub multiFindandReplace() 
    Dim myList As Range, myRange As Range, cel As Range 
    Set myList = Sheets("Replacement Data").Range("B2:C4246")  
    'two column range with find/replace pairs 
    Set myRange = Sheets("Raw Data").Range("B2:B20000") 
    'range to be searched and replace 
    For Each cel In myList.Columns(1).Cells 
    myRange.Replace What:=cel.Value, Replacement:=cel.Offset(0, 1).Value, LookAt:=xlWhole 
    Next cel 
End Sub 

このコードは先行ゼロのないエントリに対してのみ機能します。先行ゼロを維持する必要がありますが、問題は、マスターデータリストのシリアル番号がすべてゼロで始まるわけではなく、すべてが置換されるわけではなく、長さが異なることです。以下のサンプルデータのスニペットを添付しました。

Part # Full Part # 
4184 004184 
4444 004444 
100001 00100001 
100002 00100002 
100003 00100003 
100004 00100004 
100005 00100005 
100006 00100006 
100007 00100007 
100008 00100008 

この検索/置換リストは2000行です。私は20,000項目のリストを検索し、これらの2000行を置き換える必要があります。どんな助けも大歓迎です。ありがとうございました。

+1

あなたはmyRangeやセル画を設定していません。 –

+0

これはすべてコードですか? '.Replace'行の最後に' Next cel'があるので、あなたはループを望んでいるようです...ループを追加するのを忘れたのでしょうか? (「MyListの各セルのために?」)編集:ああ、それはあります。あなたはVBAが必要ですか?式= =(左(A2,2)<> "00"、 "'00"&A2、 "")トリックはしませんか? – BruceWayne

+0

完全なコードです。これは、セルに先行ゼロが含まれていない限り、私のファイル上で正しく動作します。私は、問題はコードではないと思うが、おそらく私がすべてのタイプのセルでこれを使用できるようになるExcelの追加設定ですか? – shannon

答えて

0

は取り込む前にテキストに範囲の形式を設定してみてください:

Sub multiFindandReplace() 
    Dim myList As Range, myRange As Range, cel As Range 
    Set myList = Sheets("Replacement Data").Range("B2:C4246")  
    'two column range with find/replace pairs 
    Set myRange = Sheets("Raw Data").Range("B2:B20000") 
     myRange.NumberFormat = "@" 'this line should force text format and stop Excel removing the leading zeros 
    'range to be searched and replace 
    For Each cel In myList.Columns(1).Cells 
    myRange.Replace What:=cel.Value, Replacement:=cel.Offset(0, 1).Value, LookAt:=xlWhole 
    Next cel 
End Sub 
関連する問題