[[20210620164819]] 『台という字でセル内で改行するコードをスピードア』(正樹) ページの最後に飛ぶ

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

 

『台という字でセル内で改行するコードをスピードアップさせるには』(正樹)

Sub 台という字で改行()
'文字列を改行する
'台で区切る

  macroのスピードを速くするにはどうすればいいのでしょうか?
 配列の使い方がチンプンカンプンです。ご指導お願いします。  

  Dim i As Integer

    Dim c As Object
    Dim Str As String
    Dim Rng As Range

    Set Rng = ActiveSheet.Range("C3:K39") '範囲

    For Each c In Rng
        Str = ""
        For i = 1 To Len(c.Text)
            If Mid(c, i, 1) = "台" Then
                Str = Str & Mid(c, i, 1) & Chr(10)
             Else
                Str = Str & Mid(c, i, 1)
            End If
        Next i
        Cells(c.Row, c.Column) = Str
    Next c

End Sub

< 使用 Excel:Excel2019、使用 OS:Windows10 >


RangeオブジェクトのReplaceメソッドで、
"台"を"台" & vbLf に置換すればよいのでは?
(γ) 2021/06/20(日) 17:28

もろ被りですが投稿しておきます。
配列とか考えるのはやめて、1セルずつ処理するほうを改善したらどうでしょうか?
    Sub 別案()
        ActiveSheet.Range("C3:K39").Replace What:="台", Replacement:="台" & Chr(10)
    End Sub

(もこな2) 2021/06/20(日) 17:34


(Y)様、(もこな2)様本当にありがとうございました。目から鱗が落ちるって感じです“台”という字を”台改行”に置き換える全然思いつかなかったです。コードを考えるときは、色んな発想が大切なんですね!
本当にありがとうございました。
(正樹) 2021/06/20(日) 19:47

 > 台という字でセル内で改行するコードをスピードアップさせるには
ということなので・・・

Application.ScreenUpdating = False

Application.ScreenUpdating = True
でスピードは早くなります。

詳細は↓をご覧ください。
画面を止める
http://officetanaka.net/excel/vba/speed/s1.htm

(Hatch) 2021/06/21(月) 11:00


あっ、配列より「別案」の方が画面を止めたら速くなりました。
止めない場合はなぜか逆になったりしましたけど・・・
計測したのは↓のコードです。
Sub 別案()
Dim endTime As Double
Dim processTime As Double
Dim startTime As Double
startTime = Timer
Application.ScreenUpdating = False
ActiveSheet.Range("C3:K39").Replace What:="台", Replacement:="台" & Chr(10)
Application.ScreenUpdating = True
endTime = Timer
processTime = endTime - startTime
Cells(1, 1).Value = processTime
End Sub

(Hatch) 2021/06/21(月) 11:09


コメント返信:

[ 一覧(最新更新順) ]


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