ポイント
- Select Case value で value が何であるのか、大小、範囲を評価できる。
- 別の変数など任意の判定は、使用が想定されていない(と思う)。
- Select Case True とすれば、その後の Case で任意の判定を行うように使える。
VBA コード
- AddYmdSlash 関数は Select Case の使用例として書いた。
- AddYmdSlash 関数は文字列の長さを評価してスラッシュを入れているだけなので、厳密な変換はできない。
Option Explicit ''' <summary> ''' 年月日文字列の人と月の間、月と日の間に半角スラッシュを挿入して返します。 ''' 引数が "0" の場合は空文字を返します。 ''' </summary> ''' <param name="ymd">年月日文字列</param> ''' <returns>変換後文字列</returns> Public Function AddYmdSlash(ByVal ymd As String) As String ' (yy)yymmdd ⇒ (yy)yy/mm/dd ' 0 ⇒ 空文字 ' それ以外 ⇒ そのまま Select Case True Case Len(ymd) = 6: ymd = Mid(ymd, 1, 2) & "/" & Mid(ymd, 3, 2) & "/" & Mid(ymd, 5, 2) Case Len(ymd) = 8: ymd = Mid(ymd, 1, 4) & "/" & Mid(ymd, 5, 2) & "/" & Mid(ymd, 7, 2) Case ymd = "0": ymd = "" Case Else: ' 変換しない End Select AddYmdSlash = ymd End Sub Public Sub Test() Debug.Print AddYmdSlash("20160329") Debug.Print AddYmdSlash("160329") Debug.Print AddYmdSlash("0") Debug.Print AddYmdSlash("適当な文字列") End Sub
結果
2016/03/29 16/03/29 適当/な文/字列
おわりに
今回の投稿出だした例ですけれども、最初は Format 関数を使えばスラッシュを入れられないかしらと試行錯誤しておりました。
どうやら、できない、とわかりましたの><。
そこでいろいろ試す中で得られた知見がございましたので、ノートいたしました。
参考ページです。ありがとう存じます!
- VB Select Case はもっと使える
- 8桁のyyyymmdd形式の数字を日付に変換するExcelマクロ | インストラクターのネタ帳
- 文字列の長さを取得する(Len/LenB関数):Excel VBA|即効テクニック|Excel VBAを学ぶならmoug
以上です。