【问题标题】:VBA: Find months words in range and replace it with the numberVBA:在范围内查找月份单词并将其替换为数字
【发布时间】:2019-01-31 02:11:14
【问题描述】:

代码下方。我正在尝试用相应的数字替换所有月份的名称。例如 01 的一月。

问题是我有一个字符串作为结果,而我想要日期格式。

Sub AccDec()

Dim SrchRng As Range, cel As Range

NumRows = Range("B13", Range("B13").End(xlDown)).Rows.Count

Set SrchRng = Range(Cells(1, 13), Cells(NumRows, 15))
For Each cel In SrchRng
    If InStr(1, cel.Value, "January") > 0 Then
        cel.Offset(1, 0).Value = "/01/"
    End If
Next cel

End Sub

有什么建议吗?

这是宏的结果。我想实现一个 if 案例。

【问题讨论】:

  • 原始字符串是什么样的?如果你想要一个日期对象,它需要是一个可解析的日期字符串。
  • 您需要提供更多代码。你被困在哪里了?不清楚。
  • SrchRng 应该在哪里查看?如果NumRows 是5,那么SrchRng 将从M1(第1 行,第13 列)变为O5(第5 行,第15 列)。 January 只是文本还是已经是一个真正的日期,格式为仅显示月份名称?
  • 您好,初始范围填充了诸如 2018 年 7 月 14 日之类的字符串,因为它们取自 word 文件;我被困在这一点上,如果我吃宏,而不是 2018 年 1 月 14 日,我只得到 /01/;而我想将 14/01/2018 作为日期格式
  • 您好,可能我不是很清楚。所选范围内有文本格式内容,Excel不识别日期;我不认为解决方案是一种格式。我需要让系统将“2018 年 7 月 14 日”(例如)识别为 14/07/2018。

标签: vba excel loops date format


【解决方案1】:

我会将其添加为答案,但这取决于您的单元格中的当前值是什么。

如果SrchRng 正在查看正确的单元格并且这些单元格只包含单词JanuaryFebruaryJanFeb,那么您可以使用DateValue 将该文本强制转换为真实日期.

从您的最后一条评论开始,例如,2018 年 7 月 14 日:

cel = DateValue(cel)
cel.NumberFormat = "mm"

在循环中使用此代码将值转换为显示为两位数月份的真实日期。
该单元格将包含值43295,即 Excel 中的 7 月 14 日(自 1900 年 1 月 1 日以来的天数)。

整个代码是:

Sub AccDec()

    Dim SrchRng As Range, cel As Range
    Dim NumRows As Long

    NumRows = Range("B13", Range("B13").End(xlDown)).Rows.Count

    Set SrchRng = Range(Cells(1, 13), Cells(NumRows, 15))

    MsgBox "Searching this range:  " & SrchRng.Address, vbOKOnly

    For Each cel In SrchRng
            cel = DateValue(cel)
            cel.NumberFormat = "mm"
    Next cel

End Sub

我添加了消息框,因为我认为它的范围不正确。此外,如果任何单元格没有可以转换为日期的值,则会出现Type Mismatch 错误。

【讨论】:

    猜你喜欢
    • 2017-11-02
    • 2013-07-20
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多