Страницы: 1
RSS
Заполнение пустых ячеек в строке значениями из нижних строк по условию.
 

Добрый вечер всем, кто не может остаться равнодушным!.

Прошу помочь на последнем этапе не до конца решенной задачи.

Файл в формате TXT с результатами определённой работы был вставлен в Excel

Из полученного массива в несколько тысяч строк с помощью формул выбраны только нужные для дальнейшего анализа параметры и значения (реальные значения изменены все совпадения случайны). Полученные результаты скопированы и вставлены как значения, после чего удалены пустые строки. Фрагмент полученного результата и фрагмент результата который должен быть получен представлен в файле.

Ниже строк со временем (2, 5 и т.д.) находятся значения, полученные в этот период времени (соответственно строки 3, 6, 8 и т.д.).

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

Строк много вручную всё это не реально сделать, а анализ надо провести. Плюс еще при попытке вручную переноса некоторых значений появляется предупреждение: «Здесь уже есть данные вы хотите заменить их?»

Если есть решение очень прошу помочь. Пользуюсь Excel 2016.

Заранее благодарю Всех неравнодушных профессионалов Excel.

 
может так ?
pq
Пришелец-прораб.
 
или так:
Код
Sub test()
For Each rw In ActiveSheet.UsedRange.Rows ' шагаем по строкам
    If rw.Cells(1).Value <> "" Then ' если в первой клетке что-то есть...
        Set rng = rw ' запомнили всю строку
    Else
        For Each cc In rw.Cells ' если же строка пустая - пробежались по клеткам
            If Not cc.Value = "" Then rng.Cells(cc.Column).Value = cc.Value ' и подняли непустые значения в запомненную строку
        Next
        rw.Cells(1).Clear 'в примере там какой-то мусор, клетка не Blank
    End If
Next
Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete ' удалили все оставшиеся пустышки одной строчкой
End Sub
Изменено: Alexcx - 03.07.2026 21:35:11 (дополнение)
 
AlienSx и Alexcx Ваш профессионализм не знает границ.
Огромное спасибо Вам за быстрый отклик и помощь.
Мне в мои 61 до этого уже не дорасти но всё равно что-то пытаюсь делать сам а с Вашей помощью сделаю ещё больше.
Всё работает идеально за небольшим исключением теряются дубликаты значений по столбцу КИР имеющиеся в одном и том же времени, но это уже не так страшно, не принципиально и можно не исправлять.
То, что получилось позволило ещё и отсортировать всё по времени так как в файле присутствовали данные полученные с двух разных устройств работающих одновременно.
С Power Query буду разбираться, так как ещё с ним не работал. С макросом получилось отсортировать по пустым ячейкам 133000 строк.
Тему можно считать закрытой.

Ещё раз огромное Вам СПАСИБО и земной поклон отзывчивым и неравнодушным профессионалам Excel.
Вам и Вашим семья всего самого наилучшего.
С глубоким уважением Сергей.
 
Сергей, если задача разовая можно такими "пассами"
1. В столбце "РЕЗУЛЬТАТ" в фильтре снять галку с "Ошибка"  \ Ок
2. Выделить диапазон этого столбца (выделить ячейку I2 и Ctrl+Shift+стрелка вниз)
3. Оставить выделенными видимые ячейки (Ctrl+G \ Выделить… \ только видимые ячейки \ Ок)
4. Del
5. Очистить фильтр
6 .Выделить диапазон таблицы (I2:U255)
7. Оставить выделенными пустые ячейки (Ctrl+G \ Выделить… \ пустые ячейки \ Ок)
8. Ввести в строку формул следующую формулу (или вставить заранее скопированную): =ЕСЛИ(И($A3="";U3<>"");U3;"")
9. Ctrl+Enter
10. Скопировать и вставить как значения полученный результат
11. Фильтр (например) по столбцу "ИНФ" , оставив галку только у "(Пустые)"
12. Удалить отфильтрованные строки
13. Очистить фильтр
15. Пишем на форум комментарии…

пс: Шаг 1-5 можно было бы пропустить, если бы в "РЕЗУЛЬТАТ" не было текста нулевой длины
псс: …можно сразу перейти к 15-у шагу)
 
ПавелW спасибо что откликнулись.
Раньше тоже делал всё вручную отсюда возникало много ошибок и приходилось переделывать раз за разом.
Когда достало уже всё применил формулы для вытаскивания нужных значений.
Дальше удалял пустые строки сдвигал по столбцам и т.д. всё разбегалось, опять достало всё.
Пришлось обратиться за помощью чтобы минимизировать человеческих фактор.
Задача не разовая, но и не ежедневная.

Спасибо за помощь всего Вам самого наилучшего.
 
Уважаемый Alexcx извините, что отвлекаю Вас прошу пояснить по Вашему макросу.
Взял регистрацию с другого устройства, там тоже файл TXT только форма записи другая.
Вставил в Excel разбил по столбцам вытащил с помощью формул нужное, удалил пустые строки (смотри файл), при применении  Вашего макроса теряется большая часть информации (вкладка результат). В примере всё можно вручную сделать в полном файле не всё так гладко по ступенькам.
Подскажите что поменять в макросе или вообще как быть с этим.

С глубоким уважениям Сергей.
 
Цитата
Сергей написал:
теряются дубликаты значений по столбцу КИР
по столбцу №8? Исправляем ошибку.
код

с источником из последнего сообщения (Источник_02 в файле) тоже сработает.
Изменено: AlienSx - 06.07.2026 11:14:34 (оптимизация)
Пришелец-прораб.
 
AlienSx большое спасибо за помощь.
Пробовал Ваш вариант с Power Query к сожалению ничего не получилось, хоть у меня Excel 2016 но видимо сам Power Query другой более старый чем Ваш поэтому выдаёт ошибку. Попробую найти что нибудь поновее и ещё раз попробовать.

Не перестаю благодарить Вас за Вашу отзывчивость.
Ещё раз спасибо, всего Вам самого хорошего.
С уважением Сергей.
 
Цитата
написал:
Вставил в Excel разбил по столбцам вытащил с помощью формул нужное, удалил пустые строки (смотри файл), при применении  Вашего макроса теряется большая часть информации (вкладка результат). В примере всё можно вручную сделать в полном файле не всё так гладко по ступенькам.Подскажите что поменять в макросе или вообще как быть с этим.

Прошу прощения за долгое молчание - небольшой отпуск, не до программирования.

Не самый оптимальный код, зато наглядно. Просто добавил цикл очистки внешне пустых ячеек:
Код
Sub test()

For Each cc In ActiveSheet.UsedRange.Cells ' после "текст по столбцам" остается много лишних пробелов
    If Trim(cc.Value) = "" Then cc.Clear ' все условно пустые клетки вычистили
Next

For Each rw In ActiveSheet.UsedRange.Rows ' шагаем по строкам
    If rw.Cells(1).Value <> "" Then ' если в первой клетке что-то есть...
        Set Rng = rw ' запомнили всю строку
    Else
        For Each cc In rw.Cells ' если же строка пустая - пробежались по клеткам
            If cc.Value <> "" Then Rng.Cells(cc.Column).Value = cc.Value ' и подняли непустые значения в запомненную строку
        Next
'        rw.Cells(1).Clear 'в примере там какой-то мусор, клетка не Blank   ' уже не нужно, очистили ранее
    End If
Next

Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete ' удалили все оставшиеся пустышки одной строчкой

End Sub
Проверьте, возможно угадал с решением. Если же нет - а давайте пример исходного TXT? Коллегиально сочиним универсальный макрос (парсер), который будет и по столбцам бить, и нужные вычисления выполнять.
Изменено: Alexcx - 07.07.2026 19:48:05
 
 Alexcx спасибо Вам, что ответили.
Сам только что увидел Ваше сообщение думал, что ответа не будет.
Обязательно попробую и если успею отпишусь, сам в отпуск уезжаю.
К сожалению первоисточник выложить наверное не получится так как в нём имеется конфиденциальная информация не подлежащая...
Да и много там чего лишнего, что для анализа не нужно, это надо описывать все маркеры. Вообщем как-то так.

Ещё раз спасибо за помощь. Всего Вам самого хорошего.
 
 Alexcx большое Вам спасибо за правку макроса.
Проверил на разных регистрациях всё в первом приближении работает.
Более подробно по объективным причинам проверю позднее.

Ещё раз Огромное Вам спасибо за помощь и отзывчивость.
Всего Вам самого наилучшего и хорошего.

Благодарю за всё с уважением Сергей.
Страницы: 1
Читают тему
Наверх