2016-06-14 1 views
0

をコピーするとき、私は私の新しいVBAコードで若干の問題を持っているすべての先行ゼロを失う: 私はデータベースが含まれている2枚(+1があるExcelを持っています)。シート1には列Gの電話番号が050-7080-6030/301-123-456/06-1234-4567などの形式で含まれています。これをシート2にコピーし、同時に「 - 」を削除する必要があります私はテーブルを作成することでこれを達成しました。さまざまな理由から、以下のコードを参照してください。私は単に複写部分の記録を使って値として貼り付けましたが、シート2では2番目のマクロを実行した後に先行ゼロをすべて失います。私はシート全体(両方)とNumberFormat =のようなvbaコードでもテキストをセル形式で適用しようとしましたが、何も動作しないようです。どのようにこれを解決するためのアイデア?前もって感謝します!ここ はコードです:VBA - ここ</p> <p>は何が起こっているのか..です

Sub copy() 

'copy 

Rows("4:6").Select 
Selection.copy 
Sheets("Sheet2").Select 
Range("A4").Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
:=False, Transpose:=False 

End Sub 

Sub Multi_FindReplace() 

Dim wks As Worksheet 
Dim fndList As Integer 
Dim rplcList As Integer 
Dim tbl As ListObject 
Dim myArray As Variant 

Set wks = Sheets("Sheet2") 

Set tbl = Worksheets("DBs").ListObjects("Phone") 


Set TempArray = tbl.DataBodyRange 
myArray = Application.Transpose(TempArray) 


fndList = 1 
rplcList = 2 

With wks 

For x = LBound(myArray, 1) To UBound(myArray, 2) 

     .Range("G3:I100").Replace What:=myArray(fndList, x), Replacement:=myArray(rplcList, x), _ 
     LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=True, _ 
     SearchFormat:=False, ReplaceFormat:=False 


Next x 

End With 

End Sub 
+0

コピーする前にSheet2のセルをテキストとしてフォーマットすると問題なく動作します。 –

+0

私はあまりにも、しかし、それは動作しないと思った。私はそれをシート全体に適用しようとしましたが、列だけ、セル。それは毎回同じ結果です。 – llorcs

+0

プレフィックスの究極の回避策を試しましたか?アポストロフィ(一重引用符)で –

答えて

1

問題がExcelの交換を処理する方法に起因しています。あなたのテキスト文字列を、先行するゼロを降下させる数字に再フォーマットしています。

replaceコマンドを使用すると、実際に元の書式設定が残ります。

On Error GoTo Done: 
Do 
Range("G3:I100").Select 
    Selection.Find(What:="-", After:=ActiveCell, LookIn:=xlFormulas, LookAt _ 
     :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
     False, SearchFormat:=False).Activate 
     ActiveCell = Replace(ActiveCell.Value, "-", "") 
Loop 
Done: 

ループを終了する条件がないため、これは技術的に無限ループであることに注意してください。ここでの終了は、実際には、指定された範囲内の " - "が見つからないことによって生成されるエラーです。

検索するには限られた領域があれば簡単な方法です。可変領域の場合は、選択線をループの前に定義された配列に置き換えます。

+0

ありがとう! これは実際に動作します!私の場合は、私の場合は中国語/日本語の2バイト文字が部分的にしかありません。しかし、私は自分自身の他の半分を解決することができるようです。そうでなければ、私は再び投稿するかもしれません。ご不便をおかけして申し訳ありません。迅速なご返信ありがとうございます!とても有難い! – llorcs

関連する問題