VBAの勉強を始めてみた

タイトルの通りVBAの勉強を始めました。効率化と暇つぶしを兼ねています。VBA以外の話題もあるよ(笑)

左からn文字目の文字を置換する

左から数えて、n文字目からx文字分を、指定した文字列に置換するマクロを作ってみました。

例えば、下の画像では4文字目から3文字分を顔文字に置換してみます。

f:id:kouten0430:20170709182900j:plain

f:id:kouten0430:20170709175731j:plain

 

文字ではなく空白を指定した場合は、4文字目から3文字分が削除されます。

f:id:kouten0430:20170709182941j:plain

 

4文字目から0文字分とした場合は、4文字目の左側に指定した文字列が「挿入」されます。

f:id:kouten0430:20170709175911j:plain

 

応用として、先頭や末尾に文字を追加することもできます。

とてもとっつきにくいですが、色々やってみて試して見て下さい。(個人的にはわりと便利だと自負してます・・・・・・笑)

なお、VBA関数ではなくワークシート関数のほうのReplaceを使用して作成しています。

 

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

Sub 左からn文字目の文字を置換する()
   
    Dim myRange As Range
    Dim ns As Integer
    Dim ne As Integer
    Dim tm As String
   
    ns = InputBox("左から何文字目を置換開始位置にしますか?")
    ne = InputBox("開始位置から何文字置換しますか?" _
    & vbCrLf & "※文字を挿入する場合は0を入力下さい。" _
    & vbCrLf & " 開始位置の左側に挿入されます。")
    tm = InputBox("置換または挿入する文字を入力して下さい。" _
    & vbCrLf & "※空白のままOKにすると、開始位置から" _
    & vbCrLf & " 指定文字数が削除(空白に置換)されます。")

    For Each myRange In Selection.SpecialCells(xlCellTypeVisible)
        If myRange.Value <> "" And TypeName(myRange.Value) <> "Date" Then   'セルの値が空白,日付の場合は処理をしない
            myRange.Value = Application.WorksheetFunction.Replace(myRange.Value, ns, ne, tm)
        End If
    Next myRange
   
End Sub

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

 ※SubからEnd Subまでをコピペしてマクロを使用できます。使用の際は自己責任でお願いいたします。