[[20050624110039]] 『InputBoxのデフォルト値にセル範囲を指定したい』(新入生) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『InputBoxのデフォルト値にセル範囲を指定したい』(新入生)

[VBのInputBoxのデフォルトの値にセル範囲を指定したい]

セル範囲を取得するために

 Set frRng = ActiveCell.Ofset(-1,0) ←仮に"D12"とします
 Set toRng = frRng.End(xlUp) ←"D10"とします
ここで Set myRng = ("D10:D12") としたいのですが
 Set myRng = さアーどうしましょう

Excel2003
WindowsXP


 はじめと終わりのセルが取得できてるのなら、
Set myRng = Range(toRng , frRng)
 
でもタイトルと内容が?
(みやほりん)


 具体的に書きます
   A     B     C      D     E
1  項目  数量  単価  金額  備考
.  施工V  5 2,500  12,500 工種行
7 小計         50,000 集計行
8
9 第2工区工事         見出行
10 施工5 100 3,000 300,000 工種行
11 工工6  50 2,000 100,000 工種行
12 施工7   30 1,000  30,000 工種行
13 小計         **   集計行
            ↑ここでWクリックし"InputBox"を表示させて
デフォルトのセル範囲が"D6:D8"なら"=subtotal(9,D6:D9)"を書き込み、
集計値「430,000」を表示したいと思います。(新入生)

 こうだろうか??。(みやほりん) 
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     Cancel = True
     Dim frRng As Range, toRng As Range
     Dim MyRng As Range

          Set frRng = Target.Offset(-1, 0)
          Set toRng = frRng.End(xlUp)

          Set MyRng = Application.InputBox( _
                  prompt:="範囲指定し下さい", _
                  Default:=Range(toRng, frRng).Address(0, 0), _
                  Type:=8)
          Target.Formula = "=subtotal(9," & MyRng.Address(0, 0) & ")"
 End Sub

 感激しています、有難うございました。(新入生)
質問してよろしいですか
Default:=Range(toRng, frRng) ←なぜダメなんでしょうか?
〜.Address(0, 0) 理解できてません。

 Helpには
////////////////////////////////////////////////////////////////////////
Default   省略可能です。バリアント型 (Variant) の値を使用します。
     (中略)この値には、Range オブジェクトを指定することもできます。
////////////////////////////////////////////////////////////////////////
とあり、いかにもRangeオブジェクトを指定すればセル範囲(を示すアドレス)が
デフォルト値として表示できるようにも受け取れる。
が、実際にRangeオブジェクトを指定した場合にはRangeオブジェクトの
規定プロパティ(Valueプロパティ)がInputBoxに表示されるだけで、
直接Rangeオブジェクトの取得はしない。
 
またRangeオブジェクトを指定したからといって、
そのRangeオブジェクト(のアドレス)が規定値として表示されるわけではない。
 
Default:=Range(toRng, frRng)
とした場合にはセル参照のValueプロパティの配列が指定されたことになるが、
InputBoxメソッドが配列を受け入れないので配列のデータのいずれかが表示される
結果となる。
InputBoxメソッドでRangeオブジェクトを取得するにはTypeで「8」を指定した上で
Defaultに「セル参照を表す文字列」を指定することで間接的に行う。
。
なお、
AddressプロパティはRangeオブジェクトのアドレスを文字列で返すプロパティである。
(0,0)はAddressプロパティの引数RowAbsolute,ColumnAbsoluteをそれぞれ
を相対参照として指定した記述、Address(False,False)の
Falseを0で代用した記述である。
(みやほりん)

 (みやほりん)さん、丁寧なご説明ありがとうございます。

 >いかにもRangeオブジェクトを指定すればセル範囲...
 >Valueプロパティの配列が指定...
 は体験しています。キャンセルボタンをクリックするごとにセル範囲の値が次々に表示されてました。

 >AddressプロパティはRangeオブジェクトのアドレスを...
  納得です。お世話になりました。

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.