在Excel中折叠日期列周围的空列

时间:2014-12-12 15:28:11

标签: excel vba excel-vba excel-formula

我有一个excel电子表格,每个标题包含多列。我想将它们折叠成一列。出于某种原因,用户将应该分成五列的内容分散到一列中。 鉴于此:

+------------+-----------+-----------+-----------+-----------+--+
|            |           |    DOB    |           |           |  |
+------------+-----------+-----------+-----------+-----------+--+
|            |           | 1/7/1980  |           |           |  |
|            |           |           |           | 1/30/1947 |  |
|            |           |           | 3/12/1948 |           |  |
|            |           | 1/26/1941 |           |           |  |
|            | 6/26/1951 |           |           |           |  |
| 12/29/1974 |           |           |           |           |  |
+------------+-----------+-----------+-----------+-----------+--+

我想要这个:

DOB
1/7/1980
1/30/1947
3/12/1948
1/26/1941
6/26/1951
12/29/1974

我尝试了这个,但它为每个空白列创建了世纪日期。 TEXT(A1,“m / d / yyyy”)& TEXT(B1,“m / d / yyyy”)。 。

我该如何避免?或者有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

因为Excel公式可以添加日期,假设行中的其他4个单元格真的是空白,您可以写下这个公式:

=Sum(B1:B5)

答案 1 :(得分:0)

发现这个非常酷的自定义功能,可以通过Excel VBA function to concatenate non-empty cells with a user defined seperator轻松组合整个范围:

=ConcatenateRange(B1:B5,"")

使用自定义功能:

Function ConcatenateRange(ByVal cell_range As Range, _
                    Optional ByVal seperator As String) As String

Dim cell As Range
Dim newString As String
Dim cellArray As Variant
Dim i As Long, j As Long

cellArray = cell_range.Value

For i = 1 To UBound(cellArray, 1)
    For j = 1 To UBound(cellArray, 2)
        If Len(cellArray(i, j)) <> 0 Then
            newString = newString & (seperator & cellArray(i, j))
        End If
    Next
Next

If Len(newString) <> 0 Then
    newString = Right$(newString, (Len(newString) - Len(seperator)))
End If

ConcatenateRange = newString

End Function