質問番号:1429329438

指定の文字列を含むセルのみ、左から60文字以上の文字列を削除したい。

今、次のようなデータがA列の1行目からズラリと並んでいるとします。

                                                                                • -

aaa
bbb
ccc
【長い】abcdefgggggggggggggggggggggggggggh
ddd
eee
fff




                                                                                • -

15000行ほどです。
ここにおきまして、上記のように“【長い】”という文字列を含むセルがいくつかあります。
そのセルだけを、“【長い】”という4文字分も含めまして、合計で左から60文字だけにしたいのです。
61文字以上の文字は削除したいのです。
関数およびマクロ等で効率的に処理する方法等、もしありましたらご教授いただきたい次第です。
よろしくお願い致します。

回答

' 回答プログラム(質問番号:1429329438)
' Author Y.Yoshiya
' Date 2015/04/18

Option Explicit

Sub main()

Dim LastRow As Long
Dim CellString As String

Dim lp1 As Long

    If Worksheets.Count = 1 Then
        Worksheets.Add after:=Worksheets(Worksheets.Count)
    End If

    LastRow = Me.Range("A" & Rows.Count).End(xlUp).Row
    
    For lp1 = 1 To LastRow
        If InStr(Me.Range("A" & lp1), "【長い】") > 0 Then
            CellString = Left(Me.Range("A" & lp1), 60)
            Worksheets(2).Range("A" & lp1) = CellString
        Else
            Worksheets(2).Range("A" & lp1) = Me.Range("A" & lp1)
        End If
    
    Next lp1

End Sub

テストデータ作成用プログラム

' テストデータ作成プログラム(質問番号:1429329438)
' Author Y.Yoshiya
' Date 2015/04/18

Option Explicit

Sub main()

Dim CharCount As Integer
Dim CellString As String

Dim lp1 As Long
Dim lp2 As Integer

    For lp1 = 1 To 10000
        CharCount = Int(Rnd * 200) + 20
    
        CellString = ""
        For lp2 = 1 To CharCount
            CellString = CellString & Chr(Int(Rnd * 62) + 65)
        Next lp2
    
        If Int(Rnd * 100) < 10 Then
            CellString = "【長い】" & CellString
        End If
    
        Me.Range("A" & lp1) = CellString
    Next lp1

End Sub