- ベストアンサー
マクロの変数
エクセルのマクロで セルA20に1999年3月31日と入力してある時 1999を変数として利用したいのですが Dim y As String y = Application.WorksheetFunction.Year(Range("A20")) としてもエラーになってしまいなす どうしてでしょう
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
VBA なので変数の型はルーズでしょうから y = Year(Range("A20")) とか。 VBA の Year 関数は Integer 型で返します。 #1 さんの Format 関数は String 型で返します。 まぁ VBA ですし。
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 ちょっと読ませていただきました。 こんな風に、年の数字を取り出す方法は、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 を入れるかいれないかで、宣言の必要・不要が決まります。
お礼
何が何やら さっぱりです…
- imogasi
- ベストアンサー率27% (4737/17069)
>関数を使うから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)でしか使ったこと無かったので驚いた。
お礼
む、難しい…この程度で
- ASIMOV
- ベストアンサー率41% (982/2351)
y = Format(Range("A20"), "yyyy") で、どうでしょう
お礼
できました そんな簡単でいいのか…
お礼
そんなもんなんですか 関数を使うからApplication.WorksheetFunctionが必要だと思ってた