[[20171108165414]] 『和暦変換』(丸の内) ページの最後に飛ぶ

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

 

『和暦変換』(丸の内)

西暦を和暦に変換するにあたって年月日をそれぞれ2桁数字で表すVBAを作成したいのですが、年はどの様に記述すればいいか分からないので投稿します。
 A列
1989/1/6
1989/1/7
1989/1/8
1989/9/30
1989/10/1

を下記のプローシージャでやってみると
 B列          C列
昭和64年01月06日  S64.01.06
昭和64年01月07日  S64.01.07
平成1年01月08日   H1.01.08
平成1年09月30日   H1.09.30
平成1年10月01日   H1.10.01

と年は01になりません。
平成01年01月08日  H01.08 の様に表示させるにはどこをいじればいいかご教示頂けますか?

Sub 和暦変換()
Dim a As Integer
For a = 1 To 5

  Cells(a, 1).Copy Destination:=Cells(a, 2)
  Cells(a, 1).Copy Destination:=Cells(a, 3)
  Cells(a, 2).NumberFormatLocal = "[$-411]ggge""年""mm""月""dd""日"";@"
  Cells(a, 3).NumberFormatLocal = "[$-411]ge.mm.dd;@"
Next a
End Sub

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 表示形式内のeが和暦の年を示す。
 ここをeではなくeeとしてみてくれ。
 (mやdだけだと1月や1日の場合に1となるのがmmやddだと01になるのと同じ)
(ねむねむ) 2017/11/08(水) 17:00

ねむねむさん、
一発でできました!ありがとうございます。
(丸の内) 2017/11/08(水) 17:06

 又の投稿です。和暦に変換したにも関わらず、cellにカーソルをあて、セル列記号の上のfx隣の細長い欄をみると西暦表示が出てきます。
又4列目がすべて「平成」と出てしまいます。
どこをいじればなおるでしょうか? (><)

Sub 和暦変換()
Dim a As Integer

 For a = 1 To 5 

  Cells(a, 1).Copy Destination:=Cells(a, 2)
  Cells(a, 1).Copy Destination:=Cells(a, 3)
  Cells(a, 2).NumberFormatLocal = "[$-411]ggge""年""mm""月""dd""日"";@"
  Cells(a, 3).NumberFormatLocal = "[$-411]ge.mm.dd;@"

  If left(cells(a,2),1) ="昭” then
    cells(a,4)="昭和"
  Else 
    cells(a,4)="平成”
 End if

Next a
End Sub

(丸の内) 2017/11/09(木) 13:46


 見た目は昭和○○年○○月○○日やS○○.○○.○○となっていても実際はシリアル値なので
 西暦表示で出るのは当然ですが、B列やC列は見た目だけでなく実際も昭和○○年○○月○○日の
 ように表示したいのでしょうか?

 Sub 和暦変換()

     Dim a As Integer

     For a = 1 To 5
         Cells(a, 1).Copy Cells(a, 2)
         Cells(a, 1).Copy Cells(a, 3)
         Cells(a, 2) = Application.Text(Cells(a, 2), "gggee年mm月dd日")
         Cells(a, 3) = Application.Text(Cells(a, 3), "gee.mm.dd")

         If Left(Cells(a, 2), 1) = "昭" Then
            Cells(a, 4) = "昭和"
         Else
            Cells(a, 4) = "平成"
         End If
     Next a

 End Sub
(bi) 2017/11/09(木) 14:04

 表示形式はあくまでもセルの表示を変更するもの。
 数式バーやそのセルを参照した場合は表示形式が当たっていない値を用いる。
 >If left(cells(a,2),1) ="昭” then
 >  cells(a,4)="昭和"
 >Else 
 >  cells(a,4)="平成”
 >End if
 は
 cells(a,4) = Format(Cells(a, 1),"ggg")
 で試してみてくれ。
(ねむねむ) 2017/11/09(木) 14:07

 一応、Textプロパティを使うとセルの見た目での文字列をとれるので
 >If left(cells(a,2),1) ="昭” then
 を
 >If left(cells(a,2).Text,1) = "昭” then
 にするという方法もある。
(ねむねむ) 2017/11/09(木) 14:10

 biさんがおっしゃる通り実際も昭和・・・・の様に表示して昭和、平成別に仕訳したかったのです。
下記の記述方法、勉強になりました。
 Cells(a, 2) =Application.Text(Cells(a, 2), "gggee年mm月dd日")

 書いている途中でねむねむさからレスが来て、びっくり!ねむねむさんの記述方法もあるのですね。
 大変勉強になりました。ありがとうございます。
(丸の内) 2017/11/09(木) 14:24

 Application.Text
 はワークシート関数のTEXT関数をVBA内で使う方法になる。
 VBAではワークシート関数のTEXT関数とほぼ同じ機能のFormat関数があるので
 >Cells(a, 2) =Application.Text(Cells(a, 2), "gggee年mm月dd日")
 は
 >Cells(a, 2) = Format(Cells(a, 2), "gggee年mm月dd日")
 とできる。
(ねむねむ) 2017/11/09(木) 14:34

 かゆいところまでご丁寧な説明、感謝致します。 m(_ _)m  m(_ _)m  m(_ _)m 
(丸の内) 2017/11/09(木) 14:58

コメント返信:

[ 一覧(最新更新順) ]


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