VBA を使用して mm/dd/yyyy を dd/mm/yyyy 日付形式に変換する際に問題があります。
次のようなテーブルがあります。
参考までに、テーブルはレポート ツールから自動生成されます。「文字列操作」または任意の Excel 関数が役立ちますか? この問題を解決する方法を知っている人が私にアイデアをくれることを願っています。
さて、あなたの質問の言い方からすると、あなたが実際に VBA を望んでいる、または必要としているとは思えません。
投稿した画像を見ると、最初のセルに05/06/2013 - 05/10/2013
日付ではなく文字列が含まれているように見えます05/06/2013
。したがって、最初に行う必要があるのは、パーツを分割して、組み込みの Excel または VBA 関数で変換できるようにすることです。
したがって、SEARCH または FIND を使用して「-」を検索し、動的に処理することができます。しかし、私は怠け者なので、文字列の最初の 10 文字が最初の日付で、最後の 10 文字が 2 番目の日付であると仮定します。ソース文字列の TRIM 関数は、前後に余分なスペースがある場合にこれを少し安全にする必要があります。
したがって、文字列05/06/2013 - 05/10/2013
がセル A2 にある場合=LEFT(TRIM(A2),10)
、B2 と=RIGHT(TRIM(A2),10)
C2 に入れることができます。
これらはまだ文字列です。通常、私は DATEVALUE を使用して文字列を日付に変換しますが、私の Excel のコピーは、これらのクレイジーでナンセンスな * 日付形式が好きではありません。したがって、日付を DATE 関数に解析します。=DATE(RIGHT(B2,4),LEFT(B2,2),MID(B2,4,2))
と=DATE(RIGHT(C2,4),LEFT(C2,2),MID(C2,4,2))
をセル C2 と D2 にそれぞれ入れます。
ここから、TEXT 関数 (VBA の format 関数によく似ています) といくつかの文字列連結を使用して、それらを元の単一セルの日付範囲形式に再結合できます。それが望ましい結果であると仮定します。
したがって、最後のセル F2 は になります=TEXT(D2,"dd/MM/yyyy") & " - " & TEXT(E2,"dd/MM/yyyy")
。もちろん、これらすべての数式を次のように 1 つの大きな混乱に結合することもできます。
=TEXT(DATE(RIGHT(LEFT(A2,10),4),LEFT(LEFT(A2,10),2),MID(LEFT(A2,10),4,2)),"dd/MM/yyyy") & " - " & TEXT(DATE(RIGHT(RIGHT(TRIM(A2),10),4),LEFT(RIGHT(TRIM(A2),10),2),MID(RIGHT(TRIM(A2),10),4,2)),"dd/MM/yyyy")
ここでも同じプロセスですが、Excel の数式の代わりに VBA 関数と構文を使用するだけです。なんらかの理由で、DateValue の VBA バージョンは、Excel のコピーでこれらの日付を受け入れます。だから私はそれを使用します。
Public Function ChangeDateFormat(inputString As String) As String
Dim firstDate As Date
Dim secondDate As Date
Dim trimmedInput As String
trimmedInput = Trim$(inputString)
firstDate = DateValue(Left$(trimmedInput, 10))
secondDate = DateValue(Right$(trimmedInput, 10))
ChangeDateFormat = Format(firstDate, "dd\/MM\/yyyy") & " - " & Format(secondDate, "dd\/MM\/yyyy")
End Function
Public Sub Test()
Sheet1.[B2] = ChangeDateFormat(Sheet1.[A2])
End Sub
これは、提供されている Test サブを実行するか、または ChangeDateFormat を Excel の数式でユーザー定義関数として使用することによってテストできます=ChangeDateFormat(A2)
。
Format に渡される日付形式では、日付区切り記号\/
を単に入力するのではなくエスケープしたことに注意してください/
。これは、Format 関数が/
Windows 設定の日付区切り記号に自動的に置き換えられるためです。また、最新のコンピューターに適した日付形式を使用しているため、セパレーターはダッシュです...
* 人々がISO 8601だけを使用すれば、人生はずっと楽になるでしょう。それは理由、正当な理由のために存在します。