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

Posted

技术标签:

【中文标题】将具有日期格式的列中的所有行转换为文本格式【英文标题】:Convert all rows in a column with date format to text format 【发布时间】:2020-02-06 09:49:13 【问题描述】:

我需要将带有日期的列转换为日期格式,如果可能的话,将其转换为文本格式。 我可以应用工作表函数 TEXT,通过复制粘贴或双击填写,然后复制/剪切帮助列并粘贴为原始列中的值并记录宏,但是有什么办法吗所以在这个例子中没有选择/激活、自动填充、使用辅助列(如“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

浏览,我开始知道那些不是最佳代码。

【问题讨论】:

您已将该问题标记为 VBA,因此请发布您尝试过的代码。请参阅 How to create a Minimal, Complete, and Verifiable example。另外,您已经将日期格式转换为文本格式,如果可能的话,可以反向,所以您的公式应该是=TEXT(A1;"yyyy/mm/dd") 【参考方案1】:

您可以尝试如下:

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

【讨论】:

先生,非常感谢。在本例中是否可以不使用辅助列(如“H”和“I”),并使用一些 VBA 函数代替 Worksheet Function ? @Biswajit,我不确定我是否理解您的要求。不可能将两个结果都放在一个列中(H 列和 I 列)。目标到底是什么? @shrivallabha.redij 我认为OP意味着将G列的值直接更改为文本。可能每个单元格中的一个循环都会做到这一点。无论如何,赞成你的答案。 先生,代码显示运行时错误 1004(应用程序定义或对象定义错误)。我尝试将其更改为 ActiveSheet.Range("H2:H" & Range("G" & Rows.Count).End(xlUp).Row).Formula = Application.WorksheetFunction.Text(G2, "dd/mm/yyyy ") 但随后将每行的结果显示为 00/01/1900。此外,是否可以直接将 G 列转换为文本格式,而无需先更改 H 列。您的回答解决了我的问题,但我只想知道这是否可能。我实际上不需要在另一列中更改值。 @Biswajit,我的错误是代码中有错字。我现在已经修好了。对于: Foxfire 和 Burns 烧伤:了解。但由于他提到了两列的输出,我感到很困惑。【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:
=TEXT(G2,"dd-mm-yyyy")

使用 - 操作或者使用替换功能

【讨论】:

以上是关于将具有日期格式的列中的所有行转换为文本格式的主要内容,如果未能解决你的问题,请参考以下文章

将Dataset中的列类型转换为python中具有特定格式的日期时间类型时出错

如何将所有日期格式转换为日期列的时间戳?

excel表格自定义格式的日期怎么改成文本格式的日期?

我们如何仅从 Oracle 中具有各种日期和字符串格式的列中提取日期?

从字符串转换为日期时间时获取常规日期时间格式而不是纪元时间?

将包含多种字符串日期格式的列转换为 Spark 中的 DateTime