VBA・マクロ

【簡単に使える】複数セルの値を一つのセルに貼り付けるアドイン

Excel内でコピーをして貼り付けを行う際に、複数セルにまたがった範囲をコピーし、貼り付けた場合は、複数セルにまたがった状態で指定した箇所に貼り付けられます。

 

複数セルの値を一つのセルに貼り付けたいと思い、色々と試してみましたが、できなかったためツール『複数セルの値を一つのセルに貼り付けるツール』をExcelマクロ(アドイン)で作成しました。

 

これを使用すれば定例業務の業務効率化が図れるかと思いますので、是非ご活用頂けたらと思います。

 

『複数セルの値を一つのセルに貼り付けるツール(アドイン)』の概要

ExcelにVBAコードを入れてマクロを作成し、アドインとして保存します。

 

そのアドインを取込むとリボンにコピーと貼り付けのタブが表示されるので、コピーと貼り付けにそれぞれ該当するボタンを押すことで該当のマクロを実行でき、複数セルの値を一つのセルに貼り付けることができます。

 

当ツールの使用方法

基本的な機能、操作方法の説明

1.複数セルの値を一つのセルに貼り付けたい任意のExcelファイルを開きます。

2.「開発」タブの「Excelアドイン」より、作成したアドインファイルを指定(参照)します。

 

3.対象のセルを選択して、「特殊なコピペ」から「複数セルをコピー」を選択します。

 

4.貼り付けたいセルを選択して、「特殊なコピペ」から「一つのセルに貼り付け」を選択します。

 

コピーする場合、複数列に入っているテキストに対して指定した文字で区切り結合させて表示されます。

 

留意事項

・何もないところをコピーした場合は、クリップボードにコピーはされません。

・区切り文字は、エスケープ文字(カンマ、スラッシュなど)以外の英数字や日本語ひらがな等、なんでも指定できます。

 

使用する際の事前準備

このページの下部にある「Excelファイルのサンプル」からExcelファイルを取得し、「準備の手順」内にあるVBAコードを取得したExcelファイルに記載して保存すれば、すぐに当ツールを使用できます。

 

以下にその手順を説明していきます。

 

準備の手順

1.サンプルのダウンロードはこちら」からサンプル(Excelファイル)をダウンロードし、ファイルを開きます。

※インターネットにあるマクロファイルをダウンロードすることはセキュリティ上リスクがあるので、マクロ無しExcelファイルを公開しています

 

2.ダウンロードしたExcelファイルの上部にあるリボンの「開発」タブから「visual basic」を選択して、VBE(Visual Basic Editor)を起動させます。

 

リボンに「開発」タブが表示されていない場合は、以下を参照ください。

(参考サイト:記事「Excel VBAを始める前に、最初にやっておくべき初期設定内容はこれ」の『開発』タブを表示させる

 

3.「プロジェクト」に「標準モジュール」を追加して、追加された「Module1」にVBAコードを記載します。

 

 

VBAのソースコードはこちら

以下のVBAコードをコピーして、「Module1」内のエディターに貼り付けます。

※VBAコードの右上のアイコンをクリックするとソースコードをコピーできます

Option Explicit

'-----(設定値)------------------------
Private Const SEPARATE_VALUE = ","        '1.区切り文字の初期値
'---------------------------------------

Dim SepValue As String

'===================================
'複数セルをコピーした際の処理
'===================================
Sub Copy_Click(control As IRibbonControl)
    
    Dim tmpValueArr() As Variant
    Dim cntRow, cntCol, i, j As Long
    Dim unionValue As String
    Dim tmpValue As String

    Dim c As Range
    Set c = Selection
    
    '選択されたセルが一つの場合はそのまま代入する
    If Selection.Cells.Count = 1 Then
        unionValue = c.Value
    Else
        tmpValueArr = c.Value
        cntRow = UBound(tmpValueArr)
        cntCol = UBound(tmpValueArr, 2)
        
        For i = 1 To cntRow
            For j = 1 To cntCol
                If j = 1 Then
                    tmpValue = tmpValueArr(i, j)
                Else
                    tmpValue = tmpValue & SepValue & tmpValueArr(i, j)
                End If
            Next
            If i = 1 Then
                unionValue = tmpValue
            Else
                unionValue = unionValue & vbLf & tmpValue
            End If
        Next
    End If
    
    'クリップボードにコピーする
    With CreateObject("Forms.TextBox.1")
        .MultiLine = True
        .text = unionValue
        .selstart = 0
        .sellength = .textlength
        .Copy
    End With
    
End Sub

'===================================
'一つのセルに貼り付けをした際の処理
'===================================
Sub Paste_Click(control As IRibbonControl)

    Dim Form As Object: Set Form = CreateObject("Forms.TextBox.1")
    Form.MultiLine = True
    
    'クリップボードに貼り付ける
    If Form.CanPaste = True Then Form.Paste
    Selection.Value = Form.text

End Sub

'-------------------------
'区切り文字のテキスト内容を取得する際の処理
'-------------------------
Sub editBox_getText(control As IRibbonControl, ByRef returnValue)
    SepValue = SEPARATE_VALUE
    returnValue = SepValue
End Sub

'-------------------------
'区切り文字に変更があった際の処理
'-------------------------
Sub onChange(control As IRibbonControl, text As String)
    SepValue = text
End Sub

 

4.ファイルを保存する際は「Excelアドイン(*.xlam)」を選択して、保存します。

 

これで事前準備は完了です。

あとは「当ツールの使用方法」で記載された方法でツールを実行できます。

 

また、このようなExcelVBAを用いた業務効率化を行うときに、以下の書籍が初心者向けでとても参考になると思いますので、良かったらご参照ください。

 

なお、当マクロの開発環境として、OSは “Windows10” 、Excelのバージョンは “Microsoft Office 365″ で行っており、当環境では動作確認ができていますが、他のすべての環境で正常に動作するかは確認できていません。

 

正常に動作しない場合は、コメントいただければ幸いです。
 

また、このような業務効率化できるツールを以下に一覧でまとめてありますので、ご興味のある方はご覧ください。

業務効率化ツールの一覧(まとめ)

操作ごとにまとめて一覧で表示してあります。

Excel VBAを活用した便利マクロツール(まとめ)"Microsoft Excel"を使って業務効率化する際に使用できる便利なマクロツールを一覧で紹介します。 ...

 

当ツールのダウンロードはこちら

下記よりExcelファイルをダウンロードして、記事の途中にありました VBAのソースコードをツール内に組み込んで使用してください。

【Excel_VBA】複数セルの値を一つのセルに貼り付けるツール

ツールのダウンロードはこちら

※インターネットにあるマクロファイルをダウンロードすることはセキュリティ上リスクがあるので、マクロ無しExcelファイルを公開しています

他に要望等ありましたら、可能な限り改修等を対応しますのでコメント頂ければと思います

 

<このツールが『結構使える!』と思ったら、下のグッドボタンを押していただけたら幸いです>

コメントはこちら

  1. K より:

    初めてコメントさせて頂きます。
    このツール、非常に使いやすく、仕事でぜひ使っていきたいのですが、Macbookのエクセルでも使用できると助かります。
    (windows10ではとても作業効率が上がりました!)

    また、現在、縦の連続した複数セルを1つのセルにペーストする場合、改行になるのですが、それも横並びで、カンマ等で区切るようには出来ますでしょうか。

    お手数ですが、ご検討いただけますと幸いです。
    よろしくお願い申し上げます。

    • RH より:

      管理人のRHです。
      Kさん、ツールを使用しコメント頂き、ありがとうございます。

      MACでの動作は確認しておりませんでした、ご指摘ありがとうございました。
      しかし、macで使用する場合はExcelVBAを使用せずpythonにて動作させることになりそうなので、改めて動作する方法を投稿いたします。

      また、縦の連続した複数セルを横並びでカンマ等で区切って貼り付けることが出来るように機能を追加いたしますので、恐れ入りますが今しばらくお待ちいただけますと幸いです。

      • RH より:

        管理人のRHです。
        Kさんへ、おっしゃっていただいた縦の連続した複数セルを横並びで、カンマ等で区切ることができるアドインを作成しましたので良かったらご参照ください。

        https://resthill.blog/excel-vba-tool16

        >また、現在、縦の連続した複数セルを1つのセルにペーストする場合、改行になるのですが、それも横並びで、カンマ等で区切るようには出来ますでしょうか。

        macで動作させる方法については今しばらくお待ちください。

        なお、お思いの挙動でない場合は改めてコメント頂ければと思います。

        • K より:

          ありがとうございます!使用してみます。
          Macのほうもお手数おかけいたしますが、どうぞよろしくお願いいたします。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です