我有大约 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
在单元格上应用自定义单元格格式H97
,I97
& 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 Date
H97
H98
情况 2:
根据需要调整整个练习的单元格引用。