Visual Studio 6.0 (または VB6 などのサブ製品) の開発者ライセンスを持っている場合は、Format()
.Net の極端なオーバーヘッドなしで VBScript で関数を取得する簡単な方法があります。
'Requires msstdfmt.dll, part of Visual Studio 6.0 and
'not meant for general redistribution.
Option Explicit
Class Formatter
Private SDFMT, RS
Private Sub Class_Initialize()
Set SDFMT = CreateObject("MSSTDFMT.StdDataFormat")
Set RS = CreateObject("ADODB.Recordset")
With RS
.Fields.Append "V", 12 'adVariant.
.Open
.AddNew
Set .Fields(0).DataFormat = SDFMT
End With
End Sub
Private Sub Class_Terminate()
RS.Close
End Sub
Public Function Format(ByVal Value, ByVal Style)
SDFMT.Format = Style
With RS.Fields(0)
.Value = Value
Format = .Value
End With
End Function
End Class
Dim FMT
Set FMT = New Formatter
MsgBox FMT.Format(Now(), "yyyy-mmm-dd hh:nn:ss")
MsgBox FMT.Format(123456.789, "###,##0.00")
ただし、通常、そのような完全な汎用性は必要なく、既存の VBScript 操作を使用して必要な結果を得ることができます。
Option Explicit
Private Function ZF2(ByVal Num)
ZF2 = Right("0" & CStr(Num), 2)
End Function
Private Function DtFormat(ByVal Dt)
DtFormat = CStr(Year(Dt)) & ZF2(Month(Dt)) & ZF2(Day(Dt))
End Function
MsgBox DtFormat(#3/11/2012#)
もちろん、String 値を Date 値として使用しようとするときに遭遇する危険性については何も扱っていません。これらは、文字列で Universal Date Format (つまり、US レイアウト: MM/DD/YYYY) を慎重に使用し、暗黙的な変換に依存しない限り、エラーが発生する可能性があります。CDate() 関数はロケールに対応しており、Universal 形式の日付が与えられた場合、偽の結果を生成する可能性があります。