- ベストアンサー
VBAで年月日の型変換するプログラム
- VBAを使用して、年月日の型変換をするプログラムを作成しています。
- 入力された形式の年月日を指定した形式に変換し、別のシートに出力するためのプログラムです。
- 具体的には、入力された形式が『平成18年 4月 1日( 土 曜日) 午前9時00分頃から 平成18年 4月 2日( 日 曜日) 午後3時00分の間』の場合、 『18. 4. 1. 9:00』と『18. 4. 2. 15:00』の形式に変換して出力します。午前・午後は24時表記に変換され、全角文字は半角に変換されます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>スペースが多すぎたり スペースとかは、パターンに吸収させることができるかもしれません。 または、前処理としてスペースをReplace 等を使って取り除いておくといいかもしれません。 >型があわなかったり Set matches = regEx.Execute(dateTxt) の後で If Matches.Count = 0 Then MsgBox "パターンに合致しません" Else ' マッチした時の処理 End If のように Matches.Count の値が 0 の時にはパターンに合致しなかったことが判別できます。
その他の回答 (2)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#1>右側をどのように変更したらよいのでしょうか? そのまま使うなら、 Sheet2.Cells(rng.Row, 1).Value = convertDate(Sheet1.Range("A1")) のようにすればいいです。 なんだったら、 r As Range を dateStr As String に変えて r.value を dateStr に変更すれば Sheet2.Cells(rng.Row, 1).Value = convertDate(Sheet1.Range("A1").Value) のようにできます。 お好みでどうぞ。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
ユーザー定義関数として作成してみました。 標準モジュールに置いて下さい 適当なセルで =convertDate(Sheet1!A1) のように使います。 セルの書式設定の配置で折り返して全体を表示するにチェックを付けて置いて下さい。(分までが入るセル幅にしておきます) ---------------------------------------------------------------- Public Function convertDate(r As Range) As String Dim dateTxt As String Dim regEx, matches, match Dim startDate As String, endDate As String dateTxt = StrConv(r.Value, vbNarrow) '数値を半角に Set regEx = CreateObject("VBScript.RegExp") regEx.Global = True regEx.Pattern = "(\d+).+?(\d+).+?(\d+).+?(午前|午後)(\d+).+?(\d+)" Set matches = regEx.Execute(dateTxt) Set match = matches(0) With match startDate = .SubMatches(0) & ". " & .SubMatches(1) & ". " & .SubMatches(2) & ". " & _ .SubMatches(4) + IIf(.SubMatches(3) = "午後", 12, 0) & ":" & .SubMatches(5) End With If matches.Count > 1 Then Set match = matches(1) With match endDate = .SubMatches(0) & ". " & .SubMatches(1) & ". " & .SubMatches(2) & ". " & _ .SubMatches(4) + IIf(.SubMatches(3) = "午後", 12, 0) & ":" & .SubMatches(5) End With Else endDate = "" End If If endDate = "" Then dateTxt = startDate Else dateTxt = startDate & vbLf & "~" & vbLf & endDate End If convertDate = dateTxt End Function
補足
私の作成した Sheet2.Cells(rng.Row, 1).Value = Sheet1.Range("A1").Value の右側を変えるのと、他にBLUEPIXYさんが考えてくださったプログラムをまるまる今のプログラムに当てはめることでやってみたいと思いますが、セルにいれるのではなく=の右側をどのように変更したらよいのでしょうか? Sheet2.Cells(rng.Row, 1).Value =convertDate(Sheet1!A1) という使い方でいいのでしょうか? 教えてください。 本当に困っていてBLUEさんのお力をかりたいです。
補足
返事が遅れてしまいすいません。本当に助かりました。!!すごくうれしいです。 一つ質問してもよろしいでしょうか? ちゃんと型変換もでき、私のやりたかったことができました。! それでエラー処理として、まったく違う文字をうってしまったり スペースが多すぎたり、型があわなかったりすると、エラーになってしまいます。 このときにエラーメッセージとして 『スペースが多いか、型が違います』みたいなエラーメッセージを出してやり直しを促すような処理をほどこしたいのですが、 どのプログラムの部分をどう追加すればよいのかわからず 悪戦苦闘しております。どうかお力をかしていただけないでしょうか。 お願いします。困っていまして・・