[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『テキストボックス(セル参照値)のマクロについて』(TOM)
エクセルに地図を貼って、その地図上に「テキストボックス」を配置して、例えば地図上の数字が羅列してあるところに対応する数字の数値を移動して配置したいと考えています。
この時、数値は変動するものとして定期的に数値変更をします。
このため、テキストボックスは数値を参照してその参照したものを手動で適切な位置に配置するのですが、ある数字と数値が書いてあるリストの横にそれを参照した「テキストボックス」を簡単に作る方法はないでしょか?
数は500以上あり、現状は「テキストボックス」を作成した後、数式バーより「=」を入力し、該当セルを参照するようにして作っていますが、どうしても非常に時間がかかり終わりが見えないのでいい方法がないか頭を悩ませています。
ダブルクリックでセルをテキストボックスに変換するようなマクロがあったので使ってみたんですが数式に対応するものがありませんでした。(文字列のテキストボックスになってしまう)
現状は AのセルにNO Bのセルに数値 が入っていて、=CONCATを使って文字列を作成し例えば[NO1 1000」というようなテキストボックスができ、その「NO1 1000」というテキストボックスを任意の位置に手動で持っていくという作業です。
やりたいのは特定のセルをダブルクリックしたら上記のデータができるようになる、か、範囲選択した箇所のセルを全て参照したテキストボックスに変更したい、ということです。
この場合、B列の1000という文字が変動しますので、変動したらリストの1000が変更される、といったかんじです。
もしお力添えを頂けますと大変助かります。
< 使用 Excel:Office365、使用 OS:Windows10 >
(あほ) 2022/07/05(火) 14:39
A     B   C     D
東京 No1 1000 =CONCAT(B1," ",C1)
大阪 No2 2000 =CONCAT(B2," ",C2)
京都 No3 4000 =CONCAT(B3," ",C3)
こんな感じであり、Dで返された値を(=$D$1で)テキストボックス化し、同じシート内にある東京の位置にテキストボックスを持っていく、という感じです。
500個のデータを テキストボックス作成 → 数字バーをクリック → =$D$1 と入力 という手順で今テキストボックスを生成しておりますが、これが途方もない作業だったので、質問させて頂きました。
テキストボックスを移動されるというくだりは後からする作業なので、とあるセルを参照したテキストボックスを一括もしくは簡単に作れる方法があればご教授頂きたい、というのがお願いとなります。
(TOM) 2022/07/05(火) 14:46
(隠居Z) 2022/07/05(火) 14:57
 Sheet1対象、既存のテキストボックス【MsoShapeType列挙 17】は
削除されます。
新規にF5:H20に作成されます。
お試しは新規BOOKを強く推奨。。。^^;
Option Explicit
Sub sp01()
    Dim sp            As Variant
    Dim r             As Range
    Dim rr            As Range
    With Worksheets("Sheet1")
        .Activate
        Set rr = .Range("F5:H20")
        If .Shapes.Count > 0 Then
            For Each sp In .Shapes
                If sp.Type = 17 Then sp.Delete
            Next
        End If
        For Each r In rr
            Set sp = .Shapes.AddTextbox(1, r.Left, r.Top, r.Width, r.Height)
            With sp
                .Select
                Selection.Formula = "=$D$1"
            End With
        Next
        .Cells(1).Select
    End With
End Sub
(隠居Z) 2022/07/05(火) 16:21
毎回生成し直すならシンプルに「図」で対応するという手も...
    Sub Macro1()
        Dim r As Range
        ActiveSheet.Pictures.Delete
        For Each r In [D1:D3].Cells
            r.CopyPicture xlPrinter, xlPicture
            r.Offset(, 1).Select
            r.Worksheet.Paste
    '        Selection.Formula = "=" & r.Address
        Next
    End Sub
(白茶) 2022/07/05(火) 16:48
「500」なら少ない方な気がしますが。。。。
一回全部仕込んでおいて、セルダブルクリックで対応するテキストボックスの
表示/非表示を切り替えるとかならできるかと。
けど、そんなにテキストボックスを配置したらファイルが重くなるかも?
(まっつわん) 2022/07/05(火) 17:19
| ある数字と数値が書いてあるリストの横に | それを参照した「テキストボックス」を簡単に作る方法はないでしょか?
既に2種類のコード案が提示されていますので、ほぼ解決と思われます。 (なお、どのくらいの大きさの地図か不明ですが、 テキストボックスが500もあると、コントロール不能になる気がします。 GoogleMapなどが利用できるならそのほうが良いかもしれません)
 ついでながら、
 コードをお借りして、テキストボックスの微調整をしてみました。
     ・余白の調整
     ・サイズの自動調整 等
 です。    
 Sub test()
     Dim sp  As Shape
     Dim rng As Range
     Dim r   As Range
     Dim r2  As Range
     With Worksheets("Sheet1")
         Set rng = .Range("D1:D3")
         'deleteTextBox rng
         For Each r In rng
             Set r2 = r.Offset(, 1)
             'Set r2 = r
             Set sp = .Shapes.AddTextbox(msoTextOrientationHorizontal, r2.Left, r2.Top, r2.Width, r2.Height)
             sp.DrawingObject.Formula = "=" & r.Address
             sp.TextFrame2.MarginTop = 2#
             sp.TextFrame2.WordWrap = msoFalse
             sp.TextFrame2.AutoSize = msoAutoSizeShapeToFitText
             sp.Height = r2.Height
         Next
         .Cells(1).Select
     End With
 End Sub
【コメント】サイズの自動調整について。 いったんテキストボックスを作成したうえで、 その後にセルの文字数を変更した場合、 セル参照の時は、 「テキストに合わせて図形のサイズを調整する」では、 サイズの自動調整は利いてくれないのですね。 これはがっかりですかね。 (「図形内で折り返す」をオフにしておけば、通常の直接テキスト設定なら、自動で伸縮するのですが。) (γ) 2022/07/06(水) 08:26
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
 Modified by kazu.