関工健児誇りあれ!?

下関のブログです(^^)v 明日見村 MotoG5Plus Windows10 Kindle iPhone Access Excel VBA ALCATEL IDOL4 Zenfone2 ZE551ML CHUWI Hi8 目標は?100kb/s でも読めるアホblog です

新元号の対応(^^)? 暫定版、エクセル編

--- 2019-03-06 --- Part-2

 

こちらにも書いておきます

平成=4/30 まで

新年度=新元号の年度

新年度4月の行事は、存在しません

 

以下リンクは、間違った、アレこれと、お詫びです

私ちゃん同様

間違った人は、申し訳ありませんでした

m(_ _)m

 

新元号の対応(^^)? 動作確認、win7 Excel2010 - 関工健児誇りあれ!?

 

 

--- 2019-03-06 ---

 

起きました

(^^)?

目が覚めました

おはようございます

(^^);

 

アレこれチェックをしておりまして、

何気に多めな、ご様子です

(^^)?

気になりますョね、新元号

(^^);

じゃ、も少し具体的な対応を解説しましょ

 

---

(Excel まんま編) 標準機能のみ!って対応の事です^^

1) 名前の管理

Sheet名=MF

Cell B2=2019/04/01 日付型、気にせずこのままで良いです

Cell B3=安寧、この2文字が新元号です

Cell B4=A、これがH31/4/1 な、H-->A です

Cell B5=YEAR(B2) - 1、和暦の引き算用です、いちいち入れると面倒そうなので、適宜^^

 

M新元号日=B2、名前の管理で、共通の名称です

M新元号N=B3

M新元号X=B4

M新元号S=B5

 

2) 判定方法、条件文、編集

印刷シート=RPT

 

日付の元データセル=Z2、印刷物の欄外に入力します

 

=IF(Z2 = "", ""   <-- 空白だったら、表示しません、ゼロ文字です

, IF(Z2 < M新元号日   <-- 入力した日付が4/1 前(含まない) だったら? の条件文

, TEXT(Z2, "gee/mm/dd")   <-- 通常通り、Excel 関数=TEXT です

,  M新元号X & RIGHT("0" & YEAR(Z2) - M新元号S, 2) & TEXT(Z2, "/mm/dd"))   <-- 新元号です、RIGHT=桁合わせしてます、ex) A01/04/01

 

3) 注意点

Excel は、独自で余計なお世話機能が付いています

文字列を勝手に改行したり、数字なのに日付になったり、色々です

 

TEXT 関数=文字列です

 

ですが、自動変換が掛かるかも知れません

今までには記憶に無いです、これに関して、この関数は、、、変語のアベマ語^^;

 

なので、絶対に、失敗したく無い

その時は?

 

先頭に、"'" <-- ' 見辛いですが、シングルコーテーションを付けて下さい、正式名は覚え辛いのでシングル、ダブルです、確か、アポストロフィ? でしったけ?

 

又は、再度、 & "" <--ゼロ文字列を付加、明示的に文字列へ型変換しています

 

4) その他

あとは、日本語だったら、M新元号N、半角だったら、M新元号X、です

 

つまんない事ですが、、、

N=日本語の略

X=1Byte 文字列の略

S=引き算Subtract

 

新人類がのたまうレガシーシステム COBOL 的? ^^;

これに合わせております

因みに、

9=数値です

 

---

(エクセル VBA編) 関数作るぞ!

VBA EDITOR 起動、開発タブに有ります、開発タブ=エクセル自体のOPTIOS チェックで表示が出ます? 探して下さい^^; 結構ね、思いっきり何時も探してます

 

1) 標準モジュール、自分のだョって名前が良いと思います

これ、関数名が重複しなければ、只の塊って事だけです

 

モジュール名、mYOSHIO、ヨシオが良いって言ってます^^?

関数名、FUNC_NEWGENGO、これが関数名になります、短い方が使う時に気持ち良い? だらだら長文になりませんが、パッと見分かる! も大切です

 

2) 作っちゃお、VBA 関数

'(パラメータ)

'P_YMD、変換前の日付型、一応チェックします

'PROC、1=西暦、2=日本語和暦、3=半角和暦(デフォルト既定値、省略可)

'編集後=元号+年/月/日 ex) H30/12/31

'

Function FUNC_NEWGENGO(P_YMD As Variant, Optional PROC As Integer = 3) As String

 

    Dim w_NM As String

 

    w_NM = ""

 

    IF Not IsDate(P_YMD) Then GoTo sub_ex

 

    If PROC = 1 Then

            w_NM = Format(P_YMD, "yyyy/mm/dd")

            GoTo sub_ex

    End If

 

    PROC = PROC + Iif(P_YMD < #2019/4/1#, 10, 0)

    w_NM = Right("0" & Year(P_YMD) - 2018, 2)

 

    Select Case PROC

        Case 3

            w_NM = "A" & w_NM & Format(P_YMD, "/mm/dd")

        Case 13

            w_NM = Format(P_YMD, "gee/mm/dd")

        Case 2

            w_NM = "安寧" & w_NM & Format(P_YMD, "/mm/dd")

        Case else '12

            w_NM = Format(P_YMD, "gggee/mm/dd")

    End Select

sub_ex:

    FUNC_NEWGENGO = w_NM

    w_NM = ""

 

End Function

 

---

まっ、大体、こんな感じ

(^^)?

スペルチェック、閉じカッコ漏れ

(^^);

ご容赦下さい、未検証でスマホでカキコでございます

 

で、、、も少し言うと?

VBA

セレクト ケース

この条件文の順番は、重要です

確率的に高い順番からチェックします

(^^);

適宜、、、と、言う事で!

 

以前もカキコしておりますが、

こう言う、地味な作業、考え方

(^^)?

重要ですからネ

特に、大量のデータを取り扱う場合です

普段から、少し考え、こう言う思考で組んでれば?

(^^);

あの業界小話、みたいな事態には成りません

 

今回これは暫定版ですが、この考え方で何時も使っていれば?

(^^)?

次回の時も? 困りません?

(^^);

それ以前に、生存してるか疑問形?

 

 

な、、、ウンチク系でござんした

(^^)?

今回は? 珍しく? 実用的?

 

いと、お菓子?

チョコ下さい?

チョコ食べたい?

 

---

日見村

村長さんでした

(^^)/ NewGengo Excel