こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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.ワークシート関数で得た数値はすべて一度フォーマットする必要があるのでしょうか?
   フォーマットしない良い方法はあるのでしょうか?

ちなみにキーボードから入力した数値もちゃんと拾ってくれます。
詳しい原因がわからないのでよろしくお願いします。

投稿日時 - 2005-07-26 09:39:30

QNo.1538755

困ってます

質問者が選んだベストアンサー

こんにちは。

>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」は、ありえませんし、エラーになります。

これで様子をみてください。

投稿日時 - 2005-07-26 10:44:48

お礼

Wendy02 さま 早速のご回答ありがとうございました。

うまくいきました。
取得する値や返す値がまだ今一よくわからずご迷惑をおかけしました。

今後ともよろしくお願いします。

また、Wendy02さまのコードで一度取得すると
前の私の正しくないコードでも取得するのがまた不思議で・・・

どうもありがとうございました

投稿日時 - 2005-07-26 12:59:47

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

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

投稿日時 - 2005-07-26 11:07:12

あなたにオススメの質問