Excel VBA質問箱 IV

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

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


5264 / 13644 ツリー ←次へ | 前へ→

【51262】範囲を選ぶ方法 多摩川 07/9/6(木) 18:07 質問[未読]
【51263】Re:範囲を選ぶ方法 ichinose 07/9/6(木) 18:08 発言[未読]
【51264】Re:範囲を選ぶ方法 多摩川 07/9/6(木) 18:16 お礼[未読]
【51604】Re:範囲を選ぶ方法 多摩川 07/9/27(木) 8:36 質問[未読]
【51606】Re:範囲を選ぶ方法 Jaka 07/9/27(木) 10:38 発言[未読]
【51607】Re:範囲を選ぶ方法 じゅんじゅん 07/9/27(木) 10:38 発言[未読]
【51640】Re:範囲を選ぶ方法 多摩川 07/9/27(木) 17:20 お礼[未読]
【51875】Re:範囲を選ぶ方法 多摩川 07/10/9(火) 8:41 質問[未読]
【51876】Re:範囲を選ぶ方法 じゅんじゅん 07/10/9(火) 8:57 発言[未読]
【51877】Re:範囲を選ぶ方法 多摩川 07/10/9(火) 9:08 質問[未読]
【51878】Re:範囲を選ぶ方法 じゅんじゅん 07/10/9(火) 9:31 発言[未読]
【51879】Re:範囲を選ぶ方法 多摩川 07/10/9(火) 9:44 発言[未読]
【51880】Re:範囲を選ぶ方法 ichinose 07/10/9(火) 9:56 発言[未読]
【51881】Re:範囲を選ぶ方法 多摩川 07/10/9(火) 13:21 お礼[未読]

【51262】範囲を選ぶ方法
質問  多摩川  - 07/9/6(木) 18:07 -

引用なし
パスワード
   InputBoxのようなウィンドウから直接セルを選択して、
そのアドレスを取得したいのですが、
使用する関数を教えていただけないでしょうか?

イメージとしては組み込み関数のSUMのように、
対象のセルを直接選択することで、アドレスを取得。
のようなことがしたいと思っています。

Sub ListCreate()
  Dim Rng As Range
  Dim MyRg As String
  MyRg = "ここでアドレスを取得したい"
  For Each Rng In Range(MyRg)
    '〜処理(中略)〜
  Next Rng
End Sub

よろしくお願いします。

【51263】Re:範囲を選ぶ方法
発言  ichinose  - 07/9/6(木) 18:08 -

引用なし
パスワード
   ▼多摩川 さん:
こんばんは。

>InputBoxのようなウィンドウから直接セルを選択して、
>そのアドレスを取得したいのですが、
>どのようなコードにすればよいのでしょうか?
そのInputboxメソッドを使ってみては?


>
>イメージとしては組み込み関数のSUMのように、
>対象のセルを直接選択することで、アドレスを取得。
>のようなことがしたいと思っています。
>
>Sub ListCreate()
>  Dim Rng As Range
>  Dim MyRg As Range
   
   On Error Resume Next
   Set MyRg = _
    Application.InputBox("セル範囲を選択して!!", , , , , , , 8)
   If Err.Number = 0 Then
>    For Each Rng In MyRg
>    '〜処理(中略)〜
>      Next Rng
    end if
>End Sub

【51264】Re:範囲を選ぶ方法
お礼  多摩川  - 07/9/6(木) 18:16 -

引用なし
パスワード
   ▼ichinose さん:
>そのInputboxメソッドを使ってみては?
InputBoxメソッドがあったのですね!
お恥ずかしい限りです。(^^ヾ
InputBoxでF1すると関数の方しか見当たらず、別の関数があるのかと思い込んでいました。
ありがとうございました。

【51604】Re:範囲を選ぶ方法
質問  多摩川  - 07/9/27(木) 8:36 -

引用なし
パスワード
   ▼ichinose さん:
>▼多摩川 さん:
>こんばんは。
>
>>InputBoxのようなウィンドウから直接セルを選択して、
>>そのアドレスを取得したいのですが、
>>どのようなコードにすればよいのでしょうか?
>そのInputboxメソッドを使ってみては?
>
>
>>
>>イメージとしては組み込み関数のSUMのように、
>>対象のセルを直接選択することで、アドレスを取得。
>>のようなことがしたいと思っています。
>>
>>Sub ListCreate()
>>  Dim Rng As Range
>>  Dim MyRg As Range
>   
>   On Error Resume Next
>   Set MyRg = _
>    Application.InputBox("セル範囲を選択して!!", , , , , , , 8)
>   If Err.Number = 0 Then
>>    For Each Rng In MyRg
>>    '〜処理(中略)〜
>>      Next Rng
>    end if
>>End Sub

今更なのですが、再質問があります。
InputBoxメソッドをType:=8にすることで、Rangeオブジェクトを受け取ることができたのですが、
この方法だと、同一ブック内しかできないようです。
他のブックから範囲を指定したいのですが、どのようにしたら良いのでしょうか?

【51606】Re:範囲を選ぶ方法
発言  Jaka  - 07/9/27(木) 10:38 -

引用なし
パスワード
   ▼多摩川 さん:
>この方法だと、同一ブック内しかできないようです。
>他のブックから範囲を指定したいのですが、どのようにしたら良いのでしょうか?
意味が良く解りませんが、これ?
MsgBox MyRg.Address(External:=True)

【51607】Re:範囲を選ぶ方法
発言  じゅんじゅん  - 07/9/27(木) 10:38 -

引用なし
パスワード
   > For Each Rng In MyRg
 For Each Rng In WorkBooks("Book2.xls").WorkSheets("Sheet1").Range(MyRg.Address)

とかではダメでしょうか?
自信はありませんが。

【51640】Re:範囲を選ぶ方法
お礼  多摩川  - 07/9/27(木) 17:20 -

引用なし
パスワード
   Jaka さん、じゅんじゅん さん
ありがとうございます。

Application.InputBox("セル範囲を選択",Type:=8)でセルを指定すると、
その指定したセルの情報(例えばValue等)が取得できますが、そのセルの指定方法についての質問でした。
分かりづらいようで申し訳ございませんでした。
ThisWorkbook上のセルを指定することは可能なのですが、他ブックのセルを指定できず悩んでいました。

しかし、色々試した結果、
ウィンドウ(W)から他ブックを選択することでカレントブックが入れ替わり、他ブックのセルを指定することができました。

今までは、タスクバーのアイコンからカレントブックを変更しようと試みていたのですが、
InputBoxメソッドを使用中では、この方法によるカレントブックの切り替えはできないようです。
WinXp、XL2000 です。

このだめだった方のやり方で他ブックのセルを指定できるコードがあれば、うれしいのですが、とりあえずは、解決しました。
ありがとうございました。

【51875】Re:範囲を選ぶ方法
質問  多摩川  - 07/10/9(火) 8:41 -

引用なし
パスワード
   度々恐れ入ります。再度、お知恵をお貸し下さい。
下記コードを教えていただきましたが、InputBoxでキャンセルを選ぶとエラーとなります。
エラー処理はどのようにすれば、良いのでしょうか?

>Sub ListCreate()
>  Dim Rng As Range
>  Dim MyRg As Range
>  On Error Resume Next
>  Set MyRg = Application.InputBox(Prompt:="セル範囲を選択", Type:=8)
>  If Err.Number = 0 Then
>    For Each Rng In MyRg
>    '〜処理(中略)〜
>    Next Rng
>   end if
>End Sub

【51876】Re:範囲を選ぶ方法
発言  じゅんじゅん  - 07/10/9(火) 8:57 -

引用なし
パスワード
   ▼多摩川 さん:
>度々恐れ入ります。再度、お知恵をお貸し下さい。
>下記コードを教えていただきましたが、InputBoxでキャンセルを選ぶとエラーとなります。
>エラー処理はどのようにすれば、良いのでしょうか?
>
>>Sub ListCreate()
>>  Dim Rng As Range
>>  Dim MyRg As Range
>>  On Error Resume Next
>>  Set MyRg = Application.InputBox(Prompt:="セル範囲を選択", Type:=8)
>>  If Err.Number = 0 Then
>>    For Each Rng In MyRg
>>    '〜処理(中略)〜
>>    Next Rng
>>   end if
>>End Sub

キャンセルを押した時に、どのような処理を行ないたいのでしょうか?
例えば処理を中断したいのなら、

  Set MyRg = Application.InputBox(Prompt:="セル範囲を選択", Type:=8)
  If MyRg Is Nothing Then MsgBox "キャンセルしました": Exit Sub '←追加
  If Err.Number = 0 Then

とかでもいいでしょうし。

【51877】Re:範囲を選ぶ方法
質問  多摩川  - 07/10/9(火) 9:08 -

引用なし
パスワード
   ▼じゅんじゅん さん:
>キャンセルを押した時に、どのような処理を行ないたいのでしょうか?
>例えば処理を中断したいのなら、
>
>  Set MyRg = Application.InputBox(Prompt:="セル範囲を選択", Type:=8)
>  If MyRg Is Nothing Then MsgBox "キャンセルしました": Exit Sub '←追加
>  If Err.Number = 0 Then
>
>とかでもいいでしょうし。
ありがとうございます。
Exit Sub で中断処理をしたいと考えていました。
XP、EL2000 の環境なのですが、私の方では Set MyRg = 〜〜〜〜 の所で「実行時エラー'424' オブジェクトが必要です。」となってしまい、ご提示の追加行まで進みません。
Set ステートメントがあるからだと思っているのですが・・・

【51878】Re:範囲を選ぶ方法
発言  じゅんじゅん  - 07/10/9(火) 9:31 -

引用なし
パスワード
   ▼多摩川 さん:
>▼じゅんじゅん さん:
>>キャンセルを押した時に、どのような処理を行ないたいのでしょうか?
>>例えば処理を中断したいのなら、
>>
>>  Set MyRg = Application.InputBox(Prompt:="セル範囲を選択", Type:=8)
>>  If MyRg Is Nothing Then MsgBox "キャンセルしました": Exit Sub '←追加
>>  If Err.Number = 0 Then
>>
>>とかでもいいでしょうし。
>ありがとうございます。
>Exit Sub で中断処理をしたいと考えていました。
>XP、EL2000 の環境なのですが、私の方では Set MyRg = 〜〜〜〜 の所で「実行時エラー'424' オブジェクトが必要です。」となってしまい、ご提示の追加行まで進みません。
>Set ステートメントがあるからだと思っているのですが・・・

でも、その前に
>  On Error Resume Next
がありますよね?
エラーが起きても次に進むと思いますが。

【51879】Re:範囲を選ぶ方法
発言  多摩川  - 07/10/9(火) 9:44 -

引用なし
パスワード
   ▼じゅんじゅん さん:
>▼多摩川 さん:
>>▼じゅんじゅん さん:
>>>キャンセルを押した時に、どのような処理を行ないたいのでしょうか?
>>>例えば処理を中断したいのなら、
>>>
>>>  Set MyRg = Application.InputBox(Prompt:="セル範囲を選択", Type:=8)
>>>  If MyRg Is Nothing Then MsgBox "キャンセルしました": Exit Sub '←追加
>>>  If Err.Number = 0 Then
>>>
>>>とかでもいいでしょうし。
>>ありがとうございます。
>>Exit Sub で中断処理をしたいと考えていました。
>>XP、EL2000 の環境なのですが、私の方では Set MyRg = 〜〜〜〜 の所で「実行時エラー'424' オブジェクトが必要です。」となってしまい、ご提示の追加行まで進みません。
>>Set ステートメントがあるからだと思っているのですが・・・
>
>でも、その前に
>>  On Error Resume Next
>がありますよね?
>エラーが起きても次に進むと思いますが。
それがなぜか進まないので困っています。
このコードで試しています。

Sub ListCreate()
  Dim Rng As Range
  Dim MyRg As Range
  On Error Resume Next
  Set MyRg = Application.InputBox(Prompt:="セル範囲を選択", Type:=8)
  If MyRg Is Nothing Then Exit Sub
  If Err.Number = 0 Then
    For Each Rng In MyRg
      MsgBox Rng
    Next Rng
   End If
End Sub

【51880】Re:範囲を選ぶ方法
発言  ichinose  - 07/10/9(火) 9:56 -

引用なし
パスワード
   おはようございます。

>>エラーが起きても次に進むと思いますが。
>それがなぜか進まないので困っています。
>このコードで試しています。
>
>Sub ListCreate()
>  Dim Rng As Range
>  Dim MyRg As Range
>  On Error Resume Next
>  Set MyRg = Application.InputBox(Prompt:="セル範囲を選択", Type:=8)
>  If MyRg Is Nothing Then Exit Sub
>  If Err.Number = 0 Then
>    For Each Rng In MyRg
>      MsgBox Rng
>    Next Rng
>   End If
>End Sub

VBEにて、「ツール」---「オプション」とクリックしてオプションダイアログを
表示させてください。全般タブの「エラートラップ」が「エラー発生時に中断」が
選択されていませんか?

これを「エラー処理対象外のエラーで中断」を選択してください。

これで再度上記のコードを実行してみてください。

【51881】Re:範囲を選ぶ方法
お礼  多摩川  - 07/10/9(火) 13:21 -

引用なし
パスワード
   ▼ichinose さん:
こんにちは。
いつもありがとうございます。

>VBEにて、「ツール」---「オプション」とクリックしてオプションダイアログを
>表示させてください。全般タブの「エラートラップ」が「エラー発生時に中断」が
>選択されていませんか?
>
>これを「エラー処理対象外のエラーで中断」を選択してください。
>
>これで再度上記のコードを実行してみてください。

その設定が原因だったのですね。
ありがとうございました。

じゅんじゅんさんも、色々アドバイスいただきありがとうございました。

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