• ベストアンサー

マクロの変数

エクセルのマクロで セルA20に1999年3月31日と入力してある時 1999を変数として利用したいのですが Dim y As String y = Application.WorksheetFunction.Year(Range("A20")) としてもエラーになってしまいなす どうしてでしょう

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

  • ベストアンサー
回答No.2

VBA なので変数の型はルーズでしょうから y = Year(Range("A20")) とか。 VBA の Year 関数は Integer 型で返します。 #1 さんの Format 関数は String 型で返します。 まぁ VBA ですし。

48946
質問者

お礼

そんなもんなんですか 関数を使うからApplication.WorksheetFunctionが必要だと思ってた

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 ちょっと読ませていただきました。 こんな風に、年の数字を取り出す方法は、4つ程度はあります。 ただ、VBAでは、以下のように、プロパティを使い分けることが必要です。 それが分かっていないと、うまく出来ません。 VBAには、VBA独特の使い方があります。   Dim y1 As Integer   Dim y2 As Integer   Dim y3 As Integer   Dim y4 As Integer      If IsDate(Range("A20").Text) Then     y1 = Year(Range("A20").Value)      'ワークシート関数は、このようにして使います。     y2 = Evaluate("Year(" & Range("A20").Address & ")")      '以下は、文字列で出力しているわけではなく、厳密には、Variant型です     y3 = Format(Range("A20").Value, "yyyy")     If InStr(Range("A20").Text, "年") > 0 Then       y4 = Mid(Range("A20").Text, 1, InStr(Range("A20").Text, "年") - 1)     End If      MsgBox "1: " & y1 & ", 2: " & y2 & ", 3: " & y3 & ", 4; " & y4   End If 変数の宣言は、Integer 型でも、String 型でも、数値なら、どちらでもよいと思います。 Format 関数であっても、Year関数であっても、数値は、文字型・数値型どちらでも入ります。 コードを書く人が、Option Explicit を入れるかいれないかで、宣言の必要・不要が決まります。

48946
質問者

お礼

何が何やら さっぱりです…

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

>関数を使うからApplication.WorksheetFunctionが必要だと思ってた これは間違い (1)VB/VBAの関数 (2)エクセルのワークシートで使う関数をVBAで使える等になっている関数 Application.WorksheetFunction.XXXの形 (3)エクセルワークシート関数で、 Application.WorksheetFunction.XXXの形では使えない物。 (4)ワークシート関数でアドイン関数 の(1)(2)2つがあり、VBAで関数といえば(1)がメイン。 ーー (A)(1)しかない関数 (B)(1)にあり、(2)にもあり、形が同じ。数は多くない。 (C)同じ機能で(1)にあり、(2)にもあり形が少し違う (D)(2)しかない。 がありYearは(B)で(2)として使うとエラーになるのかも知れない。私は、VBAではYearは(1)でしか使ったこと無かったので驚いた。

48946
質問者

お礼

む、難しい…この程度で

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.1

y = Format(Range("A20"), "yyyy") で、どうでしょう

48946
質問者

お礼

できました そんな簡単でいいのか…

関連するQ&A