dポイントプレゼントキャンペーン実施中!

こんばんわ。
コンボボックスに、和暦を今年(現在年度)から明治1年まで、降順に格納したいです。(難しければ、150年度分のみ)

平成22
平成21
平成20

昭和55

明治1

色々調べてユーザー定義関数を、値集合タイプにいれるまではできたのですが、
yearsel = Format(Year(Date) - 365 * row, "ggge")
のところがどうしてもうまくできません。
上記の正しい式をご教授いただけたら助かります。

-------
Function yearsel(fld As Control, ID As Variant, row As Variant, _
col As Variant, code As Variant) As Variant

Select Case code

Case acLBInitialize ' 初期化します。
yearsel = True
Case acLBOpen ' 開きます。
yearsel = Timer ' 固有の ID。
Case acLBGetRowCount ' 行数を取得します。
yearsel = 150 '(明治1年までは難しそう・・・)
Case acLBGetColumnCount ' 列数を取得します。
yearsel = 1
Case acLBGetColumnWidth ' 列幅を取得します。
yearsel = -1 ' 既定の幅を使用します。
Case acLBGetValue ' データを取得します。
yearsel = Format(Year(Date) - 365 * row, "ggge")

End Select

End Function

A 回答 (2件)

明治元年の式を間違えました。


Dim i As Integer
Dim targetYear As Date
i=0
targetYear = Date

Do While Year(targetYear) >= 1868

targetYear = DateAdd("yyyy",-i , Date)
ComboBox.AddItem format(targetYear,"gggee")
i=i+1
Loop
    • good
    • 0
この回答へのお礼

ありがとうございます。
上記参考に解決しました。


Case acLBGetValue ' データを取得します。
dyear = DateAdd("yyyy", -row, Date)
targetyear = Format(dyear, "ggge")

accessの標準マクロのvb6を使って作成しています。
comboboxのadditemがなくて非常に不便です。(TT)
上記ユーザー定義にて動作しました。
明治元年は、(本日から合算)3/1では、取得できないのもわかりました。
明治が有効な日付 10/23~でないと、西暦変換はできないのですね。

お礼日時:2010/03/01 10:57

手元にVBAを走らせる環境がありませんので、参考程度に読んでください。



コンボボックス名:ComboBox

とりあえず150年分から
Dim i As Integer
Dim targetYear As Date

For i = 0 to 150
targetYear = DateAdd("yyyy",-i , Date)
ComboBox.AddItem format(targetYear,"gggee")
Next i

明治元年は1868年なので
Dim targetYear As Date
targetYear = Date
Do While Year(targetYear) >= 1868
targetYear = DateAdd("yyyy",-i , Date)
ComboBox.AddItem format(targetYear,"gggee")
Loop

上記の様な感じでいけそうな気がします。
検証は、していませんのであくまで参考程度に
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!