-PR-
解決済み

テキストボックスをグループ化するVBA

  • すぐに回答を!
  • 質問No.87880
  • 閲覧数1413
  • ありがとう数5
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 59% (116/195)

エクセル上に並んだテキストボックスを、ボタンを押すことで、任意のテキストボックスをグループ化させたい。また、別のボタンでグループ化の解除が出来るようなVBAをおしえてください。

テキストボックスは、Sheet1~3まであって、ボタンもそれぞれに配置してあり、
どこのSheetのボタンを押しても、各シート、それぞれに任意の設定したテキストボックスがグループ化できるようにしたい
※各シート、グループ化するテキストボックスはおなじでなない・・・

よろしくお願いします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル13

ベストアンサー率 68% (791/1163)

「任意」の意味はVBAの中で自由に設定できると解釈しました。Case以下を参考にして下さい。
下の例は、Sheet1~3の各テキストボックスに、'各シートに対応してmyText1_1、myText1_2、myText1_3・・・と名前を付けています。(Textの次がシート番号です)
2つのボタンは逆の処理なので表示・非表示を切り替えています。
最初は、結合していない状態を確かめて、結合ボタンから開始して下さい。

'標準モジュールに貼り付けます。
Public Sub Ketugou(mySht As Integer)
Dim sht As Integer 'シート
Application.ScreenUpdating = False
For sht = 1 To 3
Worksheets("Sheet" & sht).Activate
With Worksheets("Sheet" & sht)
Select Case sht
Case 1 '例、1,2,3を結合
.Shapes.Range(Array("myText1_1", "myText1_2", "myText1_3")).Select
Case 2 '例、2,3,4を結合
.Shapes.Range(Array("myText2_2", "myText2_3", "myText2_4")).Select
Case 3 '例、1,4を結合
.Shapes.Range(Array("myText3_1", "myText3_4")).Select
End Select
Selection.ShapeRange.Group.Select 'グループ化
Selection.Name = "grp" & sht 'グループ名(解除できるよう勝手に名前を付けている)
.Shapes("grp" & sht).TopLeftCell.Select 'グループの左上を選択状態にする
.cmdKetugo.Visible = False '結合ボタンを非表示
.cmdKaijyo.Visible = True '解除ボタンを表示
End With
Next
Worksheets("Sheet" & mySht).Select '元のシートに戻る
Application.ScreenUpdating = True
End Sub

Public Sub Kaijyo(mySht As Integer)
Dim sht As Integer 'シート
Application.ScreenUpdating = False
For sht = 1 To 3
Worksheets("Sheet" & sht).Activate
With Worksheets("Sheet" & sht)
.Shapes("grp" & sht).Select 'グループを選択
Selection.ShapeRange.Ungroup.Select '結合解除
.Shapes("myText" & sht & "_1").TopLeftCell.Select '左上セル
.cmdKetugo.Visible = True '結合ボタンを表示
.cmdKaijyo.Visible = False '解除ボタンを非表示
End With
Next
Worksheets("Sheet" & mySht).Select '元のシートに戻る
Application.ScreenUpdating = True
End Sub

各シートには同名のボタンが2個あります。cmdKetugoとcmdKaijyo。
各シートモジュールに貼り付けます。ただし、KetugouとKaijyoの次の数値は、そのシート番号にします。どのシートに復帰すればいいかを表しています。
Private Sub cmdKetugo_Click()
Ketugou 1
End Sub

Private Sub cmdKaijyo_Click()
Kaijyo 1
End Sub
お礼コメント
rurucom

お礼率 59% (116/195)

またまたnishi6さん!いつもすみません!ありがとうございます。
結合したら結合ボタンが消えて、解除が現れの繰り返し、には感動しました。
おーっ!って感じでした。今回も一発で成功しました。
ほんとにいつもいつもありがとうございます。

ところで、さいそくしてすみませんが、テキストボックスに値を入れるの質問1)2)3)の件、私のほうは、まだうまくいきません!やっぱりまだまだですね!もう、私の作戦はでつくしました。ギブアップ寸前です。いつも無理言ってすみませんが、よろしくお願いします。
投稿日時 - 2001-06-11 21:51:13
関連するQ&A
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル13

ベストアンサー率 46% (643/1383)

Private Sub CommandButton1_Click()  'グループ化  Dim myDocument As Worksheet  Set myDocument = Worksheets("Sheet1")  myDocument.Shapes.Range(Array("Text Box 1", "Text Box 3&qu ...続きを読む
Private Sub CommandButton1_Click()
 'グループ化
 Dim myDocument As Worksheet
 Set myDocument = Worksheets("Sheet1")
 myDocument.Shapes.Range(Array("Text Box 1", "Text Box 3")).Group
End Sub

Private Sub CommandButton2_Click()
 'グループ解除
 Dim myDocument As Worksheet
 Set myDocument = Worksheets("Sheet1")
 myDocument.Shapes("Group 1").Ungroup
End Sub


ヘルプ「ShapeRange コレクション オブジェクト」のサンプルの変形です。
"Text Box 1"などの名前に関しては、あらかじめイミディエイトペインで
? Worksheets(1).shapes(1).name
などとして調べておけば良いでしょう。

グループ解除については、ここでは単純化していますが実際には、も少しややこしいです。
というのも、グループ化を行うごとにShapeオブジェクトが新規に生成され、同時に名前(Group X)が新しく自動で生成されるからです。

この問題に関しては、グループ化を行う前と後で、Shapesコレクションの中身を比較し、新たに増えたオブジェクトの名前を記録しておけば解決できると思います。

不明点とかあれば、補足してください。
お礼コメント
rurucom

お礼率 59% (116/195)

ARCさん!いつも回答ありがとうございます。
早速コードを書いていますが、まだ動いてくれません。でも何とか動きそうなのでがんばってみます。
また何かありましたら、よろしくお願いします。ありがとうございました。
投稿日時 - 2001-06-11 21:43:34
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ