- ベストアンサー
テキストボックスの移動
図形のテキストボックスをエクセル上に配置しているのですが、これをVBAを使って、配置されている位置を変える方法を探しています。 仕組みとしては、 1)ボタンを押す毎に、予め決めてい置いた位置、2個所~3個所へ移動していく方法 2)ボタン名に場所を示す何らかの名前が付いていて(例えば位置A、B・・・等)そのボタン(位置A)を押す事で予め決めておいたA位置へ、位置Bボタンを押すとB位置へ移動する方法 2点の仕組みで作りたいのですが、どなたか詳しい方、宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
補足です。 ShapeMoveは動かす図形に「myText1」という名前を付けてマクロを書きました。 また、「3個の例です。まず、3個の図形ともシートに正確に配置します」を補足しますと、 1つの図形を指定する3箇所に配置する場合、それぞれの位置に正確に図形を配置するという意味です。画面に3個配置し、その位置を目に見えるよう数値化するのが目的です。
その他の回答 (1)
- nishi6
- ベストアンサー率67% (869/1280)
3個の例です。まず、3個の図形ともシートに正確に配置します。 myZukeiPotを標準モジュールに貼り付けボタンを貼り付けたシートから実行します。各図形の縦横位置がA1、B1、C1・・・に出力されます。(名前、縦位置、横位置) この中の動かしたい図形の情報を記録しておきます。 '位置を調べる Public Sub myZukeiPot() Dim shp As Shape '四角形 Dim cot As Integer 'カウンタ For Each shp In ActiveSheet.Shapes cot = cot + 1 Range("A" & cot) = shp.Name '名前 Range("B" & cot) = shp.Top '上端位置 Range("C" & cot) = shp.Left '左端位置 Next End Sub 移動を連続させるボタンとA、B、C位置に動くボタンを配置します。計4個。順にCommandButton1,2,3,4です。 下記のマクロを標準モジュールに貼り付け、「***縦・横位置の登録***」の箇所を上記で記録しておいた数値にします。順序は決めて下さい。 '四角形を動かす(例:四角形は3個) Public Sub ShapeMove(Optional ShiteiNo) Const ShpNum = 3 '四角形の個数 Dim ShpName As String '四角形の名前 Dim ShpTop(3), myShpTop As Double '動かす各位置、表示位置 Dim ShpLeft(3), myShpLeft As Double '動かす各位置、表示位置 ShpTop(1) = 71.25: ShpLeft(1) = 165.75 '***縦・横位置の登録*** ShpTop(2) = 98.25: ShpLeft(2) = 201 ShpTop(3) = 125.25: ShpLeft(3) = 276 Dim ct As Integer 'カウンタ Dim myShpIdx As Integer '四角形の順序 With ActiveSheet If IsMissing(ShiteiNo) Then 'ぐるぐる回る myShpTop = .Shapes("myText1").Top '今あった位置 myShpLeft = .Shapes("myText1").Left '今あった位置 myShpIdx = 0 For ct = 1 To ShpNum If myShpTop = ShpTop(ct) And myShpLeft = ShpLeft(ct) Then myShpIdx = ct '何番目か探す End If Next '次の場所にする myShpIdx = myShpIdx + 1 If myShpIdx > ShpNum Then myShpIdx = 1 End If Else '位置指定 myShpIdx = ShiteiNo End If .Shapes("myText1").Top = ShpTop(myShpIdx) .Shapes("myText1").Left = ShpLeft(myShpIdx) End With End Sub ボタンを配したシートモジュールに下記マクロを貼り付けます Private Sub CommandButton1_Click() 'ぐるぐる回る ShapeMove End Sub Private Sub CommandButton2_Click() 'Aの位置(Aに対応して「1」) ShapeMove 1 End Sub Private Sub CommandButton3_Click() 'Bの位置(Bに対応して「2」) ShapeMove 2 End Sub ' Private Sub CommandButton4_Click() 'Cの位置(Cに対応して「3」) ShapeMove 3 End Sub 長くなりました。
お礼
完璧です!!!!!こりゃすごい! 感動です! ありがとうございました。