2013-05-24 5 views
1

Используя VBA, я импортирую файл csv и помещаю кучу данных в несколько столбцов.Excel, похоже, меняет формат только некоторых столбцов

Одна из этих столбцов имеет дату и время. Как мне нужно, чтобы иметь возможность использовать только часть «время» эти клетки, я стараюсь, чтобы преобразовать весь столбец время с помощью (и только о любой другой вариации)

Cells(x.y).EntireColumn.NumberFormat = "hh:mm:ss" 
or 
Range("C1").NumberFormat = "hh:mm:ss"  
Range("C1").EntireColumn.NumberFormat = "hh:mm:ss" 

Однако это не преобразовывает весь столбец. Я пробовал все возможные другие способы выбора всего столбца и его изменения (через VB), однако все еще остается только часть.

Если я дважды нажимаю на эти неотвержденные ячейки и нажимаю Enter, они изменяются в правильном формате. Я понимаю, что это общая проблема, относящаяся к вычислениям, но моя книга настроена на автоматические вычисления, и я попытался установить это в VB тоже. Это ничего не меняет.

Единственный шаблон, который я могу найти, заключается в том, что ячейки перестают конвертироваться, когда День достигает двухзначных цифр. Например:

Column C

01/05/2013 7:28:56 
03/05/2013 13:24:53 
07/05/2013 20:13:24 
09/05/2013 8:29:22 
12/05/2013 9:28:56 
15/05/2013 21:14:25 
17/05/2013 7:28:56 

становится:

Column C

7:28:56 
13:24:53 
20:13:24 
8:29:22 
12/05/2013 9:28:56 
15/05/2013 21:14:25 
17/05/2013 7:28:56 

В строке формул вверх по верхней для каждой ячейки он все еще показывает всю дату и Время для всех ячеек, не уверен, связано ли это, но d кажется, не имеет значения с точки зрения вычислений, которые я должен выполнять с использованием Времени.

По сути, я должен взять время для ячейки в столбце C и времени из другой ячейки (также в формате даты/времени) и проверить разницу. После некоторых исследований я решил, что лучший способ - преобразовать все ячейки в формат времени, а затем выполнить мои вычисления.

В качестве альтернативы я мог бы попытаться преобразовать столбец в текст и использовать функцию разделения (используя пробел как разделитель) и вытащить тайм-аут, но у меня тоже возникли проблемы с этим, так как снова пытаюсь преобразовать весь столбец для текста останавливается двойная цифра для даты.

Спасибо за то, что прочитали все это, любые мысли и помощь будут оценены.

Edit: Реализованная часть моего синтаксиса было неправильно в моем посте, это было правильно, однако в моем макро

другого редактирования: Я думаю, что это определенно что-то делать с форматом дата ... Я просто понял, что до того, как я их отформатировал, даты: m/dd/yyyy, а затем, когда он доходит до фактических двухзначных дней, он изменяется на dd/mm/yyyy, и это когда проблема возникает ...

+0

Является ли формат 'dd/MM/yyyy' распознанным в строке формул для ячеек с одноразрядными днями? Похоже, что Excel может подумать, что это что-то вроде 'MM/dd/yyyy'. Проверьте свои региональные настройки, вам может потребоваться сначала настроить даты. –

+0

Вы можете быть правы, я забыл упомянуть, что на конвертированных ячейках в строке формул он изменил дни/месяцы. – user2408171

+0

Хммм я проверил региональные настройки Windows - все выглядит нормально. короткий формат установлен на dd/mm/yyyy – user2408171

ответ

1

Для того, чтобы избежать путаницы, а также дата всегда кажется, занимают ту же ширину, рекомендую

1) импортировать этот столбец как текст

2) затем по всей колонне

For Each C In Range("A:A").Cells 
    If C <> "" Then 
     ' .... 
    End If 
Next C 

3) вырезать ведущие 11 позиций, например C = Mid(C, 11, 99)

4) преобразует оставшуюся строку в определенное время, например. C = CDate(C) (... да он работает со временем, а также, потому что время является дробной частью даты)

В качестве альтернативы вы можете захотеть, чтобы захватить часть даты и привести его в форму, тоже. См. here для некоторых идей с использованием формул листа.

+0

Спасибо, ребята! Да, это определенно помогло импортировать эти ячейки в виде строки. Сейчас все выглядит нормально. Спасибо за ваше время! – user2408171

Смежные вопросы