Страницы: 1
RSS
Умножение макросом данных определенных столбцов (без заголовков) умной таблицы на 1 (для перевода дата как текст в дату как дату (выгрузка 1С))
 
Уважаемые форумчане, доброго времени суток.
Столкнулся со следующей проблемой.
Есть умная таблица которая сделана на основе выгрузки из 1С, что привело к тому, что даты в таблице записаны как текст.
Сейчас пытаюсь написать макрос для перевода даты из текста в даты. Записал макрорекодером умножение (через специальную вставку) определенных столбцов умной таблице на 1, но в макросе прописываются диапазоны вида D2:D8.
Вопрос в следующим, так как данные динамические и количество строк умной таблицы может быть разное, то как можно использовать наименование определенных столбцов умной таблицы (без строки заголовка) для составления формулы умножения этих данных на 1.
Сейчас у меня получается следующий макрос:

Код
Range("V1").Select
    ActiveCell.FormulaR1C1 = "1"
    Range("V1").Select
    Selection.Copy
    Range("V1,D2:D8,H2:H8,I2:I8,K2:K8").Select
    Range("K2").Activate
    Range("V1,D2:D8,H2:H8,I2:I8,K2:K8,L2:L8,N2:N8,O2:O8").Select
    Range("O2").Activate
    Range("V1,D2:D8,H2:H8,I2:I8,K2:K8,L2:L8,N2:N8,O2:O8,Q2:Q8,R2:R8").Select
    Range("R2").Activate
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
        SkipBlanks:=False, Transpose:=False

Заранее спасибо!

Кто ясно мыслит, тот ясно излагает.
 
Приветствую.
Адреса диапазонов умной таблицы по имени можно вытаскивать в строку и потом использовать.
Например, вот так:
Код
Sub T()
    Debug.Print ActiveSheet.ListObjects("УмнаяТаблица1").ListColumns("Дата").DataBodyRange.Address
End Sub
Кому решение нужно - тот пример и рисует.
 
Пытливый, попробую
Кто ясно мыслит, тот ясно излагает.
 
На мой взгляд, проще циклом перебирать столбцы, и, если в имени столбца есть ДАТА, преобразовывать текстовые значения в дату. Например, так:
Код
Sub T()
    Dim lobjT As ListObject, objC As Range, lngI As Long
        Set lobjT = ActiveSheet.ListObjects("УмнаяТаблица1")
        For lngI = 1 To lobjT.ListColumns.Count
            If Not InStr(1, lobjT.ListColumns(lngI).Name, "Дата") = 0 Then
                For Each objC In lobjT.ListColumns(lngI).DataBodyRange
                    On Error Resume Next
                    objC = DateValue(objC.Value)
                Next
            End If
        Next lngI
End Sub
Кому решение нужно - тот пример и рисует.
 
Пытливый, в моем случае это идеальный вариант. Еще раз спасибо!
Изменено: Maximich - 06.12.2018 17:33:37
Кто ясно мыслит, тот ясно излагает.
Страницы: 1
Наверх