VBAの勉強を始めてみた

タイトルの通りVBAの勉強を始めました。若干の発達障害があり、読みづらく分かりづらい点が多々あるかもしれませんが、ご了承下さい。

右からn文字目の前に改行を入れる

右から数えてn文字目の前に改行を入れます。
対象となるセルを選択した状態でマクロを実行して下さい。

 

f:id:kouten0430:20170810134450j:plain

試しに「5」を指定します。

 

f:id:kouten0430:20170810134520j:plain

右から数えて5文字目の前に改行が入りました。

 

複数のセルの特定の位置に改行を入れたいけど、対象となるセルが多すぎて一つ一つ手作業でなんてやってらんないよー!という場面があればきっと役にたつと思います。

左から・・・Verとは別に、右から・・・Verをあえて準備したのは、場合によっては右から数えたほうが都合の良い場面があるからです。左からの文字数が不揃いで、右からの文字数が一定であるような場面です。(例えば下記のように「改行したい文字」の前、つまりすべての対象に右から数えて7文字目の前で改行を入れたい場合)

 12345改行したい文字
 123改行したい文字
 123456改行したい文字
 1234改行したい文字
 1234567改行したい文字

まぁ、でもそんな場面が無ければ無用の長物です。軽く読み流して下さい。

 

***************************************

Sub 右からn文字目の前に改行を入れる()
    '右から数えてn文字目の前にセル内改行を入れます
    Dim myRange As Range
    Dim nr As Variant
   
    nr = Application.InputBox(Prompt:="右から何文字目の前に改行を入れますか?", Type:=1)
        If TypeName(nr) = "Boolean" Then
            Exit Sub
        End If
   
    For Each myRange In Selection.SpecialCells(xlCellTypeVisible)
        If myRange.Value <> "" And TypeName(myRange.Value) <> "Date" Then   'セルの値が空白,日付の場合は処理をしない
            myRange.Value = Application.WorksheetFunction.Replace(myRange.Value, Len(myRange.Value) - nr + 1, 0, vbLf)
        End If
    Next myRange
   
End Sub

***************************************
※SubからEnd Subまでをコピーし、標準モジュール等に貼り付けて使用して下さい。なお、マクロで実行した処理は「元に戻す」ことができません。実行前に一旦保存しやり直しのできる状態にしておいて下さい。