Excel - поиск списка подстрок в больших строках

408
DimitrisX

Я боролся со следующим; может быть немного сложным.

У меня есть файл Excel, который был экспортирован из приложения XML.

Лист 1 содержит ряды строк, подобные приведенным ниже. Каждая строка с нечетным номером содержит около 10 таких строк, но это может варьироваться. (Я ищу решение для заполнения строк с четными номерами; см. Ниже.)

Лист 2, колонка А, содержит ряд строк, как Measurement_1, Ref_Noи Maximum_Velocity, называемые атрибуты .

Мне нужно найти каждый из этих атрибутов в каждой ячейке каждой строки с нечетным номером на листе 1 и вставить каждый уникальный атрибут, который появляется в виде подстроки в этих строках, в новую строку ниже, каждый в своей отдельной ячейке.

Обратите внимание, что каждое значение в сгенерированных строках должно быть уникальным.

Есть ли какая-нибудь функция, регулярное выражение или сценарий VBA, которые могут это сделать? Я много искал на форумах и в других местах и ​​не смог сделать это сам.

Я надеюсь, что все это имеет смысл, но я с удовольствием объясню все что угодно!


1 ряд

Cell A1: <ref attrid="Measurement_1" equalsign="=" includeattrname="false" resolveto="valueandunit" separator=""><ref attrid="Measurement_1" equalsign="=" includeattrname="false" resolveto="valueandunit" separator=" - "></ref></ref>  Cell B1: "<ref attrid="Ref_No" equalsign="=" includeattrname="false" resolveto="valueandunit" separator=""><ref attrid="Unit" equalsign="=" includeattrname="false" resolveto="valueandunit" separator=" "><ref attrid="Vector" equalsign="=" includeattrname="false" resolveto="value" separator=" (Dia)"><ref attrid="Object_Diameter" equalsign="=" includeattrname="false" resolveto="unit" separator=""><ref attrid="Thread_Size" equalsign="=" includeattrname="false" resolveto="valueandunit" separator=","><ref attrid="Object_Length" equalsign="=" includeattrname="false" resolveto="value" separator=" "><ref attrid="Object_Length" equalsign="=" includeattrname="false" resolveto="value" separator=" of ">"  Cell C1: CONCATENATE("This ", LOWER(VAL("Device_Type")),F(AND(EXACT(VAL("Max_Temperature_Range"),("")),EXACT(VAL("Min_Temperature_Range"),"")),".",CONCATENATE("appeared to operate safely from a minimum temperature of ", VAL("Min_Temperature_Range"),UNIT("Min_Temperature_Range")," to a maximum temperature of ", VAL("Max_Temperature_Range"),UNIT("Max_Temperature_Range"),"."))) 

Желаемый результат в строке 2 будет выглядеть так:

Cell A2:Measurement_1 Cell B2:Ref_No Cell C2:Object_Diameter Cell D2:Object_Length Cell E2:Device_Type Cell F2:Max_Temperature_Range Cell G2:Min_Temperature_Range 
0
(0) +1 за занижение месяца: «может быть немного сложным». (1) Кажется, что структура ячеек нечетных строк - красная сельдь. Если A17 содержит «как», «C17» содержит «сейчас», «E17» содержит «коричневый», а «Q17» содержит «корову», вы хотите, чтобы «A18` =« как »,` B18` = «сейчас» ”,` C18` = “коричневый” и `D18` =“ корова ”- точно так же, как если бы` F17` содержал слова “как”, “сейчас”, “коричневые”, *** и *** “корова” ». Правильно? … (Продолжение) Scott 8 лет назад 0
(Продолжение)… (2) Почему вы не хотите, чтобы ваш вывод содержал «Unit» и «Vector», как в ответе Майка? Это потому, что их нет в «Листе 2! Колонка А»? Если это так, вы должны были предоставить нам этот (полный) столбец как часть примера. (3) Требуется ли, чтобы результаты в строке 42 были в порядке первого появления в строке 41, или это нормально, если они в порядке «Лист 2! Столбец А»? (4) Какое дело в том, что `B1` начинается и заканчивается кавычками, а` A1` нет? Должны ли мы просто игнорировать это? … (Продолжение) Scott 8 лет назад 0
(Продолжение)… (5) Если строка с нечетным номером содержит только «Ref_No», это «считается» или должно быть `attrid =" Ref_No "`? - или `` attrid = "Ref_No" ``, с пробелами до и после? Как насчет `attrid = Ref_No` (без кавычек)? (6) Просто из любопытства, это "attrid" или "attrib"? (7) Какое дело с `C1`? Это еще одна красная сельдь - шумовая запись, которую нужно игнорировать - или есть вероятность, что подобная строка может содержать подстроку, которую нужно найти? … (Продолжение) Scott 8 лет назад 0
(Продолжение)… (8) Вы показали, что `A1` содержит два экземпляра` attrid = "Measurement_1" `. Я предполагаю, что, даже если `A1` содержал один, а` D1` содержал другой, вы бы хотели, чтобы `Measurement_1` сообщалось только один раз в строке 2. Но что произойдет, если строка 83 также содержит` attrid = "Measurement_1" `? Вы хотите, чтобы `Measurement_1` сообщалось в строке 84 тогда? (00) Пожалуйста, не отвечайте в комментариях; [отредактируйте] ваш вопрос, чтобы сделать его более понятным. Scott 8 лет назад 0

1 ответ на вопрос

0
Mike Honey

Your XML strings look odd - lots of incomplete tags?

Anway I would start from the XML file and load it using the Power Query Add-In. This has a specific "From XML" handler and you can easily shape the data along the way using the Power Query commands.

Here's an example I built using an edited version of your XML content (I added a root element and closing tags to make it a valid XML file).

Power Query - from XML file example

The only action that seemed necessary to achieve what you want was to select the Attribute:attrid column and choose Remove Columns / Remove Other Columns.

You can see the result in the background - an Excel table. Any time the XML file changes, you just hit Refresh to re-run the Power Query.

Спасибо за ответ, к сожалению, я не могу установить надстройки в своей организации. Любые идеи, которые не требуют использования надстроек? Кроме того, я не осознавал, что Excel может действительно «понимать» XML; Я скорее думал, что это будет процесс поиска, поэтому я не обращал внимания на синтаксис при копировании и вставке. DimitrisX 8 лет назад 0

Похожие вопросы