- ベストアンサー
複数のセルの文字列を組み合わせて、西暦表示にしたい
いつもお世話になっております。 ブックBからブックAに値を持ってきて、ブックAにて整理しているのですが、複数のセルにまたがって入力された値を組み合わせて西暦表示にしたいと思っています。C列に「(元号○年の)○」、D列に「(○月の)○」、E列には「(○日の)○」が入っています。例えばブックBが2007年2月のものだったら、C列に「19」、D列に「2」、E列に「1(~28のいずれか)」が入っています。ただ問題がひとつありE列に出す○日なのですが、1日だけが「○/1」となっており、1日以降は2,3,4・・・と日にちだけはいってます。これらを組み合わせて最終的には「yyyy/mm/dd」の形にしたいのですが、その前に「H○月○日」にするところでつまづいてしまいました。コードの載せますのでご教授いただけませんでしょうか?このコードですと「H○月日」となってしまいます。また、この形で行うと桁数が変わる月(10月とか)の条件もしていしなければいけないですよね・・・ Sub テスト() Range("F1") = "H" & Range("C1") & "年" & Range("D1") & "月" & Right(E1, 1) & "日" End Sub このコードをD列に文字がある限りループで全ての行を行いたい(E列だと月の日数が変わるので処理がとまってしまうため)場合RangeではなくCellsを使ったほうがよいでしょうか? 毎度ご迷惑をおかけします。環境はxp、excel2000です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Right(E1, 1) じゃE1セル指定になりません。 Right(Range("E1"), 1)) です。 あなたのを修正すると Sub テスト() Range("F1") = "H" & Range("C1") & "年" & Range("D1") & "月" & IIf(IsNumeric(Range("E1")), Range("E1"), Right(Range("E1"), 1)) & "日" End Sub です。 で、ループさせるなら、わたしなら Sub test02() Columns("F:F").NumberFormatLocal = "yyyy/mm/dd" i = 1 Do While Cells(i, "D") <> "" d = "H" & Cells(i, "C") & "/" & Cells(i, "D") & "/" & IIf(IsNumeric(Cells(i, "E")), Cells(i, "E"), 1) If IsDate(d) Then Cells(i, "F") = DateValue(d) Else Cells(i, "F") = "日付認識不能" End If i = i + 1 Loop End Sub こう書きます。
その他の回答 (2)
- okormazd
- ベストアンサー率50% (1224/2412)
元号が「平成」だけだったら、西暦表示したいセルに、 =IF(ISNUMBER(E1),DATE(C1+1989,D1,E1),DATE(C1+1989,D1,RIGHT(E1,1))) で、西暦表示になるが、 VBAでやりたかったら、Worksheet関数DATEを使ってこれをコード化すればいいのでは。
お礼
回答いただきありがとうございます! 今は平成だけでいいのですが、変わった時の事も考えて・・・。というところもあるのです。 ですが参考にさせていただきます!ありがとうございます!
- mshr1962
- ベストアンサー率39% (7417/18945)
一例ですが Sub Test() For Each Rg In Range("D1:D31") '行数がもっとある場合は31の所を変更 If IsEmpty(Rg) Then Exit For 'For ~ Nextから抜ける If Rg.Row = 1 Then '1行目の場合 Rg.Offset(0, 2) = CDate("H" & Rg.Offset(0, -1) & "年" & Rg & "月" & Right(Rg.Offset(0, 1), 1) & "日") Else '2行目以降 Rg.Offset(0, 2) = CDate("H" & Rg.Offset(0, -1) & "年" & Rg & "月" & Rg.Offset(0, 1) & "日") End If Next Rg End Sub
お礼
解説までつけていただきありがとうございます。 行数がブック数によって変動するので、必ずしも1ヶ月で終わるというわけではないんです。なので、変更するのを省きたいというのもあるんですね・・・。 参考になりました!ありがとうございます!
お礼
求めていたものをズバリと答えていただきありがとうございます。 しかもループのコードまでいただいて・・・。 おかげさまで見事に動きました! 本当にどうもありがとうございました!