1369560924 EXCEL2007のVBAについての質問です。

"SCHEDULE SHEET" A列に記載された年・日・時間のデータを使ってB列に"10FY1Q"等Quater毎のterm情報を記載したいと思っています。
WORKSHEET関数では、"TERM SHEET"を追加し、A列に年・日データ、B列にTerm情報を付記した上で
下記の関数で記載する事が出来ました。
=VLOOKUP(DATE(LEFT(A2,4),MID(A2,6,2),MID(A2,9,2)),term!$A:$B,2)
当該Worksheet関数をVBA化するに当たり、首っ引きで下記のように記載してみましたが、うまく行きません。
Dim eddateA As Date
For i = 2 To 10
eddateA = Cells(i, 1)
Worksheets("schedule").Cells(i, 1).Value = Application.VLookup(DateSerial(Year(eddateA), Month(eddateA), Day(eddateA)), Worksheets("term").Range("$A:$B"), 2)
Next
詳しい方、アドバイス頂けませんでしょうか?

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/05/26 18:35:24
  • 終了:2013/05/27 10:54:08

ベストアンサー

id:Silvanus No.3

Silvanus回答回数174ベストアンサー獲得回数672013/05/27 00:36:23

ポイント100pt

TERM SHEETの内容等の情報が明らかにされていないので
どの様な点でお困りなのかが判然としないのですが、
敢えてユーザー定義関数にされなくとも、下記の様な式の記述で
事足りるのではないかと思いますが、いかがでしょうか。
もっと簡潔に書けるかも知れませんが…。
※A2に格納された日付情報を元に年度四半期を表示させる場合

=CONCATENATE(RIGHT(TEXT(IF(MONTH(A2)<4,YEAR(A2)-1,YEAR(A2)),"0"),2),"FY",INT(MOD(MONTH(A2)+8,12)/3)+1,"Q")

どうしてもユーザー定義関数とされるのであれば、これでいかがでしょうか。

Function FYandQ(dateVal As Date) As String
FYandQ = Right(Str(Year(dateVal) + (Month(dateVal) < 4)), 2) & "FY" & Format(Int(((Month(dateVal) + 8) Mod 12) / 3) + 1, "0") & "Q"
End Function
id:Silvanus

書き忘れましたが、後者の方は「=FYandQ(A2)」という様な感じで使用して下さい。

2013/05/27 01:15:49
id:bamboodragon

表示出来ました!
確かに別シートからデータを持ってくる意味合いがないですね。
勉強になりました。

有難う御座いました!

2013/05/27 10:53:42

その他の回答(2件)

id:taknt No.1

きゃづみぃ回答回数13537ベストアンサー獲得回数11982013/05/26 19:19:22

ぱっと見、eddateBというのをセットしていないようですが
これは 何をセットしているのでしょうか?

うまくいかないのは この初期化されていない変数を使ってるのが
原因ではないでしょうか?

id:bamboodragon

書きこみ有難う御座います。eddateBはeddateAの誤りです。。失礼しました。

2013/05/26 19:32:21
id:bamboodragon

本文修正致しました。

2013/05/26 19:37:17
id:bamboodragon

質問文を編集しました。詳細はこちら

id:taknt No.2

きゃづみぃ回答回数13537ベストアンサー獲得回数11982013/05/26 19:47:44

何が うまくいかないのかは よくわからないのですが

Worksheets("schedule").Cells(i, 1).Value =

Worksheets("schedule").Cells(i, 2).Value =
なのでは なかろうかと思います。

id:bamboodragon

たびたびすみません。
修正しました。

2013/05/26 23:06:22
id:taknt

うまくいかない原因を指摘しているのに 評価されないのは不本意ですね。

2013/05/27 11:14:38
id:bamboodragon

VBAを下記に修正します。
Dim eddateA As Date
For i = 2 To 10
eddateA = Cells(i, 1)
Worksheets("schedule").Cells(i, 2).Value = Application.VLookup(DateSerial(Year(eddateA), Month(eddateA), Day(eddateA)), Worksheets("term").Range("$A:$B"), 2)
Next

id:Silvanus No.3

Silvanus回答回数174ベストアンサー獲得回数672013/05/27 00:36:23ここでベストアンサー

ポイント100pt

TERM SHEETの内容等の情報が明らかにされていないので
どの様な点でお困りなのかが判然としないのですが、
敢えてユーザー定義関数にされなくとも、下記の様な式の記述で
事足りるのではないかと思いますが、いかがでしょうか。
もっと簡潔に書けるかも知れませんが…。
※A2に格納された日付情報を元に年度四半期を表示させる場合

=CONCATENATE(RIGHT(TEXT(IF(MONTH(A2)<4,YEAR(A2)-1,YEAR(A2)),"0"),2),"FY",INT(MOD(MONTH(A2)+8,12)/3)+1,"Q")

どうしてもユーザー定義関数とされるのであれば、これでいかがでしょうか。

Function FYandQ(dateVal As Date) As String
FYandQ = Right(Str(Year(dateVal) + (Month(dateVal) < 4)), 2) & "FY" & Format(Int(((Month(dateVal) + 8) Mod 12) / 3) + 1, "0") & "Q"
End Function
id:Silvanus

書き忘れましたが、後者の方は「=FYandQ(A2)」という様な感じで使用して下さい。

2013/05/27 01:15:49
id:bamboodragon

表示出来ました!
確かに別シートからデータを持ってくる意味合いがないですね。
勉強になりました。

有難う御座いました!

2013/05/27 10:53:42

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません