• ベストアンサー

エクセルマクロの質問です。

エクセルマクロの質問です。 こんにちは マクロを勉強し始めて早速つまずきましたので、ご教授お願いいたします。 IF文で、表示されている値を比較することは可能でしょうか? 例えば A1のセルに2010/12/31といれて、書式設定から表示形式をd"日"とします。 するとA1セルには31日と表示されます。 また、B1セルに31日と直接打ち込んでA1とB1セルを比較させたいと考えています。 このように表示されているものを比較することは可能でしょうか? 可能であればその方法をご教授お願いします。 よろしくお願いいたします。m(_ _)m

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

エクセルVBAのVBなどと違うところは、エクセルの仕組みと密接にかかわっているということです。 エクセルのことがわかってないとVBAは組めません。 多分下記(1)(2)が判ってない状態でVBAを組もうとしている。 (1)日付シリアル値 この日付というのは、シートのセルには、セルの値として、日付シリアル値という値がセットされます。このことを知らないのでしょう。1900年1月1日からその日までの実日数です。日付に連番を振った序数です。 だから両者を単純に比較したら等しくない。 A.日付だけ取り出して、比較(A1に対しDay関数を適用) 参考 Sub test03() MsgBox Day(Range("A1")) & "日" End Sub B。年月を添えて、日付シリアル値として比較(B1の値に足し。Dateserial関数を使う) の2つが考えられます。 Sub test02() 参考 13より2010/8/13を導く Sub test02() MsgBox DateSerial(2010, 8, Range("B1")) End Sub (2)シートのセルには、色んな属性があること 値 表示形式適用語の見た目 関数式 入力規則など多数 普通に比較演算子=などで比較すると、セルの「値」のこととして比較されます。セル番地に続けて、.Valueをつければ明示的に「値」です。 この場合A1が31日と表示されているのですが、その見た目を捉える方法があり、Text関数です。 これで比較するならB1に「日」を添えて、文字列として比較する手もあります。 参考 Sub test01() MsgBox Range("A1").Text End Sub -- 日付比較をはっきりさせる意味で、(1)が望ましいのではないかと思う。

osarusan0214
質問者

お礼

(1)(2)についての内容は大体理解はしていたのですが、ではどうしたらできるか?という辺りが分かりませんでしたが、具体的な方法まで書いていただき、理解を深めることができました。 ありがとうございます。

その他の回答 (1)

  • wkbqp833
  • ベストアンサー率36% (319/886)
回答No.1

表示されているとおりに、値を取り出したいのならば、 .Textプロパティを使います If Range("A1").Text = Range("B1").Text then これで、両方とも表示されているとおりに比較されます

osarusan0214
質問者

お礼

.textをつけると表示された値の取得になるんですね^^ ありがとうございます^^勉強になりました^^