No.1
- 回答日時:
個人用マクロブックに作ってみました。
ThisWorkbook に以下を。
Option Explicit
Private Sub Workbook_Open()
With Application.CommandBars("Cell").Controls.Add _
(Type:=msoControlButton, ID:=2950, Temporary:=True)
.Caption = "テキストボックスの貼り付け"
.FaceId = 3143
.OnAction = "テキストボックスの貼り付け"
End With
End Sub
標準モジュールに以下を。
Option Explicit
Sub テキストボックスの貼り付け()
With ActiveWindow.RangeSelection
ActiveSheet.Shapes.AddTextbox(Orientation:=msoTextOrientationHorizontal _
, Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height).Select
End With
With Selection.ShapeRange(1).TextFrame2
.MarginTop = 0
.MarginBottom = 0
.MarginRight = 0
.MarginLeft = 0
.VerticalAnchor = msoAnchorMiddle
.HorizontalAnchor = msoAnchorCenter
End With
End Sub
回答ありがとうございます。
私の知識不足のため、これをベースに思い通りの動きを得られませんでした。勉強していきます。ありがとうございます。
No.2ベストアンサー
- 回答日時:
こんにちは
既に回答が出ているので、ご参考までに。
#1様との違いは、以下の点です。
・マウスポインタの位置にテキストボックスを追加します
(#1様の回答はセル位置に追加されますが、ボックスの左上がマウス位置になるように追加します)
・自動的にナンバリングします(1~100)
(現状のままだと使い易いのか、使いにくいのかわかりませんが(笑)、自動ナンバリングのヒントとして…)
※ テキストボックスのサイズ、色等は適宜調整願います
※ 「クリックに反応」だと他のマウス操作ができなくなってしまうので、ひとまず、ダブルクリックにしてありますが、#1様ご提案のコマンドに追加する方式が使いやすそうな気がしますので、そのようにする方が良いかもしれません。
標準モジュールに
Private counter As Integer
Const ratio = 72 / 96
Private Type POINTAPI
X As Long
Y As Long
End Type
Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Sub TextBoxWithNumber()
Dim p As POINTAPI
Dim X As Single, Y As Single, Z As Single
Dim tbx As Shape
GetCursorPos p
Z = ActiveWindow.Zoom / 100
X = (p.X - ActiveWindow.PointsToScreenPixelsX(0)) * ratio / Z
Y = (p.Y - ActiveWindow.PointsToScreenPixelsY(0)) * ratio / Z
Set tbx = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, X, Y, 22, 22)
counter = (counter Mod 100) + 1
tbx.Fill.ForeColor.RGB = RGB(255, 255, 255)
tbx.Line.ForeColor.RGB = RGB(125, 125, 125)
tbx.Line.Weight = 0.25
With tbx.TextFrame2
.MarginLeft = 0
.MarginRight = 0
.MarginTop = 0
.MarginBottom = 0
.VerticalAnchor = msoAnchorMiddle
.HorizontalAnchor = msoAnchorCenter
.TextRange.Font.Size = 10
.TextRange.Characters.Text = str(counter)
End With
End Sub
シートモジュールに
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Call TextBoxWithNumber
End Sub
ありがとうございます。
回答ありがとうございます。
ほとんど、思い通りの動きになっております。実際は、図面データ(画像)の任意の位置へテキストボックスへプロットしていく使用方法となります。
ダブルクリックに拘らず、他にいい方法はないでしょうか??
No.3
- 回答日時:
画像にということなら、No.2さんの回答でいいと思いますが、
ダブルクリックがいいのか右クリックがいいのかは、あなたが選択することです。
プロットするということは、テキストボックスではなく、本当は「吹き出し」を描きたいのでは?
あとは、マクロをどこに書くかですね。
エクセルで他の作業をする場合に邪魔にならない様にする為にどうしたいか?
No.4
- 回答日時:
No2です
>実際は、図面データ(画像)の任意の位置へテキストボックスへ
>プロットしていく使用方法となります。
あれっ!?
それって、エクセルに貼り付けた画像の上にテキストボックスを置いていくって意味ですよね?
もしそうだとすると、クリックやダブルクリックではセルのイベントが発生しないので、No2のコードではうまくいかないように推測しますけれど?(セルの背景として画像を入れ込むようなことはできなかったように思いますので…)
基本的にNo1様のコードとNo2のコードの処理内容はほとんど同じですし、はからずも構成も似たものになってます。
(イベントあるいはコマンド取得部分と、実際の処理部分を分けた構成になっている)
違いはNo2にも示しましたが、トリガー(きっかけ)が異なることと、挿入位置を決めるのにマウス位置/セル位置のどちらから求めているかだけと言ってもよいくらいでしょう。(内容の違う部分はコードも異なりますが)
>ダブルクリックに拘らず、他にいい方法はないでしょうか??
シート上では(No2にも記したように)操作のためのクリックイベントは直接は拾えないと思いますが、挿入した画像上であればクリックイベントを拾うことが可能ですので、クリックで動作するように変えてあげれば、そのまま使えるはずと思います。
あるいは、キーボードとの併用になりますが、ショートカットを割り当てておいてキーの押下げでテキストボックスを追加するようにしておくとか、いろいろ方法はあるものと思います。
実際にどのような使い方になるのかがわかりませんので、質問者様(あるいは使う方)の使いやすい方法に設定しておくのが宜しいかと思います。
(上でも述べましたが)たまたまとは言え、No1、2ともトリガー部分と実処理部分が別構成になっているので、トリガー部分をを入れ変えるだけで組み換えが可能なはずと思います。
ところで、自動ナンバリングに関しては、No2のままだと番号を変えたい時や、途中から作業継続したい時などに開始番号を指定できないので、実際の使用に供するには不十分ではないかと想像します。
ですので(多分)、最低でも開始番号をセット可能なようにしておいた方がよさそうに思います。
とはいっても、counter変数に値をセットするだけの簡単な処理なので、別に作成しておいて、必要な時に実行すれば済みますね。(頻度が多いわけではないでしょうから)
いっそのこと、counter変数の代わりにシート上の固定セルを利用するようにしてしまえば、そのセルの値を直接編集することで番号を指定できるようにもなるので、そちらの方が良いのかも知れません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス 意図せずサブプロシージャを移動してしまうのを止めたい 1 2022/09/02 09:19
- Excel(エクセル) エクセルにサムネイル画像組み込み 2 2022/09/02 17:13
- その他(Microsoft Office) EXCEL2007 右クリックに「値を貼り付け」がない プライベートのパソコンを購入し(window 3 2022/04/13 23:10
- Word(ワード) 分かる方教えてください。 wordに図を差込して資料を作成してますが その図上の説明したい箇所に①と 3 2022/10/20 20:05
- Visual Basic(VBA) Vba テキストボックスの文字列をボタンで入力するとテキストボックスの端の文字列が更新されない 2 2022/05/21 23:32
- 教育学 エクセルで小数点以下を四捨五入について教えてください。 2 2023/04/05 17:33
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- その他(Microsoft Office) パワーポイントやワード、エクセルでのスライドショーやテキストの微調整について 1 2023/01/12 05:50
- Excel(エクセル) シートが違う2枚のエクセルシートにある数値を別シートにコピーしたい(VBA?) 8 2022/03/31 12:24
- Visual Basic(VBA) Outlook VBAについて 1 2023/07/10 12:41
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
任意で選択したセルをテキストボックスに表示
Excel(エクセル)
-
excelで勝手にテキストボックスが出来ている
Excel(エクセル)
-
【マクロ】図をクリックした位置に貼り付けるマクロ
Excel(エクセル)
-
-
4
エクセルに入力しようとすると自動的に四角がでる
Excel(エクセル)
-
5
エクセル マクロ クリックしたセルの内容を貼り付け
Excel(エクセル)
-
6
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
太字に設定されているセルの個...
-
Excelで挿入した図をセルの中央...
-
Excel内での検索結果をシート...
-
エクセル 数字をすべて○などの...
-
エクセルでの検索ボックスの作...
-
【EXCEL】先週の月曜日の日付を...
-
アポストロフィーの一括挿入 ...
-
フォントの色を指定して削除出...
-
シート保護とグループ化機能を...
-
Excel ハイパーリンクのURLを別...
-
Excelで、図形内の文字をセルに...
-
excelで セルの移動時に...
-
マクロを実行すると画像がズレ...
-
クリックすると文章が表示され...
-
空白セルを空セルに置き換える...
-
VBA 見つからなかった時の処理
-
現在のセルの位置を返す関数は...
-
エクセル 未入力セルがあると...
-
Excel2007 色のカウント (VBA)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
エクセル 数字をすべて○などの...
-
Excel内での検索結果をシート...
-
クリックすると文章が表示され...
-
Excelでセルをクリックす...
-
太字に設定されているセルの個...
-
Excel ハイパーリンクのURLを別...
-
Excelで、図形内の文字をセルに...
-
マクロを実行すると画像がズレ...
-
現在のセルの位置を返す関数は...
-
Excelで挿入した図をセルの中央...
-
フォントの色を指定して削除出...
-
VBA 見つからなかった時の処理
-
エクセルでの検索ボックスの作...
-
エクセル 未入力セルがあると...
-
Excel2007 色のカウント (VBA)
-
エクセルでPDFリンクを大量...
-
【EXCEL】先週の月曜日の日付を...
-
EXCELのセルや文字色の反映
-
セルがクリックされた回数をカ...
おすすめ情報