Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Как сделать текст датой, При сцеплении ячеек получаю данные в виде 01.02.2014 (текст) - как из этого сделать дату
 
День добрый
Такая ситуация делаю макрос для конвертации файлов в exel и застрял на одном моменте

есть 2-е ячейки
2014   --- пярвая ячейка данные
3---- вторая ячейка данные

с помощью формулы
Код
=СЦЕПИТЬ("01";".";ЕСЛИ(C1<10;СЦЕПИТЬ(0;C1);C1);".";B1)

получаю 01.03.2014   - то что мне надо но в ячейке храниться как текст  ( тоесть прижат к левому краю)  а мне нужно получить дату  как это сделать?
( на других листах была похожая ситуация но результат сохраняется как дата)
(менял формат ячейки после как скопировал данные , перед, не помогает)
 
=--СЦЕПИТЬ(...)
=--("01."&C1&"."&B1)
 
Если уж все равно макрос, то:
Код
dateserial([a1],[b1],"1")
Я сам - дурнее всякого примера! ...
 
Код
CDate(.Range("C1") & "." & .Range("B1"))
Изменено: kavaka08 - 31 Май 2017 12:20:42
 
vikttur ,
переделал формулу добавив &
Код
=СЦЕПИТЬ("01."&ЕСЛИ(C1<10;СЦЕПИТЬ(0;C1);C1)&"."&B1)

ничего не поменялось

забыл добавить в текстовой ячейке которую я получаю (прижата к левому краю) если двойным щелчкем открываю и нажимаю ENTER то ячейка сохраняется как дата и можно ее копировать все нормально
(только все так ячейки не проклацать их несколько тысяч)

сейчас буду разбираться с dateserial([a1],[b1],"1") - напишу что выйдет  
 
1)dateserial([a1],[b1],"1")
2)CDate(.Range("C1") & "." & .Range("B1"))

это в код макроса добавлять ? пишет нет такой команды CDATE
 

Вот кусок кода в котором добавляю формулу  расчитываю и результат формулы (значение) копирую в другую колонку

Код
 ActiveCell.FormulaR1C1 = _
        "=CONCATENATE(""01"",""."",IF(RC[-5]<10,CONCATENATE(0,RC[-5]),RC[-5]),""."",RC[-6])"
    'Selection.AutoFill Destination:=Range("H1:H1"), Type:=xlFillDefault
    Selection.AutoFill Destination:=Range("H1:H1" + CStr(k)), Type:=xlFillDefault
    
    CDate(.Range("C1") & "." & .Range("B1"))
    
    
    Columns("H:H").Select
    Selection.Copy
    Columns("I:I").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
        
    Columns("H:H").Select
    Selection.ClearContents
    Columns("I:I").Select
    Selection.Copy
    Columns("B:B").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Selection.NumberFormat = "m/d/yyyy"
    Columns("C:C").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlToLeft
    
    Columns("I:I").Select
    Selection.ClearContents

 
Цитата
Kyvaldenius написал:
это в код макроса добавлять ? пишет нет такой команды CDATE
https://msdn.microsoft.com/ru-ru/library/office/gg278896.aspx

Код
sheet.Range("A1")  = CDate(sheet.Range("C1") & "." & sheet.Range("B1"))
Если в ячейке C1 - 3, в B1 - 2014, то A1 будет 01.03.2014 в формате даты
Изменено: kavaka08 - 31 Май 2017 12:36:00
 
Argument not optional
Код
    NAC.Range("H1") = CDate(Sheet.Range("C1") & "." & Sheet.Range("B1")) 
так ?
Nac - если оставить Sheet то все равно ошибка
 
Run-time error '424': Object required
Код
 Sheet.Range("H1") = CDate(Sheet.Range("C1") & "." & Sheet.Range("B1"))
если так оставить тоже ошибка
 
ActiveSheet.Range("H1") = CDate(ActiveSheet.Range("C1") & "." & ActiveSheet.Range("B1"))  -- работает  спасибо



еще вопрос как узнать сколько строк заполнено  
 
Цитата
Kyvaldenius написал:
ничего не поменялось
- так ключевое и не поменяли :)
 
Цитата
Kyvaldenius написал:
еще вопрос как узнать сколько строк заполнено  
А какое отношение этот вопрос имеет к заявленной теме?
 
вопрос в продолжение
Код
ActiveSheet.Range("H1") = CDate(ActiveSheet.Range("C1") & "." & ActiveSheet.Range("B1"))  -- работает  но как сделать тоже самое для каждой строки 

когда делал формулой то
Код
 ActiveCell.FormulaR1C1 = _
        "=CDate(CONCATENATE(""01"",""."",IF(R[-1]C[-1]<10,CONCATENATE(0,R[-1]C[-1]),R[-1]C[-1]),""."",R[-1]C[-2]))"
           
    Selection.AutoFill Destination:=Range("H1:H1" + CStr(k)), Type:=xlFillDefault
вся колонка получалась заполнена данными , а сейчас заполнена только та ячейка которую указал в коде (H1)

может кто знает чтоб сделать это приведение к дате через формулу ?  
 
Вопросы
Цитата
в продолжение
задаются в новых темах с соответствующими названиями. Таковы Правила.
Я сам - дурнее всякого примера! ...
 
Цитата
Hugo написал: - так ключевое и не поменяли
не понял? что у vikttur ключевое...

Цитата
kuklp написал: задаются в новых темах с соответствующими названиями. Таковы Правила.
Так тема вроде не закончена
 
Перед Вашей СЦЕПИТЬ написать два минуса. Или применить формулу, показанную второй.

Цитата
Так тема вроде не закончена
Это в Вашей задаче вопросы объединены. На самом деле они совершенно разные. А тема создается для обсуждения конкретного вопроса. Можно и комплексом, но это уже в разделе платных заказов.
 
формула с --  помогла

как раз то что надо

Код
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate
k = ActiveCell.Row 'iiia? iineaaiae caiieiaiiie no?iee

 Range("K1").Select
p = Range("K1")
   ' ActiveCell.FormulaR1C1 = "=IF(ISBLANK(RC[-6]),CONCATENATE(""01.01.1753"",),CONCATENATE(IF(RC[-6]<10,CONCATENATE(0,RC[-6]),RC[-6]),""."",IF(RC[-5]<10,CONCATENATE(0,RC[-5]),RC[-5]),""."",CONCATENATE(20,RC[-4])))"
    
    ActiveCell.FormulaR1C1 = "=--CONCATENATE(""01"",""."",IF(RC[-8]<10,CONCATENATE(0,RC[-8]),RC[-8]),""."",RC[-9])"
    Selection.AutoFill Destination:=Range("K1:K1" + CStr(k)), Type:=xlFillDefault
    Columns("K:K").Select
    Selection.NumberFormat = "m/d/yyyy"
    
    
    Columns("K:K").Select
    Selection.Copy
    Columns("L:L").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        
        
    Columns("K:K").Select
    Selection.ClearContents
    Columns("L:L").Select
    Selection.Copy
    Columns("B:B").Select
    ActiveSheet.Paste
    Selection.NumberFormat = "m/d/yyyy"
    Columns("C:C").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlToLeft
    
    Columns("L:L").Select
    Selection.ClearContents
    
    Columns("K:K").Select
    Selection.ClearContents
 
Есть еще такой вариант: =ДАТА(B1;C1;1)
Страницы: 1
Читают тему (гостей: 1)
Наверх