Excel VBA質問箱 IV

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

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


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

【35918】その範囲名が使われているかを判断したいが… Cuore=Tane 06/3/15(水) 22:42 質問[未読]
【35919】Re:その範囲名が使われているかを判断した... かみちゃん 06/3/15(水) 23:02 回答[未読]
【35985】Re:その範囲名が使われているかを判断した... Cuore=Tane 06/3/17(金) 8:10 質問[未読]
【36005】Re:その範囲名が使われているかを判断した... ni 06/3/17(金) 23:08 回答[未読]
【36101】Re:その範囲名が使われているかを判断した... Cuore=Tane 06/3/20(月) 19:42 発言[未読]
【36185】Re:その範囲名が使われているかを判断した... Cuore=Tane 06/3/23(木) 22:31 質問[未読]
【36794】Re:その範囲名が使われているかを判断した... Cuore=Tane 06/4/14(金) 0:41 お礼[未読]

【35918】その範囲名が使われているかを判断したい...
質問  Cuore=Tane  - 06/3/15(水) 22:42 -

引用なし
パスワード
   VBAを使って、その範囲名が実際に使われているか?を判断するにはどうしたらいいのでしょうか?

If (       ) = "あ" then '[「あ」という範囲名が使われている場合]

( )の中がどうしてもわかりません。

Application.Gotoではおかしいし…。
ActiveWorkbook.Names だと、そのワークブックの名前となってしまうし…

多分Range か Selection.ListItems を使うのでしょうけれど、
前者を使うと、範囲を指定する必要があるので没。
後者は、エラーが発生してしまうので駄目…。

どうすれば、VBAでその範囲名が実際に使われているか?の判断をすることができるのでしょうか???

【35919】Re:その範囲名が使われているかを判断し...
回答  かみちゃん  - 06/3/15(水) 23:02 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>VBAを使って、その範囲名が実際に使われているか?を判断するにはどうしたらいいのでしょうか?
>
>If (       ) = "あ" then '[「あ」という範囲名が使われている場合]

以下のような感じでできると思います。

Sub Macro1()
 Dim Nam As Name

 With ActiveWorkbook
  On Error Resume Next
  Set Nam = .Names("あ")
  If Not Nam Is Nothing Then
   MsgBox Nam.Name & " は、定義済みです"
  Else
   MsgBox "定義されていません"
  End If
 End With
End Sub

なお、
http://www.nurs.or.jp/~ppoy/access/excel/xlA011.html
で紹介されている
Sub myNM()
'〜省略〜
End Sub
は、名前の一覧が取得できるので、参考になると思います。

【35985】Re:その範囲名が使われているかを判断し...
質問  Cuore=Tane  - 06/3/17(金) 8:10 -

引用なし
パスワード
   かみちゃんさんへ
出来ました。ありがとうございます。

更にこれを拡張しようと考えているのですが、詰まってしまいました(・。・;

実は、名前付き範囲があ〜わまで44個(使用、不使用をすべて含めて)あり、
これに該当するCommandbutton (以下cob〜)として設定している場合、
配列変数を利用して、その範囲名が使われていれば、ボタンが使える。
その範囲名が使われていなければ、ボタンが使えなくなるというVBAを組んでいる途中です。

難点はcobの次にある数字も0〜43の番号があり、この番号を1動作終了後に可変できるように組み立てているのですが、どうしても分かりません。

  Dim Nam(43) As Name
  
  For a = 0 To 43
  With ActiveWorkbook
    On Error Resume Next
    Set Nam(a) = .Names(Range("E4").Offset(a, 0))
      If Not Nam(a) Is Nothing Then
        cob0.Enabled = True    →この部分のcobの次の数字に0〜43までの数字がある
      Else
        cob0.Enabled = False    →この部分のcobの次の数字に0〜43までの数字がある
      End If
    End With
  Next a

この0の値を変えるには、どうすればいいのでしょうか???(・。・;


▼かみちゃん さん:
>以下のような感じでできると思います。
>
>Sub Macro1()
> Dim Nam As Name
>
> With ActiveWorkbook
>  On Error Resume Next
>  Set Nam = .Names("あ")
>  If Not Nam Is Nothing Then
>   MsgBox Nam.Name & " は、定義済みです"
>  Else
>   MsgBox "定義されていません"
>  End If
> End With
>End Sub

【36005】Re:その範囲名が使われているかを判断し...
回答  ni  - 06/3/17(金) 23:08 -

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

>cob0.Enabled = True
コントロールツールボックスのコマンドボタンでしたら、
ActiveSheet.Controls("cob" & a).Enabled = True
のような使い方が出来ます。

【36101】Re:その範囲名が使われているかを判断し...
発言  Cuore=Tane  - 06/3/20(月) 19:42 -

引用なし
パスワード
   niさんありがとうございます。
下記のように修正しましたが…。

作動しませんでした(T_T)

Dim Nam(43) As Name
  
  For a = 0 To 43
  With ActiveWorkbook
    On Error Resume Next
    Set Nam(a) = .Names(Range("E4").Offset(a, 0))
      If Not Nam(a) Is Nothing Then
        ActiveSheet.Controls("cob" & a).Enabled = True
      Else
        ActiveSheet.Controls("cob" & a).Enabled = false
      End If
    End With
  Next a

う〜ん。何がいけないのだろう???

▼ni さん:
>こんにちは
>
>>cob0.Enabled = True
>コントロールツールボックスのコマンドボタンでしたら、
>ActiveSheet.Controls("cob" & a).Enabled = True
>のような使い方が出来ます。

【36185】Re:その範囲名が使われているかを判断し...
質問  Cuore=Tane  - 06/3/23(木) 22:31 -

引用なし
パスワード
   >Dim Nam(43) As Name
>  
>  For a = 0 To 43
>  With ActiveWorkbook
>    On Error Resume Next
>    Set Nam(a) = .Names(Range("E4").Offset(a, 0))
>      If Not Nam(a) Is Nothing Then
>        ActiveSheet.Controls("cob" & a).Enabled = True
>      Else
>        ActiveSheet.Controls("cob" & a).Enabled = False
>      End If
>    End With
>  Next a
>

↑ひとつ書き忘れたことがありました。
このコマンドボタンはすべてフレームの中に収められています。
(44個のボタンすべてです。)
もしかしたら、それと関係があるのかな〜???

【36794】Re:その範囲名が使われているかを判断し...
お礼  Cuore=Tane  - 06/4/14(金) 0:41 -

引用なし
パスワード
   ▼Cuore=Tane さん:
>>Dim Nam(43) As Name
>>  
>>  For a = 0 To 43
>>  With ActiveWorkbook
>>    On Error Resume Next
>>    Set Nam(a) = .Names(Range("E4").Offset(a, 0))
>>      If Not Nam(a) Is Nothing Then
>>        ActiveSheet.Controls("cob" & a).Enabled = True
>>      Else
>>        ActiveSheet.Controls("cob" & a).Enabled = False
>>      End If
>>    End With
>>  Next a
>>
Activesheet→Userform1(または自分がつけたユーザーフォーム名)に修正し、
With文を無くし、Sheets("Sheet1").Selectへと変え
On Error〜とSet Nam(a)〜も無くしました。
その代わり、IF文の論理文をRange("H4").Offset(a, 0)) <> "" Then へと変更したところ、きちんとなりました。

自己解決いたしました。
ありがとうございました。

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