подстрока переменной длины строки с определенным началом и концом

#excel #string #excel-formula

#excel #строка #excel-формула

Вопрос:

Я должен извлечь подстроку, которая всегда имеет переменную длину, из середины строки (ячейки) в Excel.

Критерием является:

  • она всегда начинается с определенного набора символов (в этом примере «Ингредиенты:»)
  • она всегда заканчивается определенным набором символов (в этом примере «Таблица информации о питании»).

Длина может быть любой от 1 слова примерно до 500.

Это может быть формула Excel или даже VBA. Но я полный новичок в VBA, поэтому, пожалуйста, дайте конкретный совет.

Мой пример содержимого ячейки выглядит следующим образом:

     We could tell you that our Beanz are hard to beat. That they're brimming with deliciously rich, tomatoey flavour. But you already know that. Because you know what Beanz Meanz...

Heinz baked beans don't just taste great, but are nutritious too; high in fibre, high in protein and low in fat, as well as contributing to 1 of your 5 a day. Packed full of quality ingredients... it has to be Heinz. Love our Heinz Beanz as much as we do? Discover the rest of our range, including organic and no added sugar varieties!

Heinz Beanz come in a variety of multipacks, perfect for when you need to feed the whole family!

1 of your 5 a day.
No artificial colours, flavours or preservatives.
Suitable for Vegetarians and Vegans.
Naturally high in protein and fibre.
Gluten free and low in fat.

Ingredients: 
Beans (51%), Tomatoes (34%), GRAIN, Water, Sugar, Spirit Vinegar, Modified Corn Flour, Salt, Spice Extracts, Herb Extract. 

Suitable for Vegetarians. Free From Artificial Flavours. 
Empty unused contents into a suitable covered container. Keep refrigerated and use within 2 days. 

 
Table of Nutritional Information
    Per 100g    Per 1/2 can %RI*
Energy  329kJ   682kJ   -
78kcal  162kcal 8%
Fat     0.2g    0.4g    1%
- of which saturates    <0.1g   <0.1g   <1%
Carbohydrate    12.5g   25.9g   10%
- of which sugars   4.7g    9.8g    11%
Fibre   3.7g    7.7g    -
Protein     4.7g    9.7g    19%
Salt    0.6g    1.2g    21%
*RI per serving. Reference intake of an average adult (8400kJ/2000kcal)
  

Желаемый результат будет:

     Ingredients: 
Beans (51%), Tomatoes (34%), GRAIN, Water, Sugar, Spirit Vinegar, Modified Corn Flour, Salt, Spice Extracts, Herb Extract. 

Suitable for Vegetarians. Free From Artificial Flavours. 
Empty unused contents into a suitable covered container. Keep refrigerated and use within 2 days.
  

Ответ №1:

Допустим, ваша примерная ячейка равна A1, затем в другой ячейке вы можете сделать:

 =TRIM(MID(A1;SEARCH("Ingredients:";A1);SEARCH("Table of Nutritional Information";A1)-SEARCH("Ingredients:";A1)))
  

Вероятно, вам придется немного адаптироваться, чтобы избавиться от конечных разрывов.

введите описание изображения здесь

Вот как это работает:

  1. SEARCH("Ingredients:";A1) найдет позицию первого совпадения текста Ingredientes . возвращает число. Это будет отправной точкой для извлечения текста с помощью MID.
  2. SEARCH("Table of Nutritional Information";A1) то же, что и раньше, но с текстом Table of Nutritional Information . Итак, это конечная точка извлечения текста
  3. Шаг 2 — Шаг 1 вернет, сколько символов вы хотите извлечь, начиная с шага 1.
  4. TRIM просто удалит лишние пробелы, если они будут добавлены. Обратите внимание, что дополнительные пробелы не совпадают с линиями разрыва.

В этом случае, чтобы избавиться от конечных СТРОК, просто сделайте дополнительные -5:

 =TRIM(MID(A1;SEARCH("Ingredients:";A1);SEARCH("Table of Nutritional Information";A1)-5-SEARCH("Ingredients:";A1)))
  

Это вернет точный результат, который вы хотите, но не знаете, будет ли он работать со всеми вашими входными данными.

Ответ №2:

Предположим, что исходные данные размещены в столбце A, поместите заголовок критериев «Ингредиенты» и «Таблица информации о питании» в B1 и C1 .

Затем,

В B2 , формула скопирована вниз :

 =MID(LEFT($A2,FIND(C$1,$A2)-1),FIND(B$1,$A2) LEN(B$1) 1,599)
  

введите описание изображения здесь