ビジネスに役立つ講座や交流会を開催
社長・個人事業主からサラリーマン・主婦まで、どなたでも
アベノ塾

ホーム  会場案内  お問合せ

〒545-0052
大阪市阿倍野区阿倍野筋3-12-2
あべのクオレ1F
(ナガセキャリアプラザ アベノ校)
TEL 06-6647-5571

日付の変換関数

他の形式のファイルを変換時日付のパターンが揃っていない時があります。
日付が2014/01/20がエクセルに変換すると2014/1/20に変わります。

Sub 文字を日付に変換()
    Dim hiduke As String
    hiduke = "2014/01/10"
    MsgBox CDate(hiduke)
End Sub
Sub 文字を日付に変換セル()
    Cells(2, 2) = CDate(Cells(2, 1))
    Cells(3, 2) = CDate(Cells(3, 1))
End Sub
Sub 日付を文字に変換()
    Dim hiduke As String
    hiduke = "2014/01/1"
    MsgBox Format(hiduke, "yyyy/mm/dd")
End Sub
Sub 日付を文字に変換セル()
    Cells(2, 3) = Format((Cells(2, 2)), "yyyy/mm/dd")
    Cells(3, 3) = Format((Cells(3, 2)), "yyyy/mm/dd")
End Sub

エクセルのデータの中に混在した場合そろえる関数を考えてみましょう。
2014/1/10と2014/01/20が混在する場合。
mid関数を使います。
VBA実践塾部品集(関数)http://vba.asai.net/buhinfu.html
開始位置から指定した数の文字列の取り出しを参考にしてください。
mid関数は何文字目から何文字を取り出す関数です。
例えばhenkan=”2014/1/10”
とした場合mid(henkan,7,1)は7文字目/から1文字/を取り出します。
1)月が1月から9月までの場合0を入れる方法を考えます。
先頭から7番目が/かどうかで変換するかどうかを判断します。
henkan=日付
If mid(henkan,7,1) = "/" Then
  変換処理をする
Else
  変換処理をしない
End If
変換処理
    henkan1 = "0" & Mid(henkan, 6, 1)
    henkan2 = Mid(henkan, 1, 5) & henkan1
henkan=”2014/1/10”の場合
henkan1=”01”
henkan2=”2014/01”
になります。
2)日が1日から9日の場合
2014/1/1を2014/01/10に変換します。
条件の取り出し方を考えます。
1)の流れからいけば/のある場所を判断すればよいと思いますが、
select文を使う場合は1つの条件での判断になりますので、日付の長さで判断します。
長さを取得する関数はlen(henkan)です。

Sub 変換1()
    Dim henkan As String
    Dim henkan1 As String
    Dim henkan2 As String
    henkan = "2014/1/10"
    henkan1 = "0" & Mid(henkan, 6, 4)
    henkan2 = Mid(henkan, 1, 5) & henkan1
    MsgBox henkan2
End Sub
Sub 年月変換()
    Dim i As Long
    Dim henkan As String
    Dim henkan1 As String
    Dim henkan2 As String
    For i = 2 To 3
        henkan = Cells(i, 1)
        If Mid(henkan, 7, 1) = "/" And Len(henkan) = 9 Then
           henkan1 = "0" & Mid(henkan, 6, 4)
           henkan2 = "'" & Mid(henkan, 1, 5) & henkan1
        Else
            henkan2 = "'" & henkan
        End If
        Cells(i, 2) = henkan2
    Next
End Sub
Sub 年月変換1()
    Dim i As Long
    Dim henkan As String
    Dim henkan1 As String
    Dim nagasa As Long
    For i = 2 To 5
        henkan = Cells(i, 1)
        nagasa = Len(Cells(i, 1))
        Select Case nagasa
            Case 8
               henkan1 = "'" & Mid(henkan, 1, 5) & "0" & Mid(henkan, 6, 2) & "0" & Mid(henkan, 8, 1)
            Case 9
               henkan1 = "'" & Mid(henkan, 1, 5) & "0" & Mid(henkan, 6, 4)
            Case 10
                henkan1 = "'" & henkan
        End Select
        Cells(i, 3) = henkan1
    Next
End Sub
Sub 長さ()
    Dim i As Long
    Dim nagasa As Long
    For i = 2 To 5
        nagasa = Len(Cells(i, 1))
        Cells(i, 4) = nagasa
    Next
End Sub
関数を使っていますので関数の使い方は
VBA実践塾部品集(部品の基礎)http://vba.asai.net/buhinsyo.html
関数の使い方を参考にしてください。
Sub 年月変換2()
    Dim i As Long
    For i = 2 To 5
        Cells(i, 5) = hiduke(Cells(i, 1))
    Next
End Sub
Function hiduke(henkan As String)
    Dim nagasa As Long
    nagasa = Len(henkan)
    Select Case nagasa
        Case 8
           hiduke = "'" & Mid(henkan, 1, 5) & "0" & Mid(henkan, 6, 2) & "0" & Mid(henkan, 8, 1)
        Case 9
           hiduke = "'" & Mid(henkan, 1, 5) & "0" & Mid(henkan, 6, 4)
        Case 10
           hiduke = "'" & henkan
    End Select
End Function
プログラムの説明はメルマガで順次紹介していきますが、
エクセルの関数を使えばこのような関数は必要ないように思いますが思ったような処理をしたい場合は必要になる時がありますので勉強してください。
文字型を入力するとき先頭に‘をつけないといけませんがそれをコピーすれば日付に変わります。長さも’を除いた長さになります。
今回もエクセルの素晴らしさを実感しました。