2014-12-12 1 views
1

У меня есть таблица Excel с несколькими столбцами для каждого заголовка. Я хотел бы свернуть их в одну колонку. По какой-то причине пользователь распространил то, что должно было пройти в один столбец по пять. Учитывая это:Collapse Empty Columns Around Date Column in 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 

Я попытался это, но она создает поворот даты века для каждой из пустых столбцов. ТЕКСТ (A1, "m/d/yyyy") & ТЕКСТ (B1, "m/d/yyyy"). , ,

Как я могу избежать этого? Или есть лучший способ?

+0

A два отличающихся друг от друга метода. Один из них значительно проще в вашем случае. Не забудьте принять, если они будут работать на вас. – Chrismas007

+0

Конечно, если вам нужно удалить пустые столбцы с помощью vba, это совершенно отдельная проблема. – Chrismas007

ответ

2

Из формулы Excel можно добавить даты, предполагая, что другие ваши 4 клетки в строке действительно пусто, вы можете просто написать эту формулу:

=Sum(B1:B5) 
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