Страницы: 1
RSS
Быстрый аналог инструмента "Текст по столбцам" в виде макроса или формулы, Помочь преобразовать данные
 
Добрый день!

Возник срочный вопрос
Во вложении маленький пример таблицы с данными. В ней указана продолжительность действия по различным критериям в определенную дату.
Вопрос такой:
Значения в ячейках не подвергаются никаким формулам, хотя посчитать нужно. Нашел решение проблемы благодаря встроенной функции "Текст по столбцам". После нее данные начинают распознаваться в формулах.
Однако, данных очень много, каждый столбец - это отдельная дата.
Есть ли какой-то способ быстрее это проделать с помощью макроса или какой-то особенной вставки?
 
Вариант формулами
Код
=ЗНАЧЕН(ЛЕВСИМВ(B4;ДЛСТР(B4)-ДЛСТР(":00:00")))/24+ЗНАЧЕН(ЛЕВСИМВ(ПРАВСИМВ(B4;5);2))/24/60+ЗНАЧЕН(ПРАВСИМВ(B4;2))/60/60
Формат ячейки нужно установить на Время
Код
[ч]:мм:сс;@
 
Цитата
Pavel Dickenson написал:
Текст по столбцам, но не совсем,
Что не совсем, не совсем текст или не совсем по столбцам?
По вопросам из тем форума, личку не читаю.
 
Еще вариант, но не совпадает с посчитанными Вами
=SUM(IF(TRIM(B$5:B$23)<>"";--TRIM(B$5:B$23);0))
 
Цитата
написал:
Вариант формулами
Не работает к сожалению - она ставит совсем другие данные. Хотя должны быть именно такие же значения как и в оригинальном столбце.
Изменено: Pavel Dickenson - 26.05.2022 14:50:24
 
Цитата
написал:
Что не совсем, не совсем текст или не совсем по столбцам?
Просто указал, что функция текст по столбцам работает, однако, очень долго перебирать каждый столбец и преобразовывать его.
Даже макрорекордер быстро не справляется (записал последовательность действий на клавиатуре и запустил его с 10х скоростью) - все равно долго.
 
Цитата
написал:
Еще вариант, но не совпадает с посчитанными Вами
Он посчитал для одной ячейки.
Вижу что формула массива - но не понимаю как его применить ко всем ячейкам (мне нужно все ячейки поменять, а не только сумму).
При этом не понимаю, почему он не считает для соседних значений.
 
Цитата
написал:
Не работает к сожалению - она ставит совсем другие данные.
А Вы точно сообщение #2 до конца прочитали?
 
Цитата
Pavel Dickenson написал:
Он посчитал для одной ячейки
Оказалось Excel выдает ошибку в ячейке, если часов больше 9999. В первом столбце часов меньше, поэтому считает правильно.
 
Вариант макросом
Код
Sub DateFormatSelection()
    DateFormatRange Selection
End Sub

Sub DateFormatRange(rn As Range)
    On Error Resume Next
    Set rn = rn.SpecialCells(xlCellTypeConstants)
    On Error GoTo 0
    If Not rn Is Nothing Then
        Application.EnableEvents = False
        Dim Application_Calculation As Long
        Application_Calculation = Application.Calculation
        Application.Calculation = xlCalculationManual
        Dim cl As Range
        For Each cl In rn
            cl.NumberFormat = "[h]:mm:ss;@"
            cl.Value = cl.Value
        Next
        
        Application.EnableEvents = True
        Application.Calculation = Application_Calculation
    End If
    
End Sub

Изменено: МатросНаЗебре - 26.05.2022 15:24:34 (Application...)
 
Код
'v2
Sub DateFormatSelection()
    DateFormatRange Selection
End Sub

Sub DateFormatRange(rn As Range)
    On Error Resume Next
    Set rn = rn.SpecialCells(xlCellTypeConstants)
    On Error GoTo 0
    If Not rn Is Nothing Then
        Application.EnableEvents = False
        Dim Application_Calculation As Long
        Application_Calculation = Application.Calculation
        Application.Calculation = xlCalculationManual
        Dim cl As Range
        Dim txt As String
        Dim vl As Double
        For Each cl In rn
            txt = cl.Value
            If Len(txt) > 5 Then
                vl = Val(Left(txt, Len(txt) - 5)) / 24
                vl = vl + Val(Left(Right(txt, 5), 2)) / 24 / 60
                vl = vl + Val(Right(txt, 2)) / 24 / 60 / 60
                
                cl.NumberFormat = "[h]:mm:ss;@"
                cl.Value = vl
            End If
        Next
        
        Application.EnableEvents = True
        Application.Calculation = Application_Calculation
    End If
    
End Sub
 
Код
=ТЕКСТ(СУММПРОИЗВ(ЛЕВБ(B5:B23&"0";ПОИСК(":";B5:B23&" :")-1)/24+(0&ПРАВБ(B5:B23;6)));"[ч]:мм:сс")
Изменено: _Boroda_ - 26.05.2022 15:51:46
Скажи мне, кудесник, любимец ба’гов...
 
Цитата
написал:
Вариант макросом
Отличный вариант!
Пока работает без нареканий!
Спасибо огромное!
Страницы: 1
Наверх