2017-11-10 3 views
1
Sub clean() 

Dim x As Long, lastrow As Long 
Dim ws As Worksheet 
Dim CleanAry 
Set ws = ThisWorkbook.Sheets("Sheet1") 
'copy Column B to C 
'Range("B1:B1048576").Copy Destination:=ws.Range("C1:C1048576") 

'array for clean up 

CleanAry = Array("..", "__") 

lastrow = ws.Range("C1048576").End(xlUp).Row 

For Each cel In Range("C1:C" & lastrow) 
    For i = LBound(CleanAry) To UBound(CleanAry) 
      cel = cel.Replace(What:=CleanAry(i), _ 
          Replacement:=".", _ 
          Lookat:=xlPart, _ 
          SearchOrder:=xlByRows, _ 
          MatchCase:=False) 
    Next i 
Next cel 
End Sub 

私は特定の列を解析し、細胞内の既存の文字列から、それらの文字列の組み合わせを削除する文字列の組み合わせの配列を作成しようとしています。交換弦 - 取得オブジェクトエラー

しかし、私のコードは、配列に文字列が1つしかなく、文字列を追加しても機能しないようです。エラーが表示されます:

"cel = ..."セクションにはオブジェクトが必要です。

VBAで一貫してコード化されていません。間違っていることを理解するのに役立ちます。

+0

あなたが直面していることはわかりませんが、「Range.Replace」メソッドはブール値を返します。ターゲットセルに値が必要なので、ターゲットセルを使用しないでください。 – newacc2240

+1

もう一つのアプローチは 'cel.Value = Replace(cel.Value、CleanAry(i)、") "' – newacc2240

答えて

0

クリーニング対象範囲にエラーが発生する可能性がある場合は、チェックを追加することをおすすめします。全体のプロセスは、配列を使用するほうがはるかに高速です。

Sub clean() 

    Dim x As Long, lastrow As Long 
    Dim ws As Worksheet 
    Dim CleanAry, v, arr, r As Long 
    Set ws = ThisWorkbook.Sheets("Sheet1") 
    'copy Column B to C 
    'Range("B1:B1048576").Copy Destination:=ws.Range("C1:C1048576") 

    CleanAry = Array("..", "__") 'array for clean up 

    lastrow = ws.Range("C1048576").End(xlUp).Row 
    arr = Range("C1:C" & lastrow).Value 
    For r = 1 to UBound(arr, 1) 
     v = arr(r, 1) 
     For i = LBound(CleanAry) To UBound(CleanAry) 
       v = Replace(v, CleanAry(i), ".") 
     Next i 
     arr(r, 1) = v 
    Next r 
    Range("C1:C" & lastrow).Value = arr 
End Sub