将日期格式的列中的所有行转换为文本格式
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
我需要将以日期格式格式化的日期列转换为文本格式,并在可能的情况下进行反向转换。 我可以应用 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