[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『テキストボックス(セル参照値)のマクロについて』(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.