Excel内でコピーをして貼り付けを行う際に、複数セルにまたがった範囲をコピーし、貼り付けた場合は、複数セルにまたがった状態で指定した箇所に貼り付けられます。
複数セルの値を一つのセルに貼り付けたいと思い、色々と試してみましたが、できなかったためツール『複数セルの値を一つのセルに貼り付けるツール』をExcelVBAのアドインで作成しました。
これを使用すれば定例業務の業務効率化が図れるかと思いますので、是非ご活用頂けたらと思います。
また、このアドインより更に種類が増えたコピペができるアドインが以下になりますので、ご興味がある方は以下のツールを使用してみてください。
『複数セルの値を一つのセルに貼り付けるツール(アドイン)』の概要
ExcelにVBAコードを入れてマクロを作成し、アドインとして保存します。
そのアドインを取込むとリボンにコピーと貼り付けのタブが表示されるので、コピーと貼り付けにそれぞれ該当するボタンを押すことで該当のマクロを実行でき、複数セルの値を一つのセルに貼り付けることができます。
基本的な機能、操作方法の説明
<手順1>
- 複数セルの値を一つのセルに貼り付けたい任意のExcelファイルを開きます。
- 「開発」タブの「Excelアドイン」より、作成したアドインファイルを指定(参照)します。
※選択するExcelアドインは、当ぺージ内のツールをダウンロードしてVBAコードを貼り付けたアドインファイルを選択してください。
アドインを設定出来たら、上部リボンのタブに「特殊なコピペ」が追加されます。
<手順2>
- 対象のセルを選択して、「特殊なコピペ」から「複数セルをコピー」を選択します。
<手順3>
- 貼り付けたいセルを選択して、「特殊なコピペ」から「一つのセルに貼り付け」を選択します。
複数列に入っているテキストに対して指定した「区切り文字」で区切り結合させてコピーされます。
その後貼り付けることで指定した区切り文字で区切られます。
リボンに表示されている文字等のデザインを変更する場合は、【解説】リボンに表示されたExcelアドインのデザインを変更する方法を参照ください。
留意事項
・何もないところをコピーした場合は、クリップボードにコピーはされません。
・区切り文字は、エスケープ文字(カンマ、スラッシュなど)以外の英数字や日本語ひらがな等、なんでも指定できます。
使用する際の事前準備
このページの下部にある「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)」を選択して、保存します。
これで事前準備は完了です。
あとは「基本的な機能、操作方法の説明」で記載された方法でツールを実行できます。
なお、当マクロの開発環境は、OS:Windows10 、Excelソフトウェア:Microsoft Office 365となっており、当環境では動作確認ができていますが、他の環境で正常に動作するかは確認できていません。
正常に動作しない場合は、コメントいただければ幸いです。
また以下にて、このような業務効率化できるツールを機能ごとの一覧でまとめてますので、ご興味のある方はご覧ください。
自力で業務効率化できるツール等を作成する場合は、「オンラインITスクール」を利用するとモチベーションを保ちつつ、効率的に学習とアウトプットができると思います。
上記の「侍テラコヤ」は月額2,980円~ という日本最安級の料金でプログラミング学習ができ、今なら初めての方でも安心できる「1か月全額返金保証」があります。
自分に合わないと感じた場合は返金してもらえるため、ノーリスクで試すことができます。是非一度体験してみることをオススメします ^ ^
ツールのダウンロードはこちら
下記よりExcelファイルをダウンロードして、記事の途中にありました VBAのソースコードをツール内に組み込んで使用してください。
【Excel_VBA】複数セルの値を一つのセルに貼り付けるツール
※インターネットにあるマクロファイルをダウンロードすることはセキュリティ上リスクがあるので、マクロ無しExcelファイルを公開しています
他に要望等ありましたら、可能な限り改修等を対応しますのでコメント頂ければと思います。
<このツールが『結構使える!』と思ったら、下のグッドボタンを押していただけたら幸いです>
初めてコメントさせて頂きます。
このツール、非常に使いやすく、仕事でぜひ使っていきたいのですが、Macbookのエクセルでも使用できると助かります。
(windows10ではとても作業効率が上がりました!)
また、現在、縦の連続した複数セルを1つのセルにペーストする場合、改行になるのですが、それも横並びで、カンマ等で区切るようには出来ますでしょうか。
お手数ですが、ご検討いただけますと幸いです。
よろしくお願い申し上げます。
管理人のRHです。
Kさん、ツールを使用しコメント頂き、ありがとうございます。
MACでの動作は確認しておりませんでした、ご指摘ありがとうございました。
しかし、macで使用する場合はExcelVBAを使用せずpythonにて動作させることになりそうなので、改めて動作する方法を投稿いたします。
また、縦の連続した複数セルを横並びでカンマ等で区切って貼り付けることが出来るように機能を追加いたしますので、恐れ入りますが今しばらくお待ちいただけますと幸いです。
管理人のRHです。
Kさんへ、おっしゃっていただいた縦の連続した複数セルを横並びで、カンマ等で区切ることができるアドインを作成しましたので良かったらご参照ください。
https://resthill.blog/excel-vba-tool16
>また、現在、縦の連続した複数セルを1つのセルにペーストする場合、改行になるのですが、それも横並びで、カンマ等で区切るようには出来ますでしょうか。
macで動作させる方法については今しばらくお待ちください。
なお、お思いの挙動でない場合は改めてコメント頂ければと思います。
ありがとうございます!使用してみます。
Macのほうもお手数おかけいたしますが、どうぞよろしくお願いいたします。