すべてのオブジェクトの非表示または一覧表示(Microsoft Excel)
マイクは、自分のワークブック内にオブジェクトが隠されていることを知っていて、それらすべてを見つけたいという問題を抱えていました。彼はいくつかのオブジェクトを隠すマクロを書いたようですが、それからそれらを再表示しませんでした。
ワークシート内のオブジェクトの名前を簡単に調べたい場合は、次のマクロを使用すると非常にうまくいきます。名前だけでなく、オブジェクトのタイプも表示されます。
Sub ListObjects() Dim objCount As Integer Dim x As Integer Dim objList As String Dim objPlural As String Dim objType(17) As String 'Set types for different objects objType(1) = "Autoshape" objType(2) = "Callout" objType(3) = "Chart" objType(4) = "Comment" objType(7) = "EmbeddedOLEObject" objType(8) = "FormControl" objType(5) = "Freeform" objType(6) = "Group" objType(9) = "Line" objType(10) = "LinkedOLEObject" objType(11) = "LinkedPicture" objType(12) = "OLEControlObject" objType(13) = "Picture" objType(14) = "Placeholder" objType(15) = "TextEffect" objType(17) = "TextBox" objList = "" 'Get the number of objects objCount = ActiveSheet.Shapes.Count If objCount = 0 Then objList = "There are no shapes on " & _ ActiveSheet.Name Else objPlural = IIf(objCount = 1, "", "s") objList = "There are " & Format(objCount, "0") _ & " Shape" & objPlural & " on " & _ ActiveSheet.Name & vbCrLf & vbCrLf For x = 1 To objCount objList = objList & ActiveSheet.Shapes(x).Name & _ " is a " & objType(ActiveSheet.Shapes(x).Type) _ & vbCrLf Next x End If MsgBox (objList) End Sub
このマクロは、ワークシート内のすべてのオブジェクトの名前とタイプを返します。
ただし、別のアプローチは、すべてのオブジェクト名を表示してから、オブジェクトが非表示になっている場合は、非表示にしないかどうかを尋ねることです。次のマクロはまさにそれを行います:
Sub ShowEachShape1() Dim sObject As Shape Dim sMsg As String For Each sObject In ActiveSheet.Shapes sMsg = "Found " & IIf(sObject.Visible, _ "visible", "hidden") & " object " & _ vbNewLine & sObject.Name If sObject.Visible = False Then If MsgBox(sMsg & vbNewLine & "Unhide ?", _ vbYesNo) = vbYes Then sObject.Visible = True End If Else MsgBox sMsg End If Next End Sub
マクロを非表示のオブジェクトに対してのみ機能させ、表示されているオブジェクトを無視する場合は、マクロを次のように変更できます。
Sub ShowEachShape2() Dim sObject As Shape Dim sMsg As String For Each sObject In ActiveSheet.Shapes If sObject.Visible = False Then sMsg = "Object & sObject.Name & _ " is hidden. Unhide it?" If MsgBox(sMsg, vbYesNo) = vbYes Then sObject.Visible = True End If End If Next End Sub
すべてのオブジェクトを1つのステップで表示するだけで、マクロをさらに短くすることができます。
Sub ShowEachShape3() Dim sObject As Shape For Each sObject In ActiveSheet.Shapes sObject.Visible = True Next End Sub
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(2025)は、Microsoft Excel 97、2000、2002、および2003に適用されます。