Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7703 / 13645 ツリー ←次へ | 前へ→

【21187】範囲の名前を全削除するマクロの組み方 t29x0479 05/1/14(金) 12:08 質問[未読]
【21190】Re:範囲の名前を全削除するマクロの組み方 ichinose 05/1/14(金) 12:21 発言[未読]
【21194】Re:範囲の名前を全削除するマクロの組み方 t29x0479 05/1/14(金) 12:45 お礼[未読]
【21198】Re:範囲の名前を全削除するマクロの組み方 t29x0479 05/1/14(金) 15:33 質問[未読]
【21203】Re:範囲の名前を全削除するマクロの組み方 Jaka 05/1/14(金) 16:04 発言[未読]
【21206】Re:範囲の名前を全削除するマクロの組み方 t29x0479 05/1/14(金) 20:46 お礼[未読]
【37384】シートを指定し、範囲の名前を全削除するマ... haru 06/5/3(水) 11:02 質問[未読]
【37385】Re:シートを指定し、範囲の名前を全削除す... ぱっせんじゃー 06/5/3(水) 11:10 発言[未読]
【37387】Re:シートを指定し、範囲の名前を全削除す... haru 06/5/3(水) 11:39 質問[未読]
【37391】Re:シートを指定し、範囲の名前を全削除す... ichinose 06/5/3(水) 12:22 発言[未読]
【37393】Re:シートを指定し、範囲の名前を全削除す... haru 06/5/3(水) 12:33 お礼[未読]
【37388】Re:シートを指定し、範囲の名前を全削除す... Kein 06/5/3(水) 11:44 回答[未読]
【37392】Re:シートを指定し、範囲の名前を全削除す... haru 06/5/3(水) 12:32 質問[未読]
【37394】Re:シートを指定し、範囲の名前を全削除す... Kein 06/5/3(水) 12:48 回答[未読]
【37395】Re:シートを指定し、範囲の名前を全削除す... Kein 06/5/3(水) 12:51 発言[未読]
【37398】Re:シートを指定し、範囲の名前を全削除す... haru 06/5/3(水) 17:44 質問[未読]
【37399】Re:シートを指定し、範囲の名前を全削除す... Kein 06/5/3(水) 17:59 発言[未読]
【37411】Re:シートを指定し、範囲の名前を全削除す... haru 06/5/4(木) 10:10 お礼[未読]

【21187】範囲の名前を全削除するマクロの組み方
質問  t29x0479  - 05/1/14(金) 12:08 -

引用なし
パスワード
   ブック内に定義されている範囲の名前を全削除するマクロを組みたいのですが、ご存じの方がいらっしゃれば教えてください。
範囲の名前を削除するときに、ワイルドカードのようなものを使うことってできないのでしょうか…。
よろしくお願い致します。

【21190】Re:範囲の名前を全削除するマクロの組み方
発言  ichinose  - 05/1/14(金) 12:21 -

引用なし
パスワード
   ▼t29x0479 さん:
こんにちは。

>ブック内に定義されている範囲の名前を全削除するマクロを組みたいのですが、ご存じの方がいらっしゃれば教えてください。
>範囲の名前を削除するときに、ワイルドカードのようなものを使うことってできないのでしょうか…。
>よろしくお願い致します。

'=======================================================
Sub test()
  Dim nm As Name
  For Each nm In ThisWorkbook.Names
   nm.Delete
   Next
End Sub

こんなコードで削除できますよ!!

【21194】Re:範囲の名前を全削除するマクロの組み方
お礼  t29x0479  - 05/1/14(金) 12:45 -

引用なし
パスワード
   ▼ichinose さん:
ありがとうございます。さっそく試してみました。
超即レスありがとうございます。

【21198】Re:範囲の名前を全削除するマクロの組み方
質問  t29x0479  - 05/1/14(金) 15:33 -

引用なし
パスワード
   ▼ichinose さん:
ありがとうございます。普通に実行したら確かに名前を削除できるのですが、他のマクロから呼び出した場合に名前が削除されないです。(起動時にメニューバーに自分でメニューを追加しています。そのメニューの中に組み込んで、呼び出すと名前が削除されません。
もし原因がわかれば、教えてください。

【21203】Re:範囲の名前を全削除するマクロの組み方
発言  Jaka  - 05/1/14(金) 16:04 -

引用なし
パスワード
   こんにちは。
おじゃまします。
ichinoseさんは、〇〇〇に出かけた?見たいですので、

For Each nm In ThisWorkbook.Names
         ↓
        ActiveWorkBook.Names に変えてみてください。

アクティブブック対象で良いんですよね?

【21206】Re:範囲の名前を全削除するマクロの組み方
お礼  t29x0479  - 05/1/14(金) 20:46 -

引用なし
パスワード
   ▼Jaka さん:
動作しました。
本当にありがとうございます。
m(_ _)m

【37384】シートを指定し、範囲の名前を全削除する...
質問  haru WEB  - 06/5/3(水) 11:02 -

引用なし
パスワード
   こんにちは。

以前にアクティブブック対象にして、名前を消去する方法のご回答がありましたが、これをアクティブシートを対象にするとどのようにマクロが組めますでしょうか?
下記のコードで、
ActiveWorkBook.NamesをActiveSheet.Names
に変えただけではうまくいきませんでした。

Sub test()
  Dim nm As Name
  For Each nm In ActiveSheet.Names
   nm.Delete
   Next
End Sub

どなたか何卒よろしくお願いいたします。


▼Jaka さん:
>こんにちは。
>おじゃまします。
>ichinoseさんは、〇〇〇に出かけた?見たいですので、
>
>For Each nm In ThisWorkbook.Names
>         ↓
>        ActiveWorkBook.Names に変えてみてください。
>
>アクティブブック対象で良いんですよね?

【37385】Re:シートを指定し、範囲の名前を全削除...
発言  ぱっせんじゃー  - 06/5/3(水) 11:10 -

引用なし
パスワード
   名前の定義はブック単位です。

シート単位では名前の定義は行われていないです。

もしかして、定義した名前の参照セル範囲が
アクティブシート、ということなのかな?


元の質問者とは別人のようですので、
新規スレッドで質問されたほうがいいですよ。

【37387】Re:シートを指定し、範囲の名前を全削除...
質問  haru WEB  - 06/5/3(水) 11:39 -

引用なし
パスワード
   ぱっせんじゃー さん

早速のスレありがとうございます。

>もしかして、定義した名前の参照セル範囲が
>アクティブシート、ということなのかな?

おっしゃるとおりです。他のシートを参照セル範囲を残しつつ、当該シートに参照セル範囲がある名前のみ消したいというニーズです。

名前の定義がブック単位ということですと、無理でしょうか?
再度宜しくお願いいたします。

>※
>元の質問者とは別人のようですので、
>新規スレッドで質問されたほうがいいですよ。

すみませんでした。次回からそうします。。。


▼ぱっせんじゃー さん:
>名前の定義はブック単位です。
>
>シート単位では名前の定義は行われていないです。
>
>もしかして、定義した名前の参照セル範囲が
>アクティブシート、ということなのかな?
>
>※
>元の質問者とは別人のようですので、
>新規スレッドで質問されたほうがいいですよ。

【37388】Re:シートを指定し、範囲の名前を全削除...
回答  Kein  - 06/5/3(水) 11:44 -

引用なし
パスワード
   要するに、名前の参照先からシートを特定できれば良いのですから、例えば

Sub Check_Name()
  Dim Nm As Name

  For Each Nm In ActiveWorkbook.Names
   If Nm.RefersToRange.Parent.Name = _
    ActiveSheet.Name Then
     MsgBox Nm.Name
   End If
  Next
End Sub

というようにして、アクティブシートのセル範囲につけた名前だけを
抽出できます。削除したければ、もちろん Nm.Delete と変更するだけ。

【37391】Re:シートを指定し、範囲の名前を全削除...
発言  ichinose  - 06/5/3(水) 12:22 -

引用なし
パスワード
   皆さん、こんにちは。


>名前の定義はブック単位です。
>
>シート単位では名前の定義は行われていないです。

今回のharu さんの問題とは直接関係はないですが、
シート単位でも名前の定義はできます。

sub samp()

  Dim nm As Name
  worksheets("Sheet1").Names.Add "test", "=a1:b1"
end sub

とすれば、
Sub samp2()
  Dim nm As Name
  For Each nm In Worksheets("sheet1").Names
   MsgBox nm.Name & "---" & nm.RefersTo
   Next
End Sub

上記のコードでNameオブジェクトが取得できます。

具体的な違いは、

名前の定義ダイアログで定義シートがアクティブになっていないと
名前が表示されない。ぐらいしか確認していませんが・・・。

もっとも名前の定義ダイアログで表示はされませんが、別シートでも
参照はできます。

「=Sheet1!test」等と記述します。

シートで定義した名前もブックのNamesコレクションで拾えます。

【37392】Re:シートを指定し、範囲の名前を全削除...
質問  haru  - 06/5/3(水) 12:32 -

引用なし
パスワード
   早速のご返答ありがとうございます。
以下のコードを書いてみましたが、
   If Nm.RefersToRange.Parent.Name = ActiveSheet.Name Then
のところでつまってしまいます。
理由は
Run-time error '1004'
application-defined or object-defined error とかえってきます。

ちなみに消したい名前のセルdataという名前のシートに限定しています。

何卒、再度宜しくお願いいたします。

Sub Check_Name()

  Sheets("data").Activate
 
  Dim Nm As Name
  For Each Nm In ActiveWorkbook.Names
   If Nm.RefersToRange.Parent.Name = ActiveSheet.Name Then
     Nm.Delete
   End If
  Next
End Sub

【37393】Re:シートを指定し、範囲の名前を全削除...
お礼  haru  - 06/5/3(水) 12:33 -

引用なし
パスワード
   ご返答ありがとうございました。
勉強になります。

【37394】Re:シートを指定し、範囲の名前を全削除...
回答  Kein  - 06/5/3(水) 12:48 -

引用なし
パスワード
   こちらではそんなエラーは出ませんでしたが、それならこんなコードでどうかな ?

Sub Check_Name2()
  Dim i As Long
  Dim Sn As String

  With ActiveWorkbook.Names
   For i = .Count To 1 Step -1
     Sn = .Item(i).RefersTo
     Sn = Mid$(Sn, 2, InStr(1, Sn, "!") - 2)
     If Sn = ActiveSheet.Name Then
      MsgBox .Item(i).Name
     End If
   Next i
  End With
End Sub

【37395】Re:シートを指定し、範囲の名前を全削除...
発言  Kein  - 06/5/3(水) 12:51 -

引用なし
パスワード
   実際に処理するときは

If Sn = "data" Then
  .Item(i).Delete
End If

【37398】Re:シートを指定し、範囲の名前を全削除...
質問  haru  - 06/5/3(水) 17:44 -

引用なし
パスワード
   Keinさん

何度もありがとうございます。
挑戦してみた結果、
     Sn = Mid$(Sn, 2, InStr(1, Sn, "!") - 2)
でつまってしまいます。

理由は
Run time error '5'
Invalid procedure call or argumentです。

Step Into でみてみると、一回通過し、そのご2回目の繰り返しでつまってしまいます。

再度恐縮でございますが、何卒ご教授いただけないでしょうか?
宜しくお願いいたします。


▼Kein さん:
>実際に処理するときは
>
>If Sn = "data" Then
>  .Item(i).Delete
>End If

【37399】Re:シートを指定し、範囲の名前を全削除...
発言  Kein  - 06/5/3(水) 17:59 -

引用なし
パスワード
   んー・・Runtime Error ってのは確かシステムエラーだから、
こちらでどうこう出来るものじゃないはずです。試しに

Sub Check_Name2()
  Dim i As Long
  Dim Sn As String

  With ActiveWorkbook.Names
   For i = .Count To 1 Step -1
     Sn = .Item(i).RefersTo
     Debug.Print Sn
   Next i
  End With
End Sub

として、イミディエイトウィンドウで確認してみて下さい。
もしRefersToプロパティが取得できないとすると、ちょっとお手上げです。
他の方のレスで解決しているなら、そちらでお願いします。

【37411】Re:シートを指定し、範囲の名前を全削除...
お礼  haru  - 06/5/4(木) 10:10 -

引用なし
パスワード
   Keinさん

大変ありがとうございました。試行錯誤の末、動くようになりました。
以前おしえていただいたコードの
    Sn = Mid$(Sn, 2, InStr(1, Sn, "!") - 2)
がなぜか問題があったようで、以下のように書き換えたら動くようになりました。何が問題だったのか不明のままですが。。。

  With ActiveWorkbook.Names
   For n = .Count To 1 Step -1
     Sn = .Item(n).RefersTo
     Sn = Mid$(Sn, 2, 4)
     If Sn = "data" Then
    .Item(n).Delete
    End If
   Next n
  End With

大変たすかりました。ありがとうございます。

7703 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free