• ベストアンサー

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

エクセル上に並んだテキストボックスを、ボタンを押すことで、任意のテキストボックスをグループ化させたい。また、別のボタンでグループ化の解除が出来るようなVBAをおしえてください。 テキストボックスは、Sheet1~3まであって、ボタンもそれぞれに配置してあり、 どこのSheetのボタンを押しても、各シート、それぞれに任意の設定したテキストボックスがグループ化できるようにしたい ※各シート、グループ化するテキストボックスはおなじでなない・・・ よろしくお願いします。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

「任意」の意味は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
質問者

お礼

またまたnishi6さん!いつもすみません!ありがとうございます。 結合したら結合ボタンが消えて、解除が現れの繰り返し、には感動しました。 おーっ!って感じでした。今回も一発で成功しました。 ほんとにいつもいつもありがとうございます。 ところで、さいそくしてすみませんが、テキストボックスに値を入れるの質問1)2)3)の件、私のほうは、まだうまくいきません!やっぱりまだまだですね!もう、私の作戦はでつくしました。ギブアップ寸前です。いつも無理言ってすみませんが、よろしくお願いします。

その他の回答 (1)

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.1

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
質問者

お礼

ARCさん!いつも回答ありがとうございます。 早速コードを書いていますが、まだ動いてくれません。でも何とか動きそうなのでがんばってみます。 また何かありましたら、よろしくお願いします。ありがとうございました。

関連するQ&A

  • テキストボックスを消すVBA

    ボタンを押すことでテキストボックスが消えるようにしたいのですが、 ボタンは、2つ 「ONとOFF」 1~3のSheetにあるテキストボックスをSheet5に配置した「ONとOFF」のボタンで操作するようにしたいのですがよろしくお願いします。

  • エクセルVBAで、テキストボックスにセルの値を入れる

    宜しくお願いします。 エクセルデータの各項目を、すでに書式(表)が印刷された用紙のそれぞれの項目の位置に印刷させたいのですが・・・ 各項目には、500行ぐらいのデータがあり、別のワークシートの表示させたい位置(すでに印刷された用紙にあわせてある)に各項目ごとのテキストボックスを作っておいて、そのテキストボックスに各項目のデータを1行ごとに表示させて、テキストボックスのフォント調整、印刷 ~を繰り返したいのですが、どのようなコードを書けばよいのでしょうか? 進め方としては、データシートからテキストボックスに各項目のデータが表示されたら、シート上でテキストボックスのフォントや位置の微調整が出来るようにしておいて、印刷ボタンをクリックすると印刷され、次へのボタンをクリックすると、次の行のデータがテキストボックスに表示されるようにしたい。 ※印刷する場合は、テキストボックス内の文字のみ印刷(シートには印刷したくない文字書きたいので・・・) また、そのフォームには、パターンが5つあって、データには1行ごとにパターン番号が入力されているとして、それぞれのパターンにあわせたテキストボックスの配置してあるシートへ行くようにもしたい。 データの入れ替わりが多いので、別のワークブックと繋がるような仕組みにしておいて、テキストボックスの配置してあるブック側から、データのあるブックを呼びに行ってデータを取りに行くようにしておきたい。 以上、条件が多くてすみませんが、VBAは初心者で、ほんの部分的にしかまだ分かりません。どなたか詳しい方宜しくお願いします。

  • テキストボックスの大きさを、基準の大きさに戻す(エクセルVBA)

    図形のテキストボックスの大きさを取得して、その値を各テキストボックスの基準の大きさとして記録しておき、テキストボックスの大きさをマウスでドラッグして大きさを変えた後、ボタン1つでもとの大きさに戻したいのですが、どのようにすればよいでしょうか? 1)図形のテキストボックス、大きさの取得方法は? 2)基準の大きさと記録する方法は? 3)記録された大きさに戻すには?(シート上に配置されたボタンで実行) ※ 複数のシートに複数のテキストボックスがあります。 ※ シート毎にセットします。(シート毎にテキストボックスのサイズが違う為) ※ 現在、各テキストボックスには、基準位置がセットしてあり、ボタンで基準位置へ戻る仕組みが組まれています。(これをそのままにして・・・) ※ エクセル97と2000で使えるようにします。(作成は97) 宜しくお願い致します。

  • エクセルVBAでテキストボックスの値の取得と変更について

    エクセルのVBAを使ってシート上のテキストボックスのテキストを取得・変更するマクロを作成したいと思っていますがうまく行きませんので、お知恵を拝借したいとおもいます。 環境:WindowsXPでオフィス2002 状況: エクセルブックa.xlsのシートに「コントロールツールボックス」のテキストボックスを配置(オブジェクト名はTEXTBOX_C) エクセルブックb.xlsにコードを書き、a.xlsのTEXTBOX_CのプロパティのValueかTextを取りだしたい 試した事: コントロールを配置したシートに次のマクロ TEXTBOX_C.Text = "これはコントロールのテキストボックス" を書くとテキストボックスに文字を入れ込めますが、別のエクセルブックからだと上手く行きません。 また、オートシェイプのテキストボックスの場合は簡単に出きるのですが、コントロールツールボックスではどうしても上手く行きませんので、対象法などご存知の方いらっしゃいましたら教えてください

  • テキストボックスの移動(2)

    前回、質問しましたが、回答いただいたプログラムで、別のシートから複数のシートのテキストボックスの移動を移動させたいのですが・・・ たとえば、Sheet1・Sheet2・Sheet3にテキストボックス1が配置してあって、A位置とB位置に動くようにしてあります。 前回のプログラムでは、各シートに位置を指定するボタンが配置してありましたが、このボタンをSheet5に配置して、Sheet1・Sheet2・Sheet3の各テキストボックス1が一斉に動くようにしたいのですがよろしくお願いします。 前回のURL → http://oshiete1.goo.ne.jp/kotaeru.php3?q=85846

  • VBAでテキストボックスを作成

    エクセルのVBAで、セルに長めの文章を打ち込む時、セルを選択したらテキストボックスなりが開くようなことはできませんか? テキストボックスは別窓じゃなく、同じエクセル内で開くのが望ましいです。

  • テキストボックス

    たびたびの質問すみません。 エクセルVBAでテキストボックス等(条件)に入力すると、他のテキストボックスにエクセルシートから照合して表示させる方法で、条件のテキストボックス等を2つ以上にすることは可能でしょうか、あればやり方を教えてください。

  • テキストボックスのフォントサイズの復元

    エクセルのシート上にある、図形のテキストボックスのフォントサイズに「12」をセットしておいて、シート上に配置してあるコントロールボタンをクリックする事で、変更されたサイズから「12」へもどす仕組みを作りたいのですが・・・ テキストボックスのフォントサイズ 「12」から、テキストボックスをアクティブにし、ツールバーでフォントサイズを変更する。 ↓ ** その後 シート上に配置されたボタンを押すと元の「12」に戻る ※ エクセル97、2000で使用(作成は97) こんなことできますか? できれば、どなたか教えて下さい。宜しくお願いします。

  • エクセル VBA : テキストボックスのグループ化

    エクセル VBAにてテキストボックスをグループ化したいのです。 マクロを記録すると、 ActiveSheet.Shapes.Range(Array("Oval 82", "Text Box 83")).Select Selection.ShapeRange.Group.Select となります。 "Text Box 83"のように常に名前が固定されているわけではないので、セルのA1からC10にある図形を選択してグループ化するようにしたいのです。 ご存知の方、アドバイス願います。

  • Word2003にて、貼り付けた図の上にテキストボックスを

    Word2003にて、貼り付けた図の上にテキストボックスを 数点グループ化したものがあり、その一部のテキストボックス の大きさを変えたいと思い、グループ化解除を 行ったのですが、解除した途端に 図やテキストボックスがばらばらに動いてしまい どこにあるのかもわからなくなります。 ばらばらにならないようにする方法は あるのでしょうか? 解除前はテキストボックスの書式設定は 行内配置、文字と一緒に移動する、オーバーラップする にチェックしています。 ご教示いただけましたら大変助かります。 よろしくお願いいたします。

専門家に質問してみよう