Страницы: 1
RSS
Перевод даты из формата текстового значения в формат даты VBA
 
Здравствуйте!
Просьба помочь перевести дату из формата текстового значения в формат даты через VBA.
Текст по столбцам макросом не воспроизводится, функцию ДАТАЗНАЧ можно вставить только в соседний столбец.
А можно ли как-то в указанных столбцах изменить формат?
Спасибо.
 
А изменить формат ячеек почему нельзя?
 
Grr, формат меняю, но при этом дата остается текстовой, пока в каждую ячейку не зайду и не нажму Enter.
Если установить фильтр, то даты фильтруются не по месяцам, а по каждой отдельной дате, это значит текстовый формат установлен.
 
Цитата
stevie44 написал: формат меняю
До того, как - скопировать 1, выделить диапазон, спец вставка - умножить, выбрать краткий формат даты. Как вариант... ;)
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Я с датами замечал косяк, все сразу одним действием в макросе преобразовать не получалось, пришлось макросом проходить по всем ячейкам, или по всем элементам массива, затем выгружать (не помню точно как делал).
Изменено: Hugo - 16.11.2016 11:54:17
 
Z, Не совсем понял последовательность действий...
1) Выделить диапазон;
2) Скопировать
3) Специальная вставка, где выбираем "умножить"
4) Выбираем краткий формат даты.

Получается дата умножается на дату...
Где-то я не уловил...
Изменено: stevie44 - 16.11.2016 10:40:48
 
Пардон, туплю) 1 умножить на даты)))
Спасибо большое за помощь!))) Просто и эффективно!)
 
Я так и не понял последовательность. можете детально описать?  
 
Копировать пустую ячейку (в буфер обмена копируется ноль)
Выделить диапазон дат.
Спецвставка-Сложить-ОК (преобразование в число - даты суммируются с нулем)
Задать ячейкам формат даты
 
vikttur, есть еще проще способ, выделить столбцы, и сделать автозаменой точку на точку.
Однако все эти способы (текст по столбцам, с умножением на единицу, со сложением с нулем, с автозаменой точки на точку), к сожалению, VBA не обрабатывает.
Вот коды, записанные макрорекодером, которые с нулем и с единицей, если в приложенном выше файле их запустить, то макрос не перевод текст в дату.
Код
Sub Umnozhenie()
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "1"
    Selection.Copy
    Columns("A:B").Select
    Selection.SpecialCells(xlCellTypeConstants, 23).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Selection.NumberFormat = "m/d/yyyy"
End Sub

Код
Sub Slozhenie()    Range("C1").Select
    Selection.Copy
    Columns("A:B").Select
    Selection.SpecialCells(xlCellTypeConstants, 23).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Selection.NumberFormat = "m/d/yyyy"
End Sub
Изменено: stevie44 - 16.11.2016 12:21:12
 
Код
Public Sub www()
    With Intersect(ActiveSheet.UsedRange, [a:b])
        .NumberFormat = "m/d/yyyy"
        .HorizontalAlignment = xlGeneral
        .FormulaLocal = .FormulaLocal
    End With
End Sub
Я сам - дурнее всякого примера! ...
 
Как вариант, макрос задающий формат "дата" для выделенных ячеек, для удобства можно вынести макрос на панель быстрого доступа:
Код
Sub c_date()

Set range1 = Intersect(ActiveWindow.RangeSelection, ActiveSheet.UsedRange)
For Each cell In range1
If IsDate(cell.Value) Then cell.Value = CDate(cell.Value)
Next cell

End Sub
Изменено: Exelior - 16.11.2016 22:36:58
 
Мне удалось решить эту проблему в VBA через новую переменную с типом данных "Дата"

Dim cell As Range
Dim i As Date

   For Each cell In Range("...")
       i = cell.Value
       cell.Value = i
   Next cell
 
Может кому полезно будет Excel 2010 pro. Сработало по следующему коду без всяких циклов на весь выделенный диапазон в данном случае к колонке из умной таблицы


Код
Workbooks("Шаблон.xlsx").Sheets("проводки").Range("проводки[дата]").Select 
Selection.NumberFormat = "m/d/yyyy"
Selection.HorizontalAlignment = xlGeneral
Selection.FormulaLocal = Selection.FormulaLocal

З.Ы. Решение пол дня в инете искал. Нашел на вашем форуме. Ура
 
Цитата
Алексей Швидко: Selection.FormulaLocal = Selection.FormulaLocal
тестировали на диапазонах с более, чем одной областью?
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
написал:
тестировали на диапазонах с более, чем одной областью?
Пока нет! если интересно могу попробовать))))
 
Цитата
написал:
тестировали на диапазонах с более, чем одной областью?
Да все прекрасно работает две колонки "период" и" дата" не связанные то есть1 и 4 по счету!
вот пример кода
Код
Workbooks("Шаблон.xlsx").Sheets("проводки").Range("проводки[период],проводки[дата]").Select
Selection.NumberFormat = "m/d/yyyy"
Selection.HorizontalAlignment = xlGeneral
Selection.FormulaLocal = Selection.FormulaLocal
 
Можно просто выделить столбец и нажать "Данные" -> "Текст по столбцам" и готово =) Горячими клавишами очень удобно
Страницы: 1
Читают тему
Наверх