Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


748 / 13645 ツリー ←次へ | 前へ→

【78562】和暦を西暦に置換え、年齢・勤続年数算出 マクロ初心者 16/11/11(金) 10:16 質問[未読]
【78563】Re:和暦を西暦に置換え、年齢・勤続年数算出 β 16/11/11(金) 13:33 発言[未読]
【78564】Re:和暦を西暦に置換え、年齢・勤続年数算出 マクロ初心者 16/11/11(金) 13:44 発言[未読]
【78565】Re:和暦を西暦に置換え、年齢・勤続年数算出 β 16/11/11(金) 14:04 発言[未読]
【78566】Re:和暦を西暦に置換え、年齢・勤続年数算出 マクロ初心者 16/11/11(金) 14:19 発言[未読]
【78567】Re:和暦を西暦に置換え、年齢・勤続年数算出 β 16/11/11(金) 15:06 発言[未読]
【78568】Re:和暦を西暦に置換え、年齢・勤続年数算出 マクロ初心者 16/11/12(土) 16:16 発言[未読]

【78562】和暦を西暦に置換え、年齢・勤続年数算出
質問  マクロ初心者  - 16/11/11(金) 10:16 -

引用なし
パスワード
   従業員の名簿の作成をエクセルにて行っているのですが
所属ごとのシートがありそれぞれのシートの構成は同じで
A〜AEまで情報が入力されています。

質問1.
K列及びM列の3行目以降に日付が入力されているのですが
すべて和暦の為、これらを西暦(YYYY/MM/DD)に置換えしたいのですが
色々調べたマクロを編集し、下記のマクロを作成したのですが
うまくいきません…。
K列の和暦をL列で一度西暦に置換え、別のマクロにてK列に貼り付けようと思ったのですが
もっと簡単にできる方法などあればご教授頂けないでしょうか?

Sub 和暦を西暦に変換()

  Dim i As Integer, j As Integer, l_r As Long
  For i = 1 To Worksheets.Count
  With Worksheets(i)
    l_r = .Range("K" & Rows.Count).End(xlUp).Row '最終行数をカウント
    For j = 3 To l_r '最終行から3行目まで繰り返す
      Range("L" & l_r).Value = Format$(Range("K" & l_r).Value, "yyyy/mm/dd")
    Next
  End With
Next i

End Sub


質問2.
L列及びN列の3行目以降にDATEDIF関数を使用してL列に年齢、
N列に勤続年数を求めたいのですが
下記のマクロではうまくいきませんでした。
それぞれのシートでK列及びM列にデータがある場合
L列及びN列に上記の年数を求めたいと思っています。
可能であればL列のセルの表示形式を「数値」に
N列のセルは勤続年数なので表示を「●年●ヶ月」にしたいと考えています。

尚、年齢・勤続年数を計算する基となる日付はそれぞれのシートAF1に入力しております。

マクロの知識もほとんどないような者ですが
何卒お力添えを頂ければと思います。


Sub 勤続年数年齢計算()

 Dim myDate1 As String
 Dim myDate2 As String
 myDate1 = Range("K3").Value
 myDate2 = Range("AF1").Value
 If myDate1 = "" Or myDate2 = "" Then
  MsgBox "日付が指定されておりません。"
  Exit Sub
 Else
  Range("L3").Value = DateDiff("YYYY", myDate1, myDate2)
  End If

End Sub

【78563】Re:和暦を西暦に置換え、年齢・勤続年数...
発言  β  - 16/11/11(金) 13:33 -

引用なし
パスワード
   ▼マクロ初心者 さん:

とりあえず 質問1 ですけど、

>K列及びM列の3行目以降に日付が入力されているのですが
>すべて和暦の為、これらを西暦(YYYY/MM/DD)に置換えしたいのですが

この日付って、文字列で入っているのですか?
それとも、日付型データとして 平成28年11月15日 といったように入っているのですか?

セルを選択したとき 数式バーには、どう 表示されますか?

もし、セルのデータが 日付型であれば、(数式バーには 2016/11/15 といったように表示されています)
西暦変換する必要はなく、データは、あくまで【日付】であって、それを 【表示書式】で
エクセル上、「どうのように見せかけるか」だけの話ですから、表示書式を適切なものに設定すればOKです。

マクロ処理をするまでもないですね。

もし、「文字列」として入っている場合、セルを選択したときの数式バーにも
平成28年11月15日 といった形で表示されます。
もし、こうなっているなら、なんらかの変換は必要ですね。

【78564】Re:和暦を西暦に置換え、年齢・勤続年数...
発言  マクロ初心者  - 16/11/11(金) 13:44 -

引用なし
パスワード
   ▼β さん:

ご返信ありがとうございます。
説明が足りず、すみません。

>とりあえず 質問1 ですけど、
>
>>K列及びM列の3行目以降に日付が入力されているのですが
>>すべて和暦の為、これらを西暦(YYYY/MM/DD)に置換えしたいのですが
>
>この日付って、文字列で入っているのですか?
>それとも、日付型データとして 平成28年11月15日 といったように入っているのですか?

文字列にて入力されている為
変換して置換えができたら嬉しいです。

【78565】Re:和暦を西暦に置換え、年齢・勤続年数...
発言  β  - 16/11/11(金) 14:04 -

引用なし
パスワード
   ▼マクロ初心者 さん:

>文字列にて入力されている為
>変換して置換えができたら嬉しいです。

変換して、西暦のイメージを持った【文字列】にしたいのでしょうか?
それとも、本当の日付型データにしてかまわないのでしょうか?

★数式処理にしろ、マクロ処理にしろ、日付を扱う場合、そのデータが「日付型」であるのがベストですので
 シート上のデータとしても、最初から日付型で持たせておくべきです。
 このブックが、たとえば取引先から送られてきたものであれば、まだしも
 もし、自社内で作成しているブックであれば、シートへのデータ記入時に
 日付で入力するようにしましょう。

 そもそも、標準書式であれば 2016/11/15 と入力しようが 平成28年11月15日 と入力しようが
 エクセルが自動的に日付型に変換します。

 これが文字列のまま入っているということは、入力時に、わざわざ、先頭に ' をつけて
 入力しているか、あるいは、そのセルの書式を、わざわざ 文字列書式 にしているということなんですが
 そんなことをしているのですか?

 質問2でも同様で、DateDiff(のみならず、日付を扱う、ほとんどの関数)にとって
 与えられる日付はすべて日付型データという前提があります。
 アップされたコードのように As String とあって、かつ、シート上のセルにも
 文字列として日付のイメージが入力されているだけ ということであれば そのままでは
 処理はできません。

 どうしますか?
 あくまで文字列のまま、変換も文字列、計算も 文字列をもとに行い、その結果も
 文字列としてセットする?

 もし、こういう要件であれば、βとしてはお手伝いするモチベーションがわきません。
 こうすべきではありませんので。

 そうではなく、あらためて、シートの日付欄をすべて日付型に変換して、今後使っていく。
 そうするための、変換作業を簡便に行いたい ということであれば お手伝いします。

【78566】Re:和暦を西暦に置換え、年齢・勤続年数...
発言  マクロ初心者  - 16/11/11(金) 14:19 -

引用なし
パスワード
   ▼β さん:

ご返信ありがとうございます。

>変換して、西暦のイメージを持った【文字列】にしたいのでしょうか?
>それとも、本当の日付型データにしてかまわないのでしょうか?

この従業員データを作成しているのは私ではなく
委託している企業の給与システムから吐き出したデータなので
もしかすると吐き出す時に文字列になるようになっているのかもしれません。

私としても日付型のデータにしたいのでむしろありがたいです。
文字列のせいで数式などを使用するにも不便だったので…

マクロのことをまだまだ理解できていない者ですが
日ごろの作業を簡便化したいと考えておりますので
どうかお力を貸して頂けたらありがたいです。

【78567】Re:和暦を西暦に置換え、年齢・勤続年数...
発言  β  - 16/11/11(金) 15:06 -

引用なし
パスワード
   ▼マクロ初心者 さん:

事情は理解しました。
それでは、まず データ補正をしてみましょう。
実際の、文字列としている日付が どのような形で入っているかが見えないのですが

・K列を選択
・データタブ 区切り位置
・最初の画面は何もせず【次へ】
・次の画面でも何もせず【次へ】
・3つ目の画面で 日付(D) ymd となっているところを選んで完了ボタン

どうなりますか?
もし、これで K列のデータが日付型に変換できるなら
L,M,Nの各列でも同じことをしてください。

表示書式は 和暦表示となっていると思いますので、ここは好きな書式を。

こうしてしまえば、あとは関数であれ、VBAであれ なんとでもできますね。

【78568】Re:和暦を西暦に置換え、年齢・勤続年数...
発言  マクロ初心者 E-MAIL  - 16/11/12(土) 16:16 -

引用なし
パスワード
   ▼β さん:

ご返信ありがとうございます。
そして返答が遅くなり申し訳ございません。

>事情は理解しました。
>それでは、まず データ補正をしてみましょう。
>実際の、文字列としている日付が どのような形で入っているかが見えないのですが
>
>・K列を選択
>・データタブ 区切り位置
>・最初の画面は何もせず【次へ】
>・次の画面でも何もせず【次へ】
>・3つ目の画面で 日付(D) ymd となっているところを選んで完了ボタン
>
>どうなりますか?
>もし、これで K列のデータが日付型に変換できるなら
>L,M,Nの各列でも同じことをしてください。

すごい…このやり方は知りませんでした…
すべて日付型に変換できました。

748 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free