[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAにてオートシェイプを非表示』(勘吉)
初心者のため説明下手ですがご容赦ください。
まず状況ですが
シート1〜7まで存在します。
シート1〜5がオブジェクトが多数存在し
シート7がオブジェクトの名前、詳細等の一覧となっております。
シート1〜5のオブジェクトには
図形の書式→オブジェクトの選択と表示 にて名前を設定してます。(シート7の一覧A列と同じ名前)
ここからやりたいことです。
シート7のF列に「1」と入力すると、その行のA列と同じ名前のオブジェクトを非表示にしたいです。
ちなみにシート7は1500行程度存在します。
シート1〜5にも1500個程度オブジェクトが存在します。
これをVBAにてマクロを組みたいのですが最初から躓いております。
よろしくお願いします。
< 使用 Excel:Excel2019、使用 OS:Windows10 >
具体的に、どんな事が分かれば出来そうですか?
(1)マクロを起動する方法はどうするか ・コマンドボタンをクリックしたとき→コマンドボタンにマクロを登録します。 ・シート7のF列のセルの値を変更したとき→シートモジュールのWorksheet_Changeプロシジャにマクロを書きます
(2)シェープを指定する方法がわからない? → マクロの記録をしてみましょう (3)シェープを非表示にする方法が分からない? → マクロの記録をしてみましょう
(4)全然わからないので作ってほしい → シート7のレイアウトを詳しく説明しましょう (´・ω・`) 2024/01/09(火) 17:40:12
UI的にはシート7に「チェックボックス」を配置して、ON/OFFを切り替えるのがいいと思います。 1500個ものオブジェクトというのは想像できませんが、「もたつき感」はないのでしょうか?
それは考えずに、「チェックボックス」を使った案を投下します。 「Sheet1〜Sheet5」にオートシェイプを適当に配置した新規ブックで試してください。testを実行です。 「Sheet7」に一覧表が作成されるので、「チェックボックス」を「ON/OFF」してみてください。 オートシェイプには、同じ名前を指定できるので、「シート名」と「IDプロパティ」で特定しています。
※19:47、一部修正しました。
Sub test() Const 一覧$ = "Sheet7" Dim shp As Shape, ws As Worksheet, cboxCnt&, r As Range Application.ScreenUpdating = False With Sheets(一覧) .Columns("A:A").ColumnWidth = 40 .Columns("A:A").RowHeight = 20 .CheckBoxes.Delete .Range("A1:D1").Value = Array("AutoShape名", "シート名", "Shape.ID", "ON/OFF") For Each ws In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5")) For Each shp In ws.Shapes cboxCnt = .CheckBoxes.Count Set r = .Range("A1").Offset(cboxCnt + 1) With .CheckBoxes.Add(Left:=r.Left, Top:=r.Top, Width:=r.Width, Height:=r.Height) .Caption = shp.Name r.Offset(, 1) = ws.Name r.Offset(, 2) = shp.ID .LinkedCell = r.Offset(, 3).Address r.Offset(, 3).Value = CBool(shp.Visible) .OnAction = "CheckBox_Click" End With Next Next End With End Sub Private Sub CheckBox_Click() Dim shp As Shape, rng As Range, checked As Boolean, wsName$, spID& With ActiveSheet Set rng = .Range(.CheckBoxes(Application.Caller).LinkedCell) checked = rng.Value spID = rng.Offset(, -1).Value wsName = rng.Offset(, -2).Value For Each shp In Sheets(wsName).Shapes If shp.ID = spID Then shp.Visible = checked Exit For End If Next End With End Sub (まる2021) 2024/01/09(火) 19:10:52
直接の回答ではありません。少し気になりましたので、コメントします。 >シート7のF列に「1」と入力すると、その行のA列と同じ名前のオブジェクトを非表示にしたいです。 この1を立てる作業は手作業でやるんですか? オートシェイプの名前を確認して、1を立てる、これって大変じゃないですか?
1500ものオートシェイプを手でハンドリングするというのは大変過ぎませんか? そもそも、何を目的にして1500のオートシェイプが必要なんですか? オートシェイプに依らない方法はないんでしょうか? そこから議論をしたほうが有益なように感じます。
(xyz) 2024/01/10(水) 23:46:17
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.