プロが教える店舗&オフィスのセキュリティ対策術

図形のテキストボックスをエクセル上に配置しているのですが、これをVBAを使って、配置されている位置を変える方法を探しています。

仕組みとしては、

1)ボタンを押す毎に、予め決めてい置いた位置、2個所~3個所へ移動していく方法
2)ボタン名に場所を示す何らかの名前が付いていて(例えば位置A、B・・・等)そのボタン(位置A)を押す事で予め決めておいたA位置へ、位置Bボタンを押すとB位置へ移動する方法

2点の仕組みで作りたいのですが、どなたか詳しい方、宜しくお願いします。

A 回答 (2件)

補足です。


ShapeMoveは動かす図形に「myText1」という名前を付けてマクロを書きました。

また、「3個の例です。まず、3個の図形ともシートに正確に配置します」を補足しますと、
1つの図形を指定する3箇所に配置する場合、それぞれの位置に正確に図形を配置するという意味です。画面に3個配置し、その位置を目に見えるよう数値化するのが目的です。
    • good
    • 0
この回答へのお礼

完璧です!!!!!こりゃすごい! 感動です! ありがとうございました。

お礼日時:2001/06/06 23:06

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

長くなりました。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!