如何使用 vba 在 excel 中将 1 月到 8 月的单元格拆分为 1 月、2 月、3 月、4 月、6 月、7 月、8 月

如何使用 vba 在 excel 中将 1 月到 8 月的单元格拆分为 1 月、2 月、3 月、4 月、6 月、7 月、8 月

我有大约 1000 条记录,其中单元格如下

Jan To Mar
Aug To Dec
Mar, Oct To Dec
Nov
OCT,NOV,DEC

像这样,我有 1000 条区分大小写的记录,我想将单元格范围转换为 Jan、Feb、Mar,就像这样。有人可以帮我吗

答案1

你写我希望将单元格范围转换为 Jan, Feb, Mar

为此,您可以使用以下 VBA 函数:

Option Explicit
Function expandMonths(S As String) As String
    Dim V As Variant, W As Variant, X As Variant
    Dim dD As Object
    Dim I As Long
    Dim DT1 As Long, DT2 As Long
    Dim arrMonths() As String

Set dD = CreateObject("Scripting.Dictionary")
'Is there a range
V = Split(S, ",")
For Each W In V

        'Is it a range
        If InStr(1, Trim(W), " to ", vbTextCompare) = 0 Then

            'No it is not
            DT1 = Month(DateValue(Trim(W) & " 1, 2000"))
            dD.Add DT1, DT1
        Else

            'Yes, it is a range
            X = Split(Trim(W))
            DT1 = Month(DateValue(X(0) & " 1, 2000"))
            DT2 = Month(DateValue(X(2) & " 1, 2000"))
            For I = DT1 To DT2
                dD.Add I, I
            Next I
        End If
Next W

ReDim arrMonths(1 To dD.Count)
I = 0
For Each V In dD.keys
    I = I + 1

    'Convert month numbers to text
    arrMonths(I) = Format(DateSerial(2000, V, 1), "mmm")
Next V

expandMonths = Join(arrMonths, ", ")

End Function
  • 将月份数字收集到字典中
    • Month使用针对构造日期的函数来创建月份数字
  • 该函数首先用逗号分割字符串。
  • to如果任何一个分割中 有,那么它代表一个范围
    • 将其除以space并使用第一个和最后一个条目构建范围
  • 将结果重新组合以创建所需的字符串结果

在此处输入图片描述

答案2

要解决此问题,您需要按照以下步骤操作:

情况 1:

在此处输入图片描述

  • 01/01/2019在单元格H97&03/01/2019中填写单元格H98
  • =$H$97在单元格中写入I97

注意:mmm在单元格上应用自定义单元格格式H97I97& H98

  • 在单元格中输入此公式I98并最好填写接下来的 11 行。

    =TEXT(IF(DATE(YEAR($H$97),MONTH($H$97)+ROW(A1),DAY($H$98))>$H$98,"",DATE(YEAR($I$97),MONTH($I97)+1,DAY($I$97))),"mmm")

注意:

  • 现在,为了设置其他月份,请继续改变&中的Start&值。End DateH97H98

情况 2:

在此处输入图片描述

根据需要调整整个练习的单元格引用。

相关内容