[[20190314144030]] 『VBA セルの空白削除を高速化したい』(みや) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBA セルの空白削除を高速化したい』(みや)

セルの中の空白を削除するコードなのですが、データが多いせいなのか非常に時間がかかります。高速化する方法はないでしょうか?
ちなみに消したい空白はセルの文字(半角・全角あり)の後側だけです。
前側には空白はありません。
データ上の空白には半角と全角が存在します。
(データ例)アンダーバーが空白に相当します。
ACB1111____
りんご___

SUB 空白削除()

   Application.ScreenUpdating = False
   Application.Calculation = xlCalculationManual

   Dim a As Range
   Dim b As Long
   Dim c As Long
   Dim d As Long

   b = Range("A2").End(xlDown).Row
   For d = 1 To 5
   For c = 2 To b
   Cells(c, d).Select

   For Each a In Selection
       a.Value = Replace(a.Value, " ", "") '半角の空白削除
       a.Value = Replace(a.Value, " ", "") '全角の空白削除
   Next a
   Next c
   Next d

   Application.ScreenUpdating = True
   Application.Calculation = xlCalculationAutomatic

END SUB

< 使用 Excel:unknown、使用 OS:unknown >


 こんなんでどうですか?
    Sub 空白削除()
        Dim w As Variant, i As Long, j As Long
        w = Range("E2", Cells(Rows.Count, "A").End(xlUp))
        For i = 1 To UBound(w, 1)
            For j = 1 To 5
                w(i, j) = Replace(Replace(w(i, j), " ", ""), " ", "")
            Next j
        Next i
        Range("A2").Resize(UBound(w, 1), UBound(w, 2)).Value = w
    End Sub

(稲葉) 2019/03/14(木) 15:07


 スペースがあるのは文字の後だけのようなのでTrimでもいいかも?

 w(i, j) = Replace(Replace(w(i, j), " ", ""), " ", "")
 ↓
 w(i, j) = Trim(w(i, j))

 稲葉さん勝手にすみません。
(bi) 2019/03/14(木) 15:22

 ループ無し...

 Sub test()
     With Range("a1", Range("a" & Rows.Count).End(xlUp)).Resize(, 5)
         .Value = Application.Trim(.Value)
     End With
 End Sub
(seiya) 2019/03/14(木) 15:24
 コード変更 15:29

 そういえば、Trimで十分すね・・・
(稲葉) 2019/03/14(木) 15:56

稲葉さん、bjさん

ありがとうございます。
Trimで結構早くなりました。

seiyaさん
ループ無くすとこんなに早くなるんですね。
勉強になりました。

(みや) 2019/03/15(金) 13:20


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.