Страницы: 1
RSS
Вставка и изменение строк по условию в excel
 
Добрый день! Есть такая проблема - дана строка таблицы из трех столбцов, например:

Электрические параметры Частота 20 Гц
Электрические параметры Ток 1.5 А
Электрические параметры Мощность 100 Вт
Общие параметры Размер 100 см
Общие параметры Вес 5 кг


Можно ли формулами excel без макросов (если без них нельзя, то хоть с ними) сделать так, чтобы для всех строк, у которых есть ячейка "Электрические параметры" и справа от нее ячейка "Мощность", выполнялась следующая операция — на X строк выше (допустим, на 2 строки) вставлялась новая строка с ячейками:
Параметры фильтрации ----- Мощность (AES) ----- 100 Вт

То есть чтобы получалось вот так:
Параметры фильтрации Мощность (AES) 100 Вт
Электрические параметры Частота 20 Гц
Электрические параметры Ток 1.5 А
Электрические параметры Мощность 100 Вт
Общие параметры Размер 100 см
Общие параметры Вес 5 кг
Изменено: Вова Исаев - 16.01.2013 14:54:42
 
Точно, есть проблема. И не у Вас - у нас: нужно создать книгу, внести в нее данные, сверяясь с Вашим сообщением...
 
Вы очень остроумны, но если вас смущает мой слишком запутанный вопрос, могу переформулировать.
Есть книга в 3 столбца с сотней строчек, при этом в книге периодически попадаются строчки с 3 ячейками вида:
А В С

Вопрос - как сделать так, чтобы над всеми этими строчками с ячейками А В С добавлялись новые строчки с ячейками D E F? Так понятнее?
 
Цитата
Вова Исаев пишет:
Вы очень остроумны, но если вас смущает мой слишком запутанный вопрос
Никто не острит: от Вас нужен пример в КНИГЕ (сотня строк не нужна - достаточно десятка), а не пересказ её содержимого.
 
За вас для вас таблицу в Excel никто рисовать не будет.
Цитата
Вова Исаев пишет:
Так понятнее?
 
Аааа, так бы и сказали, я думал гуру excel просто сразу скажут куда копать.
Книга во вложении.
Я там указал, что ЕСТЬ СЕЙЧАС и что ХОТЕЛОСЬ БЫ ПОЛУЧИТЬ
Буду очень благодарен любой помощи!
 
Подскажите хоть, как сделать поиск с заменой по НЕСКОЛЬКИМ ячейкам? Т.е. чтобы не как сейчас при Ctrl+H, где вводится значение одной ячейки, а чтобы можно было найти и заменить все пары ячеек
 
Ваш файл посмотреть не могу, т.к. у меня Excel2003
В прикрепленном файле запустите макрос Wstavka
 
Вот круто, спасибо! А я уже скачал и начал читать "Использование макросов в экселе" Роман С.  :D
Ну то есть вот тут я так понимаю ищется первый столбец с такими данными:
Код
Set iCell = .Find("Электрические параметры", LookIn:=xlFormulas, LookAt:=xlPart)

А потом при нахождении его, сдвигаемся на столбец вперед и ищем вторую часть данных:
Код
If iCell.Offset(, 1) = "Мощность" Then


Получается, что нельзя просто сразу найти пару ячеек, нужно делать как у вас - постепенно по столбцам смотреть?
 
Не вижу макрос в вашем файле. Слепой?  ;)
Изменено: Bomond - 17.01.2013 20:08:19
 
Пока делал уже появились ответы.. Мой вариант
 
Цитата
Павел пишет:
Пока делал уже появились ответы.. Мой вариант
А у вас чуть другой принцип, как я вижу - вы ищете по мощности, а потом уже дописываете нужную строку, только есть один нюанс - у вас нет зависимости от левой ячейки.
Возможно я плохо описал задачу, но, если обобщить, не каждая ячейка Мощность относится к Электрическим параметрам, соответственно ваше решение тоже работает, но оно допишет нужную строку и туда, куда дописывать не нужно.

Хотя вот сейчас проверяю первое решение (Kuzmich), там тоже есть этот момент, только чуть иначе.
Вот это
Find("Электрические параметры", LookIn:=xlFormulas, LookAt:=xlPart)
по всей видимости не точный поиск, потому что мне добавились строки даже над ячейкой:
Электрические параметры 2222
 
В первом столбце ищется строка "Электрические параметры" в диапазоне А3:А8,
если в столбце справа строка "Мощность". то номер этой строки
запоминается в массиве . После нахождения всех пар, происходит вставка
пустой строки с заданным содержимым Параметры фильтрации и т.д.
 
Вова Исаев
Если я правильно понял..

Принцип работы такой же как у Kuzmich. Только происходит разбитие на группы по столбцу ID
Изменено: Павел - 17.01.2013 20:22:58
 
Цитата
Вова Исаев пишет:
Find("Электрические параметры", LookIn:=xlFormulas, LookAt:=xlPart)

Да, но если изменить xlPart на xlWhole, то будет сравниваться ячейка целиком
 
Kuzmich, спасибо!

Павел, спасибо и вам!
>>Да, но если изменить xlPart на xlWhole, то будет сравниваться ячейка целиком
Точно! Только если просто так поменять, то ничего работать не будет, так как ячейки скопированы с пробелами в конце, а в макросе - без пробелов, но это понятно как исправить.
Изменено: Вова Исаев - 17.01.2013 23:20:23
 
Простенький вариант  :D
Спасибо
 
Через sql-запрос? Оригинально, но может сразу на ассемблере надо было? Или лучше вообще двоичным кодом, чтобы уж наверняка  :D
 
Вова Исаев,
Тут сложного ничего нет , все банально и просто.
Для меня иногда проще написать один нормальный запрос, чем писать 100 строк кода. ;)
Спасибо
 
Ну если ID уникален и нужная мощность всегда третья, то можно и так.
Изменено: sva - 18.01.2013 10:14:25
 
Цитата
sva пишет:
Ну если ID уникален и нужная мощность всегда третья, то можно и так.
Спасибо, ID конечно уникален, вот только мощность не всегда такая, а иногда это даже не "Мощность", а "мощность(aes)", или вообще "НЧ-усилитель (aes)", тут вообще не попадешь, и сработает только для идеальных условий. Хотя в принципе в каждой ячейке напротив мощности есть некая цифра и приставка "вт", но только тут опять же может быть " 100Вт" или "100 вт" или "100вт/50вт на канал"..
 
Ну, можно отталкиватся и от слов "вт" в ячейке. У вас между двумя ID строк одинаковое количество и слово "вт" может у одного ID встречатся более 1 раза?
 
Теоретически нет - но на практике это зависит от того, каким местом думал человек, заполняющий эти файлы (это куски базы магазина), вообще тут скорее всего правильно было бы брать первое встретившееся значение ВТ для каждого ID, потому что обычно первыми идут именно самые важные значения. А что для этого использовать я уже даже догадываюсь, по аналогии с пхп - регулярные выражения!
 
Тогда так.
 
Класс, но опять же - нельзя недооценивать человеческую изобретательность, в обновленном файле сегодня увидел вместо Вт английское W  :D
Страницы: 1
Читают тему
Наверх