Excel VBA質問箱 IV

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

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


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

【66655】複数のセルアドレス取得について ギン 10/9/22(水) 1:36 質問[未読]
【66656】Re:複数のセルアドレス取得について ichinose@久々投稿 10/9/22(水) 6:07 発言[未読]
【66657】Re:複数のセルアドレス取得について ギン 10/9/22(水) 8:18 お礼[未読]
【66661】Re:複数のセルアドレス取得について ichinose@久々投稿 10/9/22(水) 18:17 発言[未読]
【66663】Re:複数のセルアドレス取得について ギン 10/9/23(木) 2:08 お礼[未読]
【66659】Re:複数のセルアドレス取得について sasa 10/9/22(水) 10:59 回答[未読]
【66660】Re:複数のセルアドレス取得について ギン 10/9/22(水) 12:11 お礼[未読]

【66655】複数のセルアドレス取得について
質問  ギン  - 10/9/22(水) 1:36 -

引用なし
パスワード
   いつもお世話になります。
VEAでは努力しているのですが未だに壁に当たっています。

今回の質問は複数のセルアドレスの取得についてです。
マウスでセルをいくつか選択したときに
アドレスを取得する事は可能でしょうか?
例えば Range("A2:A6,C2:C6,E2:E6").Selectした時に
"A2:A6,C2:C6,E2:E6" のアドレスのみを取得したいのです。

実はこの選択したセルに
Sub test()
  Dim mycell As Range
  Dim a As Variant
  a = Range("A2:A6,C2:C6,E2:E6").Address
  Worksheets(1).Activate
  For Each mycell In Range(a)
    If mycell.Value = 10 Then
      mycell.Font.Bold = True
    End If
  Next
End Sub
の様な処理をしたいのです。

どなたかご教授お願い致します。

【66656】Re:複数のセルアドレス取得について
発言  ichinose@久々投稿  - 10/9/22(水) 6:07 -

引用なし
パスワード
   ▼ギン さん:
おはようございます。

Sub test()
  Dim mycell As Range
  Dim selrng As Range
  On Error Resume Next
  Set selrng = Application.Union(Selection, Selection)
  If Err.Number = 0 Then
    For Each mycell In selrng
     If mycell.Value = 10 Then
      mycell.Font.Bold = True
     End If
    Next
  End If
  On Error GoTo 0
End Sub

適当なセル範囲を選択した状態で、上記のtestを実行してみてください。

【66657】Re:複数のセルアドレス取得について
お礼  ギン  - 10/9/22(水) 8:18 -

引用なし
パスワード
   ichinoseさん
早々の投稿 有難う御座います。
このコードで思っていた通りの処理が出来ました。
(Selection, Selection)
は初めて使用しました。これて選択出来たのですね。
でも、selrngの変数上ではアドレスは表示されないのですね?
それから  On Error Resume Next
If Err.Number = 0 Then
のエラー処理はは何故入れるのでしょうか?
処理は出来たのですが不思議でした。

【66659】Re:複数のセルアドレス取得について
回答  sasa  - 10/9/22(水) 10:59 -

引用なし
パスワード
   ▼ギン さん:
>今回の質問は複数のセルアドレスの取得についてです。
>マウスでセルをいくつか選択したときに
>アドレスを取得する事は可能でしょうか?
>例えば Range("A2:A6,C2:C6,E2:E6").Selectした時に
>"A2:A6,C2:C6,E2:E6" のアドレスのみを取得したいのです。

単にSelection で良いのでは。

Sub test1()
 Dim rg As Range
 For Each rg In Selection
  If rg.Value = 10 Then rg.Font.Bold = True
 Next
End Sub

【66660】Re:複数のセルアドレス取得について
お礼  ギン  - 10/9/22(水) 12:11 -

引用なし
パスワード
   なるほど こちらの方がシンプルで解かり易いですね。
いろいろな方法があって勉強になります。

有難う御座いました。

【66661】Re:複数のセルアドレス取得について
発言  ichinose@久々投稿  - 10/9/22(水) 18:17 -

引用なし
パスワード
   ▼ギン さん:

>このコードで思っていた通りの処理が出来ました。
>(Selection, Selection)
>は初めて使用しました。これて選択出来たのですね。

普通に
set selrng=selection でも良いのですが・・・、

>実はこの選択したセルに
ユーザーが選択したセル範囲なのですよね?
だとしたら、ユーザーが変な操作をする可能性もありますよね?
例えば、こんな選択は極端な例ですが、

Sub sample1()
  Dim selrng As Range
  Range("a1:a10,a1:b10,a1:c10").Select
  Set selrng = Selection
  MsgBox "セルアドレス  " & selrng.Address & "  セルカウント " & selrng.Count
End Sub

これで実行すると、60回セルを調べることになります。しかもダブって・・・。

Sub sample2()
  Dim selrng As Range
  Range("a1:a10,a1:b10,a1:c10").Select
  Set selrng = Application.Union(Selection, Selection)
  MsgBox "セルアドレス  " & selrng.Address & "  セルカウント " & selrng.Count
End Sub

Unionを使うと、結構、整理してくれるんですよね!!
これが理由でユーザー選択セル範囲には、Unionを使う場合があります。


>でも、selrngの変数上ではアドレスは表示されないのですね?

上記の記述で分かると思いますが、

msgbox selrng.address

でアドレスは表示されます。
 

>それから  On Error Resume Next
>If Err.Number = 0 Then
>のエラー処理はは何故入れるのでしょうか?

これは、セル範囲を選択していないときも考慮したためです。
図形を選択した状態で実行すれば、On Error 〜
なしだと、プログラムが止まってしまいますから・・・。
本来は、セルを選択してください というメッセージを表示すればよいですね!!

これでどうですか?

【66663】Re:複数のセルアドレス取得について
お礼  ギン  - 10/9/23(木) 2:08 -

引用なし
パスワード
   ichinose 様 
お世話になります。

selrng.Address selrng.Count
これを記述することでアドレスやセル数が解るのですね。
今度から使ってみます。

あと、エラー処理の件ですが
私自身が使うことが多いので今まではエラー処理に
関心が無かったのですが、今後は勉強したいと思っています。
万人が誤操作しても使えるマクロを作るに越したことは無いと思います。

今回は有難う御座いました。
VBAは本当に奥が深いですね。
これからも頑張ります。

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