2016-12-07 3 views
1

私はExcel上でC列にいくつかの登録番号を入力する必要があるワークシートを持っています。これらの数字は、通常、一度に複数の貼り付けをコピーすることによってユーザーによって挿入されます。コピー元の書式は「000.000.000-00」の形式であることがよくありますが、ワークシートの「00000000000」になります。ドットとダッシュは使用しません。Excel VBA - ユーザーが入力した複数のセルの値を変更するにはどうすればよいですか?

Excel VBAでコードを開発して、ユーザーが登録番号を入力または貼り付けた後、これらのドットとダッシュを自動的に削除しようとしています。私は同じ細胞の中にいることが必要です。コードは次のとおりです。これまでのところ

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim SkipEvents As Boolean 
    If SkipEvents Then Exit Sub 
    With ActiveWorkbook.Sheets("Staff") 
    If Not Application.Intersect(Target, Me.Range("C:C")) Is Nothing Then 
     SkipEvents = True 
     li = Intersect(Target, Range("C:C")).Row 
     nl = Intersect(Target, Range("C:C")).Rows.Count 
     lf = li + nl - 1 

     For i = li To lf 
      RegNumb = Range("C" & i).Value 
      If Len(RegNumb) = 14 Then 
       Range("C" & i).Value = Left(RegNumb, 3) & Mid(RegNumb, 5, 3) & Mid(RegNumb, 9, 3) & Right(RegNumb, 2) 
      End If 
     Next i 
     SkipEvents = False 
    End If 
    End With 
End Sub 

、コードは、ユーザーのタイプやコピー+は、一度に1つの登録番号を貼り付ける場合は、ドットやダッシュを削除することができます。ただし、一度に2つ以上の登録番号をコピー&ペーストすると、その範囲の最初のセルにのみドットとダッシュが削除され、残りのセルはそのまま残ります。誰かがこの問題で私を助けることができますか?

+2

文字列を反復処理しているように見えます。 'Replace(文字列、"、 ""、 " - "、 "))' – Wilson

答えて

2

範囲内の最初のセルだけが範囲を反復していないため、コードによって変更されています。代わりに、これを行うことができます:

For each c in Target 
    if c.column = 3 then 
     c.value = Replace(Replace(c.value, ".", ""), "-", "") 
    end if 
Next c 

あなたのワークシート内に変更してください。

+0

@ Cojonniだから多分あなたは 'Application.EnableEvents = False'か何かをやったことがあります。 – Wilson

0

希望の範囲全体に直接置き換えることができます。また、イベントを無効にする必要があります。変更するとコードが再開されるためです。また、シートレベルのコードなので、シートを参照する必要はありません。

Private Sub Worksheet_Change(ByVal Target As Range) 

    Dim rCheck as Range 
    Set rCheck = Application.Intersect(Target, Me.Range("C:C")) 

    If Not rCheck is Nothing 

     Application.EnableEvents = False 
     rCheck.Replace(".","",lookat:=xlPart) 
     rCheck.Replace("-","",lookat:=xlPart) 
     Application.EnableEvents = True 

    End If 


End Sub 

私も確認されているデータセットが非常に大きい場合、この置き換える方法が悪いパフォーマンスを持つことができることを警告します。しかし、コピー/ペーストが細胞数の点で比較的少ない場合、それはうまくいくはずです。

関連する問題