- ベストアンサー
VBA 変数Variantは万能??
エクセル2002使用です。 A1セル 日付入力(ex.2005/7/25) A2セル A1セルから月のみワークシート関数で取得 =month(A1) A3セル 日付入力 '12ヶ月分(ex.2005/7/25~2006/6/25) A4セル A3セルから月のみワークシート関数で取得 =month(A3) ’12ヶ月分 3行目、4行には12ヶ月分AからL列に同じ設定があります。 (この質問にはあまり関係ないですが・・・) A7セルにA2の値を参照して入力のため sub test() Dim Myrg as variant ’またはstring、Duble Set Myrg = Range("A4:L4") _ .Find(what:=range("A2").value, lookat:=xlWhole) range("A7").value = myrg end sub とすると、Myrgはemptyのままで数値を拾ってくれません。 A2セルとA4~L4セルをA5セルA6~L6セルにフォーマットして sub test() Dim Myrg as variant ’またはstring、Duble Range("A5").Value = Format(Range("A2").Value, "##") Range("A6").Value = Format(Range("A4").Value, "##") Range("B6").Value = Format(Range("B4").Value, "##") ’(以下12ヶ月分フォーマット) Set Myrg = Range("A6:L6") _ .Find(what:=range("A5").value, lookat:=xlWhole) range("A7").value = myrg end sub とするとちゃんと数値を拾ってくれます。 分からないのは、 1.変数variantは、万能ではないのでしょうか? 2.ワークシート関数で得た数値はすべて一度フォーマットする必要があるのでしょうか? フォーマットしない良い方法はあるのでしょうか? ちなみにキーボードから入力した数値もちゃんと拾ってくれます。 詳しい原因がわからないのでよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >Set Myrg = Range("A4:L4") _ >.Find(what:=range("A2").value, lookat:=xlWhole) Range("A4:L4") のところには、一体、ここには何が入っているのか、よく分かりませんが、基本的なことですが、 Find メソッドの引数は、あまり省略しすぎては、うまくいきません。その都度、選んでください。今回は、LookIn:=xlValuesを入れてみました。 例: Sub test() Dim Myrg As Range Set Myrg = Range("A4:L4"). _ Find(what:=Range("A2").Value, _ LookIn:=xlValues, _ lookat:=xlWhole) If Not Myrg Is Nothing Then Range("A7").Value = Myrg.Value End If End Sub Findメソッドが返すのは、Rangeオブジェクトです。また、その後のMyrg は、暗黙的にそのまま値を取り出してもエラーにはなりませんが、なるべく、プロパティをつけて、Myrg.Valueにしてください。だから、Myrg の変数型は、「String、Duble」は、ありえませんし、エラーになります。 これで様子をみてください。
その他の回答 (1)
- takibo
- ベストアンサー率57% (116/200)
Wendy02さんの回答の通りだと思います。 Findメソッドに関して下記のような記載がありましたので補足情報として。 http://www.asahi-net.or.jp/~zn3y-ngi/YNxv98c2.html 【引数を省略した場合の注意事項】 What以外の引数は省略可能ですが、省略すると既定値が使われるものと、直前で使用されたときの値が使われるものとがあります。 そのため LookIn, LookAt, SearchOrder, MatchByte は明示的に指定したほうが安全です。 「Findメソッドの引数一覧表」 http://www.asahi-net.or.jp/~zn3y-ngi/YNxv98c_find.html
お礼
Wendy02 さま 早速のご回答ありがとうございました。 うまくいきました。 取得する値や返す値がまだ今一よくわからずご迷惑をおかけしました。 今後ともよろしくお願いします。 また、Wendy02さまのコードで一度取得すると 前の私の正しくないコードでも取得するのがまた不思議で・・・ どうもありがとうございました