【本日のミッション】
Excel VBAで、定義済の名前の管理で「Print_Area」以外を全て削除せよ。
ミッションの概要
Excel VBAで、定義済の名前の管理で「Print_Area」以外を全て削除せよ、というのが今回のミッションです。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
プロシージャ
Sub Print_Area以外の名前削除()
Dim nm As Name
'■Print_Area以外の名前削除
For Each nm In ActiveWorkbook.Names
If InStr(nm.Name, "Print_Area") = 0 Then
nm.Delete
End If
Next nm
End Sub
For Each ステートメントとは
For Each ステートメントは、配列やコレクションの各要素に対して繰り返し処理を行う場合に使用します。
【構文】 Dim 変数 as オブジェクト型(バリアント型変数) For Each 変数 In オブジェクトコレクション名(配列名) ***変数を使った処理*** Next
今回は、For Eachステートメントを使用して、ActiveWorkbook の Namesコレクション 各要素(Name)を変数nm に順に格納し、If条件に合致するもののみ削除処理を行っています。
Dim nm As Name For Each nm In ActiveWorkbook.Names If InStr(nm.Name, "Print_Area") = 0 Then nm.Delete End If Next nm
- 変数nmを、Nameで宣言します。
- ActiveWorkbookで定義している名前を順に変数nmに格納し、If条件に合致するもののみ削除しています。
Data1 を削除
↓
Data2 を削除
↓
Data3 を削除
↓
名前1 を削除
↓
名前2 を削除
↓
名前3 を削除
- ActiveWorkbook の全ての Namesコレクション の処理が完了したら、For Each の処理を抜けます。
名前に「Print_Area」を含むものだけ残っています。
InStr関数
InStr([開始位置, ] 検索対象文字列, 検索ワード [, 比較モード])
検索対象文字列の中から 検索ワードを検索し、検索ワードが含まれる場合は、最初に見つかった位置を取得します。
開始位置には、何文字目から検索するかを指定します。省略可能で、省略した場合は先頭の文字から検索されます。
比較モードには、大文字と小文字を区別して検索するかを指定します。省略可能です。
定数 | 説明 | 値 |
vbBinaryCompare | 全角半角、大文字小文字、ひらがなとカタカナが区別されます。(規定値) | 0 |
vbTextCompare | 全角半角、大文字小文字、ひらがなとカタカナが区別されません。 | 1 |
今回は開始位置・比較モードを省略しています。
検索対象文字列に名前の定義名「nm.Name」を、 検索ワードに「Print_Area」を指定しています。
InStr(nm.Name, "Print_Area")
nm.Nameが「Data1」の時は、検索ワード「Print_Area」を含まないため「0」を返します。
nm.Nameが「Sheet1!Print_Area」の時は、検索ワード「Print_Area」を含むため、開始位置「8」を返します。
参照
AutoFilter オートフィルター 1列に OR条件で2つの条件指定(Excel VBA)
AutoFilter オートフィルター 1列に AND条件 で2つの条件指定(Excel VBA)
AutoFilter オートフィルター 1列に OR条件 で 3つ以上 の条件指定(Excel VBA)
AutoFilter オートフィルター 複数列に 2つの条件指定(Excel VBA)
AutoFilter オートフィルター 複数列に 3つ以上の条件指定(Excel VBA)
エクセル 指定した色のカラーインデックスを取得し、同じ色のセルを色フィルターで抽出する(Excel VBA)
エクセル 入力した文字色のカラーインデックスを取得し、同色文字のセルを色フィルターで抽出する(Excel VBA)
離れた複数列をまとめて列番号(数字)で選択する方法(Excel VBA)
Excel VBA で選択した複数のセルにデータ・数式を(Ctrl+Enter のように)一気に入力する方法
エクセル 定義済の名前の管理を一括で全て削除する(Excel VBA)
エクセル 定義済の名前の管理で「Print_Area」以外を全て削除する(Excel VBA)