日付の変換関数
他の形式のファイルを変換時日付のパターンが揃っていない時があります。
日付が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
プログラムの説明はメルマガで順次紹介していきますが、
エクセルの関数を使えばこのような関数は必要ないように思いますが思ったような処理をしたい場合は必要になる時がありますので勉強してください。
文字型を入力するとき先頭に‘をつけないといけませんがそれをコピーすれば日付に変わります。長さも’を除いた長さになります。
今回もエクセルの素晴らしさを実感しました。