将日期格式的列中的所有行转换为文本格式

Convert all rows in a column with date format to text format

我需要将以日期格式格式化的日期列转换为文本格式,并在可能的情况下进行反向转换。 我可以应用 worksheet function TEXT,通过复制粘贴或双击填写,然后 copy/cut 辅助列并粘贴为原始列中的值并记录宏,但是在这个例子中,有什么方法可以在不使用 selecting/activating、自动填充、使用辅助列(如 "H" 和 "I")的情况下做到这一点? vba 函数代替工作表函数是否会提高效率?

Sub DateFormatToText()
    Range("H2").Select
    ActiveCell.FormulaR1C1 = "=TEXT(RC[-1],""dd/mm/yyyy"")"
    Range("H2").Select
    Selection.AutoFill Destination:=Range("H2:H20")
End Sub

浏览了一下,才知道这些都不是最优码。

=TEXT(G2,"dd-mm-yyyy")

使用 - 操作或者使用替换函数

您可以尝试如下:

Range("H2:H" & Range("G" & Rows.Count).End(xlUp).Row).Formula = "=TEXT(G2,""dd/mm/yyyy"")"

没有辅助列,没有工作表公式

要更改同一列中的日期条目,例如:

Option Explicit
Sub colGtoText()
    Dim v, i As Long, r As Range, ws As Worksheet

'define the working area of Column G entries  
Set ws = ThisWorkbook.Worksheets("sheet1")
With ws
    Set r = .Range(.Cells(1, "G"), .Cells(.Rows.Count, "G").End(xlUp))
    v = r.Value 'read into vba array for faster processing
End With

With r
    .NumberFormat = "@" 'change to text format

    'process each entry to the appropriately formatted text string
    For i = 1 To UBound(v)
        If IsDate(v(i, 1)) Then v(i, 1) = Format(v(i, 1), "mm/dd/yyyy")
    Next i

    'write results back to the range from the vba array
    .Value = v
End With

End Sub