帯

VBA Excel選択セルのテキストボックス化

Excelを使ってデータ整理や分析を行った後、その内容をテキストボックスに埋め込んで、PowerPoint文書など他の文書に貼り付けて流用する場面ってあると思います。

それが数個程度であれば、それぞれにテキストボックスを作成してテキストを埋め込む作業も大して苦になりませんが、大量にあったり、テキストボックスの形がフローチャートのようにいくつかパターンあったりすると、単純作業だけに面倒になってきます。

そんな作業を少しでも楽にする補助ツールを作成したのでご紹介します。

ツールファイル添付

VBA標準モジュールと、それを組み込んだExcelのサンプルファイルを添付します。

ツールの使い方

Excelのサンプルファイルを開いて、シート上で対象テキストのセルを選択して、図形ボタンを押します。すると、その選択セルのテキストが埋め込まれた図形が、クリップボードに格納されます。

貼り付け先の文書に切り替えて、クリップボードから貼り付けます。

既存Excelファイルへのツール組込み方法

対象となる既存のExcelファイルをマクロが組み込めるようにマクロ有効ブック(*.xlsm)にファイルの種類を変えて保存します。

「開発」ー「Visual Basic」でVBEを開きます。

「ファイル」-「ファイルのインポート」で、上記でダウンロードした「Module1.bas」標準モジュールをインポートします。

対象シートにテキストボックスの図形を挿入します。これがテンプレートとなるので、色やサイズ、テキスト体裁などを整えます。

挿入した図形を右クリックして、「マクロの登録」を選択します。

「マクロの登録」ダイアログで「MakeTextBox」を選択して、「OK」ボタンを押します。

別なテキストボックスの図形を追加する場合も上記と同様に操作します。
その際、その図形の名前が他のものと重複しないように注意します。重複するようであれば別な名前に付け替えます。

プログラムの解説

プログラムの主な内容を説明します。

MakeTextBoxは、図形ボタンから呼び出されるメイン関数です。ActiveSheetを対象シートとして記憶します。

Public Sub MakeTextBox()
    Set oSheet = ActiveSheet
    :
End Sub

押されたボタンのテキストボックス図形をoBoxに取得します。
Application.Callerは、押された図形の名前を示すので、その名前を使用してシートから対象図形を検索して取得します。

    :
    Dim oBox As Object: Set oBox = GetTemplateBox(Application.Caller)
    :

Private Function GetTemplateBox(sShapeName As String) As Object
    Set GetTemplateBox = oSheet.Shapes(sShapeName)
End Function

PasteTextBoxは、テキストを埋め込んだテキストボックスを作成してシートに貼り付ける処理です。
テンプレートとなるテキストボックスをコピーして、シートに貼り付けた後、そのテキストボックスに選択セルのテキストを埋め込んで、貼り付け位置を調整します。テキストボックスが複数ある時は、右方向にBOX_INTERVALの間隔で並べます。
貼り付けた複数のテキストボックスをCollectionとして返します。

Private Function PasteTextbox(oTextList As Collection, oBox As Object) As CollectionoBox.Copy
        oSheet.Paste
        Dim oShape As Object: Set oShape = Selection.ShapeRange(1)
        
        With oShape
            .TextFrame2.TextRange.Characters.Text = sText
            .OnAction = ""  'マクロ登録解除
            .Top = nTop
            .Left = nLeft
            nLeft = nLeft + .Width + BOX_INTERVAL
        End With
            
        PasteTextbox.Add oShapeEnd Function

CutTextboxToClipboardは、シート上に貼り付けたテキストボックスを選択したうえで切り取り、クリップボードへ格納します。

Private Sub CutTextboxToClipboard(oBoxList As Collection)
    Dim oShape As Variant
    For Each oShape In oBoxList
        oShape.Select Replace:=False    '追加選択
    Next oShape
    
    Selection.Cut                       '切り取り→クリップボードヘ
End Sub

さいごに

テンプレートとなるテキストボックス図形をそのままボタンとして活用できるようにして、その図形の名前を利用することで、プログラムを変えずに図形ボタンを増やせるようにした点が面白い所かなと思います。

記事を気に入って頂き、お役に立てたら嬉しいです。