VBAの勉強を始めてみた

タイトルの通りVBAの勉強を始めました。仰々しくなく、シンプルな形で効率化を図ることを目指しています。VBA以外の話題もあるよ(笑)

選択中のセルの文字列に右側nセル分の文字列を連結する

タイトルが長いです。
なんのこっちゃ。という感じですが、タイトルのとおりです。

 

数値の入ったセルと単位の入ったセルが隣同士に並んでいて(普通によくある状況ですね)、とある事情で一つのセルに数値と単位を一緒に入れる必要があり、かつデータが多かったので

\_ヘヘ(∀`*)カタカタ。oO(楽して早く終わらせたい・・・)

という、怠け者スキルが自動的に発動し、ほとばしるパトスを抑えきれなくなったのでしょうもないマクロを作ってみました(`_´)ゞ 今回の事例に限らず、汎用的に使えるように少し工夫してみました。

関数でもよかったんですけど、VBAの利点は関数のために別セルを用意しなくてもいいところにあります。

 

例えば、選択中のセルに右側3セル分の文字列を連結して格納します。(例では連結する文字と文字の間に改行を入れています)

f:id:kouten0430:20171028154715j:plain

f:id:kouten0430:20171028154741j:plain

注:仕事で絵文字は使いません。

 

文字と文字の連結間に入れる文字は改行以外にも、通常の文字列を指定できます。スペースでもいいですし、ブランク(長さ0の文字列)でもOKです。

ブランクの場合はこんな感じ

f:id:kouten0430:20171028155135j:plain


EXCELを使っていて、こんな状況がなかったら洋ナシなので、このページは見なかったことにして素通りして下さい。

 

文字列連結演算子を使った、かんたんなプログラムです。

----------------------

Sub 右隣の文字を連結()
    '選択したセルの文字列に右隣nセルの文字列を連結する
    Dim Y As Integer
    Dim X As Integer
    Dim XR As Variant
    Dim XC As Variant
    Dim i As Integer
    Dim myRange As Range
   
    XR = Application.InputBox(Prompt:="選択中のセルに右側何セル分の文字を連結しますか?", Type:=1)
        If TypeName(XR) = "Boolean" Then
            Exit Sub
        End If

    XC = Application.InputBox(Prompt:="連結間に挿入する文字を入力して下さい。(ブランクでも可)" _
    & vbCrLf & "改行にする場合はキャンセルして下さい。", Type:=2)
        If TypeName(XC) = "Boolean" Then
            XC = vbLf
        End If

    For Each myRange In Selection.SpecialCells(xlCellTypeVisible)
        Y = myRange.Row
        X = myRange.Column
        For i = 1 To XR
            myRange.Value = myRange.Value & XC & Cells(Y, X + i).Value
        Next i
    Next myRange
   
End Sub

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