Excelファイルのデータに対していくつかのアクションを実行し、そのすべてのデータをセミコロンで区切られたCSV /テキストファイルに変換するVBAコードがあります(以下のコード)。
今、必要なのは、既存のマクロに VBA コードを追加して列ヘッダー (「申請日」など) を見つけ、すべての日付を YYYY-MM-DD 形式に変換することだけです。この列の元の値には固定の日付形式がありません。
Public Sub ExportToCsvFile(FName As String, _
Sep As String, SelectionOnly As Boolean, _
AppendDataOnExistingFile As Boolean)
Dim WholeLine As String
Dim FNum As Integer
Dim RowNdx As Long
Dim ColNdx As Integer
Dim FirstRow As Long
Dim LastRow As Long
Dim FirstCol As Integer
Dim LastCol As Integer
Dim CellValue As String
Application.ScreenUpdating = False
On Error GoTo EndMacro:
FNum = FreeFile
If SelectionOnly = True Then
With Selection
FirstRow = .Cells(1).Row
FirstCol = .Cells(1).Column
LastRow = .Cells(.Cells.Count).Row
LastCol = .Cells(.Cells.Count).Column
End With
Else
With ActiveSheet.UsedRange
FirstRow = .Cells(1).Row
FirstCol = .Cells(1).Column
LastRow = .Cells(.Cells.Count).Row
LastCol = .Cells(.Cells.Count).Column
End With
End If
If AppendDataOnExistingFile = True Then
Open FName For Append Access Write As #FNum
Else
Open FName For Output Access Write As #FNum
End If
For RowNdx = FirstRow To LastRow
WholeLine = ""
For ColNdx = FirstCol To LastCol
If Cells(RowNdx, ColNdx).Value = "" Then
CellValue = Chr(34) & Chr(34)
Else
CellValue = Cells(RowNdx, ColNdx).Value
CellValue = Replace(Replace(CellValue, Chr(150), Chr(45)), Chr(151), Chr(45))
CellValue = Replace(Replace(CellValue, Chr(60), Chr(60) & Chr(32)), Chr(10), "<br />")
CellValue = Chr(34) & Replace(CellValue, Chr(34), Chr(34) & Chr(34)) & Chr(34)
End If
WholeLine = WholeLine & CellValue & Sep
Next ColNdx
WholeLine = Left(WholeLine, Len(WholeLine) - Len(Sep))
Print #FNum, WholeLine
Next RowNdx
EndMacro:
On Error GoTo 0
Application.ScreenUpdating = True
Close #FNum
End Sub
Sub ExportToSemiColonCsv()
Dim FileName As Variant
Dim Sep As String
FileName = Application.GetSaveAsFilename(InitialFileName:=vbNullString, FileFilter:="CSV Files (*.csv),*.csv")
If FileName = False Then
Exit Sub
End If
ExportToCsvFile FName:=CStr(FileName), Sep:=";", _
SelectionOnly:=False, AppendDataOnExistingFile:=True
End Sub
実際に正しい方向に向けることができる古い質問は見つかりませんでした。前もって感謝します。
更新 1: 既に FORMAT(CellValue,"yyyy-mm-dd") を試しましたが成功しませんでした。
更新 2: また、文字列変数のセル値を読み取ってから、次のように日付型に変換し直しました。
If IsDate(CellValue) Then
Dim str1 As String
str1 = Cells(RowNdx, ColNdx).Value
Dim DateValue As Date
DateValue = CDate(str1)
CellValue = Format(DateValue, "yyyy-mm-dd")
End If
実際、コード to が実行されていないようです (ただし、コンパイル エラーはありません)。
更新 3:.NumberFormat
最後に、 と を使用し
て解決でき.Text
ます。最終的なコードと制限については、以下の私の回答を参照してください。