比如2014-1-26到2014-9-25,就会输出1,2,3,4,5,6,7,8共8个月的字符;如果是跨年2013-9-13到2015.3.12就输出a9,a10,a11,a12,1,2,3,4,5,6,7,8,9,10,11,12,b1,b2共18个月的字符
比如2014-1-26到2014-3-25有两个月所以我需要显示1,2或2,3而不是1,2,3,如果是2014-1-1到2014-3-31就有3个月就可以显示1,2,3
追答那是我理解错了,反而搞复杂了,请试试这个公式:
=MID("a01,a02,a03,a04,a05,a06,a07,a08,a09,a10,a11,a12,001,002,003,004,005,006,007,008,009,010,011,012,b01,b02,b03,b04,b05,b06,b07,b08,b09,b10,b11,b12",MONTH(A1)*4-3+(YEAR(B1)=YEAR(A1))*48,DATEDIF(A1, B1,"M")*4)
很完美,另外当有两列数据时A列为较小的日期,B列为较大日期,如何批量输出呢?还有如何不跨年的时候输出2,3,4,5,6,7,8,9呢?跨年时输出a11,a12,1,2,3,4,5,6,7,8,9,10,11,12,b1,b2,b3呢?
追答Sub 日期()
For i = 1 To [a65536].End(xlUp).Row
d1 = Format(Cells(i, 1), "yy")
d2 = Format(Cells(i, 2), "yy")
dd1 = CInt(Format(Cells(i, 2), "mm"))
dd2 = CInt(Format(Cells(i, 1), "mm"))
h = 1
ReDim arr(1 To 24)
If d1 = d2 Then
For x = dd2 To dd1
arr(h) = x
h = h + x
Next x
ElseIf d2 > d1 Then
For x = dd2 To 12
arr(h) = "a" & x
h = h + 1
Next x
For x = 1 To dd1
arr(h) = "b" & x
h = h + 1
Next x
End If
arr1 = Join(arr)
arr1 = Application.Trim(arr1)
brr = Split(arr1)
arr1 = Join(brr, ",")
Cells(i, 3) = arr1
Next i
End Sub
很完美,但是比如2014-1-26到2014-3-25有两个月所以我需要显示1,2或2,3而不是1,2,3,如果是2014-1-1到2014-3-31就有3个月就可以显示1,2,3
追答Sub 日期()
For i = 1 To [a65536].End(xlUp).Row
y1 = Format(Cells(i, 1), "yy")
y2 = Format(Cells(i, 2), "yy")
m1 = CInt(Format(Cells(i, 1), "mm"))
m2 = CInt(Format(Cells(i, 2), "mm"))
d1 = CInt(Format(Cells(i, 1), "dd"))
d2 = CInt(Format(Cells(i, 2), "dd"))
If d2 y1 Then
For x = m1 To 12
arr(h) = "a" & x
h = h + 1
Next x
For x = 1 To m2
arr(h) = "b" & x
h = h + 1
Next x
End If
arr1 = Join(arr)
arr1 = Application.Trim(arr1)
brr = Split(arr1)
arr1 = Join(brr, ",")
Cells(i, 3) = arr1
Next i
End Sub