[[20040109220943]] 『平成壱五年壱弐月参壱日と表示させるには』(アットホーム) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『平成壱五年壱弐月参壱日と表示させるには』(アットホーム)

 H15/12/31と入力したら平成壱五年壱弐月参壱日と表示させるにはどうしたらいいのでしょうか。
 関数、ユーザー定義、マクロいずれでもいいのですが。
 よろしくお願いします。

 ユーザー定義で[DBNum2]ggge"年"m"月"d"日" とします。
平成壱拾伍年壱拾弐月参拾壱日 と成りますが・・・(ケン)

 ケンさん、ご回答ありがとうございます。

 ユーザー定義で[DBNum2]ggge"年"m"月"d"日"は、初めて知りました。

 「拾」は、のぞいて「伍」は「五」と出来ないのでしょうか。(アットホーム) 

 お世話になります。    (アットホーム)
 次の方法をとったのですが、式が長くなりました。もっと簡単な方法はないのでしょうか。
 またユーザー定義関数等で作るにはどうしたらよいのでしょうか。マクロは、自動マクロぐらいしか知識がありません。

 A1:H15.12.31
 B1:=IF(A1>32515,"平成",IF(A1>9855,"昭和",IF(A1>4594,"大正","明治")))
 C1:=B1&IF(A1>32515,YEAR(A1)-1988,IF(A1>9855,YEAR(A1)-1925,IF(A1>4594,YEAR(A1)-1911,YEAR(A1)-1867)))&"年"&MONTH(A1)&"月"&DAY(A1)&"日"
 D1:=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(C1,1,"壱"),2,"弐"),3,"参"),4,"四"),5,"五")
 E1:=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(D1,6,"六"),7,"七"),8,"八"),9,"九"),0,"〇")

 E1:=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(C1,6,"六"),7,"七"),8,"八"),9,"九"),0,"〇")
 を訂正しました。

 >H15/12/31と入力したら平成壱五年壱弐月参壱日と表示させるにはどうしたらいいのでしょうか
 という一つの例だけしかなく、ご希望がよくわからないので、書き込みを控えようかとも思いましたが…。
 ※10、20、30はそれぞれ、壱〇、弐〇、参〇
 ※5は伍ではなく五
 ということで、考えています。
 無理やりな感じで、冗長な式になりますが、
 B1
 =SUBSTITUTE(TEXT(A1,"ggg")&TEXT(TEXT(A1,"e"),"[dbnum2]#,0年")&TEXT(TEXT(A1,"m"),"[dbnum2]#,0月")&TEXT(TEXT(A1,"d"),"[dbnum2]#,0日"),"伍","五")
 ということでは、いかがでしょうか。

 ユーザー定義関数に関しては、VBAの知識がほとんどありませんので、他の方の書き込みを期待しております。
 (kkk)

 (kkk)さん、ありがとうございます。希望どうりの結果です。
 TEXT関数をぜんぜん使えていませんでした。
 TEXT(TEXT(A1,"e"),"[dbnum2]#,0年")の様な使い方とても参考になりました。
 もっともっと習わなくてはと思っています。
 これからもよろしくお願いします。        (アットホーム)

 ユーザー関数はこんなのでどうでしょう。

 通りすがりの者さんのコードを改造したものです。

 Alt+F11でVBEを出したら、メニューから[挿入]-[標準モジュール]
 で出てきた白いところに下のコードをコピペ。

 使うときは=n2kan(A1)とかいうように使います。
 (ramrun)

 Function n2kan(ByVal Num As String) As String
    Dim Suji As String, I As Single, N As Single
    Suji = ""
    Num = Format(Num, "ggge年m月d日")
    For I = 1 To Len(Num)
        N = InStr("1234567890", Mid(Num, I, 1))
        If N = 0 Then
            Suji = Suji & Mid(Num, I, 1)
        Else
            Suji = Suji & Mid("壱弐参四五六七八九〇", N, 1)
        End If
    Next I
    n2kan = Suji
 End Function

 ramrunさん、ユーザー関数ありがとうございます。(アットホーム)
 早速ためしてみました。希望どおりです。
 VBAを使えるようになったらと思いながら、すぐに躓いて、ストップしてしまいます。 
 これからもよろしくお願いします。


 KAMIYAです。
 解決してしまったようですが、実はramrunさんに質問があります。 

 じつはこの件に関してユーザー関数の作成をトライしていたのですが、
 どうしてもわからない問題につまずいております。
 (実はn2kanについても同じ事が起きているのですが、)
 日付として1900/1/1を与えると、「明治参弐年壱弐月参壱日」が返ってくるんです。
 なんだか最近は日付の問題で泣かされていますが、
 1900/2/29までが一日前の状態で値が返り、
 1900/3/1からは「明治参参年参月壱日」・・・
 もしかして2000年問題のからみなんでしょうか。

 それと、マイナス値を与えると、1900年以前の日付が返ってくるの
 がなんとも不思議(不気味?)です。
 (KAMIYA)

 エクセルワークシート上では1900年は他のアプリケーションとの互換性のため
 閏年としたのに、VBA上ではそういう扱いをしていないようですね。
 だからそれ以前は1日分ずれるようです。

 [XL] うるう年を判定する方法
http://support.microsoft.com/default.aspx?scid=kb;ja;214019&Product=xlw2kINT

 負数についてはエクセルワークシート上では1900年1月1日からの処理のようですが、
 VBAではそうではないみたいですね。
 -11390まで指定できます。
 明治1年10月23日と表示されます。
 それは旧暦の明治元年9月8日のことのようです。

 詳しくは角田(つのだ)桂一さんのHPの、※改元(西暦変換)というところに
 書いてあります。

http://www.h3.dion.ne.jp/~sakatsu/holiday_topic.htm

 理由はこんなところみたいです。
 (ramrun)一休み〜

 ご紹介のページ拝見しました。
 ExcelVBAは当然Excelの日付基準に準拠していると思い込んでいるのが
 落とし穴ですね。また、Excelで表示できる1900/2/29も実は実在しない
 日にちというのも、2000年問題でばたばたしてわかっているつもりで
 失念しておりました。
 ということは、VBAで算出?した日付のほうが正確であると言うことですか。
 ramrunさん、たびたびのご回答、ありがとうございました。
 (KAMIYA)

 マクロ作成者、ramrunさんのHNが消えているようなので、修正。
(というか、流れからすると私が書き込み時に切り取りしてしまったようです。
ramrunさん、失礼いたしました。)
(みやほりん)(-_∂)b:="KAMIYA"

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.