VBAの勉強を始めてみた

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

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

前回の「選択中のセルの文字列に右側nセル分の文字列を連結する」を発展させてみました。

前回の記事 

kouten0430.hatenablog.com

 

非表示の列を処理対象外になるように改修。(下の画像ではB、D、Fが非表示)

f:id:kouten0430:20171029143713j:plain

 

連結対象となるセル数を入力します。(可視セルのみでカウント)

f:id:kouten0430:20171029143844j:plain

 

文字列と文字列の連結間に入れる文字を指定できます。改行とするので、キャンセルします。

f:id:kouten0430:20171029144004j:plain

 

選択中のセルの文字列の末尾に(改行を挟んで)3セル分連結されました。

f:id:kouten0430:20171029144202j:plain

 

非表示セルを再表示してみます。非表示列にあった「★」が連結されていないことが分かります。

f:id:kouten0430:20171029144353j:plain

 

こんな感じで、連結させたくない列を非表示にしておけば便利に使えます。(たぶん)

 

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

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 + 1
        i = 1
        Do While i <= XR
            If Columns(X).Hidden = False Then '非表示の列は処理を行わない
                myRange.Value = myRange.Value & XC & Cells(Y, X).Value
                X = X + 1
                i = i + 1
            Else
                X = X + 1
            End If
        Loop
    Next myRange
   
End Sub

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