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

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

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (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
    • good
    • 0
この回答へのお礼

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

ところで、さいそくしてすみませんが、テキストボックスに値を入れるの質問1)2)3)の件、私のほうは、まだうまくいきません!やっぱりまだまだですね!もう、私の作戦はでつくしました。ギブアップ寸前です。いつも無理言ってすみませんが、よろしくお願いします。

お礼日時:2001/06/11 21:51

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コレクションの中身を比較し、新たに増えたオブジェクトの名前を記録しておけば解決できると思います。

不明点とかあれば、補足してください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/06/11 21:43

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBA 図形グループ化後オブジェクト名取得

2種類以上のオートシェープ選択し、グループ化した後に、そのグループ化した図形のオブジェクト名を取得したいです。私の取得の流れです。
(1)すでにグループ化前の図形は複数選択されている。
(2)グループ化後には、グループ図として選択されたままになっているはず。
(3)下記でオブジェクト名が取得できるはず。
  Selection.ShapeRange.Name

ですが、グループ化処理後に、自動的に選択が図形からはずされてしまい、エラーとなってしまいます。
エクセルシート上に他にもグループ化された図形が複数あるため、今対象にしているグループ化した直後の図形のオブジェクト名をどう取得すればよいかがわからないでいます。知りたいのはあくまで、今グループ化したそのオブジェクト名になります。

Aベストアンサー

sub macro1()
 selection.group.select
 msgbox selection.name
end sub
のようで良いでしょう。


グループ化すると選択が解除される事を見越して
sub macro2()
 dim o
 on error resume next
 set o = selection.group
 msgbox o.name
end sub
のようにしても構いません。

QVBAマクロで、図形等のオブジェクトを選択(特定)する方法ってありますか

こんにちは。VBAマクロを少しかじっています。
顔写真付きの従業員の検索システムを作りました。名前を入力(選択)したら、データシートから職員コード、住所、電話番号などの情報を検索し検索画面に表示します。この際、別のシートに顔写真を貼り付けたもの(1セルに1枚。セルに従業員名を入力してある。)から、VLOOKUP関数を使ってセル照会することで、画像も同時に表示することができます。
別の職員に切り換えたり、クリアする場合の画像の処理は、削除用のシートを用意し、そこにセルごと移動し、終了時にシートごと削除する方法をとりました。(当然、確認用のダイアログボックスが表示されます。)
前置きが長くなりましたが、問題は、用済みの画像を選択するプロシージャがあれば、あえて削除用のシートを用意する必要はありません。セルの場合は、Rangeプロパティやcellsプロパティで特定できますが、画像などのオブジェクトをセル番地などを使って特定する方法ってあるのでしょうか。
因みに、画像の選択処理を、マクロ記録でプロシージャを作成したら、
ActiveSheet.Shapes("Picture 1").Select などとなります。
よろしくお願いします。

こんにちは。VBAマクロを少しかじっています。
顔写真付きの従業員の検索システムを作りました。名前を入力(選択)したら、データシートから職員コード、住所、電話番号などの情報を検索し検索画面に表示します。この際、別のシートに顔写真を貼り付けたもの(1セルに1枚。セルに従業員名を入力してある。)から、VLOOKUP関数を使ってセル照会することで、画像も同時に表示することができます。
別の職員に切り換えたり、クリアする場合の画像の処理は、削除用のシートを用意し、そこにセルごと移動し、終了時...続きを読む

Aベストアンサー

検索シートにシェイプが1つしかなければ
ActiveSheet.Shapes(1).Select
で選択
ActiveSheet.Shapes(1).Delete
で削除できます。

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

エクセルのVBAを使ってシート上のテキストボックスのテキストを取得・変更するマクロを作成したいと思っていますがうまく行きませんので、お知恵を拝借したいとおもいます。

環境:WindowsXPでオフィス2002
状況:
エクセルブックa.xlsのシートに「コントロールツールボックス」のテキストボックスを配置(オブジェクト名はTEXTBOX_C)
エクセルブックb.xlsにコードを書き、a.xlsのTEXTBOX_CのプロパティのValueかTextを取りだしたい

試した事:
コントロールを配置したシートに次のマクロ
TEXTBOX_C.Text = "これはコントロールのテキストボックス"
を書くとテキストボックスに文字を入れ込めますが、別のエクセルブックからだと上手く行きません。

また、オートシェイプのテキストボックスの場合は簡単に出きるのですが、コントロールツールボックスではどうしても上手く行きませんので、対象法などご存知の方いらっしゃいましたら教えてください

Aベストアンサー

エクセルを新規に開きました。
そのSheet1に(コントロールツールボックスの)TextBoxを貼りつけました。
そのBook1から、ファイル-開くで別ブックを開きました。
別ブックのMojule1側に下記を書いて
Sub test02()
MsgBox Workbooks("book1").Worksheets("sheet1").textbox1.Text
End Sub
を実行すると、Book1のTextBoxに入れた文字列が表示
されました。
がそんな質問ではないのですか。

QEXECLマクロでshapeがグルーフ゜化されてるかどうかを調べる方法は?

全shape中のテキストを処理したいので一旦図形のグループ化を解除したいのですが、ヘルプに出ている方法で全部をselectしungroupしようとするとエラーになってしまいます。
そこで、一つづつungroupしようと思います。グループ化されてないものにungroupしようとするとエラーとなるので、グループ化されているかどうかをチェックしたいのですが、方法が見つかりません。どなたかご存知でしょうか?

Aベストアンサー

sp が現在調べているShape オブジェクトだとして
If sp.Type = msoGroup Then
で調べられると思います。

QエクセルVBA 図形の選択法は?

セル範囲をコピー
図としてペースト
ペーストされた図形を選択

記録マクロで書くと下記のようになります。
Sub Macro1()
Range("G2:K15").Select
Selection.Copy
Range("A1").Select
ActiveSheet.Pictures.Paste.Select
ActiveSheet.Shapes.Range(Array("Picture 1")).Select
End Sub

・場所を指定してペーストするのは、事前にselectする必要あるのでしょうか?
・挿入された図の名前がPicture1と分ってないと選択出来ません。他に方法あるのでしょうか?
図は複数あり、たった今ペーストした図形を選択したいのです。

参考になるURLあるいは書籍はないでしょうか?

Aベストアンサー

>挿入された図の名前がPicture1と分ってないと選択出来ません。他に方法あるのでしょうか?

Pasteする際に、Excelが勝手につけた名前を変数に保存して、その名前でSelectすることができます。

名前の保存は、こんな感じで。
MyPicName = ActiveSheet.Pictures.Paste.Name  ’Pasteと同時に、その名前を変数に代入します。

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

QVBA オブジェクトが空かどうか判定する

皆様のお知恵を拝借させてください。

エクセルVBAでオブジェクトを入れる変数を定義し、その変数にオブジェクト
が入っているかどうか検査したいのですがどうしたらいいでしょうか。

例えば---
Dim a As Workbook
If a <> nothing then ←この部分が分からない。このままだとエラー。
処理
End if
---------
環境
エクセル2003
WinXPsp1

Aベストアンサー

もし、aが空だったら
If a Is Nothing Then 

もし、aが空じゃなかったら
If Not a Is Nothing Then

QエクセルVBAで画像を貼り付ける座標設定方法は?

Sheets("Sheet1")に貼り付けたJ-pegの画像(=シンボルマーク)を別なシートに貼り付けるのは下記のVBAで出来ました。ただ、これでは貼り付け先のシートのセルK12が、貼り付け元のK12と同じ位置でないと思った場所に張り付きません。
そこでセルで場所を指定するのではなく、座標のようなもので指定する方法はないものかと考えた次第です。
オートシェイプなどは座標指定で作成できるのですが、J-pegのような画像はどうすればいいのでしょうか?

Sub TEST()
Sheets("FACE").Shapes("シンボルマーク").Copy
ActiveSheet.Range("K12").Select
ActiveSheet.Paste
End Sub

Aベストアンサー

#1です。
>この場合、ファイルをエクセルにくっつけて渡すなんてこと
>はできないものでしょうか?(別々にではなくあくまでエク
>セルのブックに付属した形で)
Excelのブックに付属した形にするなら、コピーペーストする方がいいと思います。一旦挿入した画像を別途保存するのは、簡単には出来ないと思います。

複数のシートで同じような作業をするなら、次のような方法も考えられます。
Function CpyMrk(MrkNM As String, myTop As Single, myLeft As Single)
Sheets("FACE").Shapes(MrkNM).Copy
ActiveSheet.Paste
ActiveSheet.Shapes(MrkNM).Top = myTop
ActiveSheet.Shapes(MrkNM).Left = myLeft
End Function

Sub test()
CpyMrk "シンボルマーク", 10, 10
End Sub

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング