質問番号: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