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

У меня есть это (в одном столбце):

             Column A
Perdas com variações cambiais, líquidas 7 21.919.104 1.841,496
Perdas em ativos financeiros, líquidas 18 2.014.467 3.921.932
Perdas em empreendimentos conjuntos 30 2.185.679 3.011.998
Ganhos em empresas associadas, líquidos 33 (442.783.587) (210.273.584)

... и мне нужно иметь 4 столбца (один для текста, а другой 3 для числовых значений:

             Column A                     Column B    Column C        Column D
Perdas com variações cambiais, líquidas       7      21.919.104           1.841,496
Perdas em ativos financeiros, líquidas       18       2.014.467       3.921.932
Perdas em empreendimentos conjuntos          30       2.185.679       3.011.998
Ganhos em empresas associadas, líquidos      33    (442.783.587)   (210.273.584)

2 ответа2

1

Вот решение с некоторыми гигантскими формулами, но нет никаких вспомогательных столбцов для беспокойства. Предполагая, что ваши данные находятся в диапазоне A1:A4 , это формулы для B1:F1 . Скопируйте / вставьте и перетащите их вниз.

Ключевой момент: это предполагает, что ваши данные соответствуют формату примера. Если в исходных данных меньше 3 пробелов, это приведет к ошибке. Вы указали, что это был случай в вопросе, так что я не ожидаю никаких проблем.

Ключевой момент: это предполагает, что тильда ~ не появляется в вашем тексте. Если это так, выберите другой отдельный символ, который не делает. Труба | это общий пример.

B1 =LEN($A1)-LEN(SUBSTITUTE($A1," ",""))
C1 =TRIM(LEFT($A1,FIND("~",SUBSTITUTE($A1," ","~",$B1-2))))
D1 =LEFT(TRIM(RIGHT($A1,LEN($A1)-FIND("~",SUBSTITUTE($A1," ","~",$B1-2)))),FIND(" ",TRIM(RIGHT($A1,LEN($A1)-FIND("~",SUBSTITUTE($A1," ","~",$B1-2)))))-1)
E1 =LEFT(TRIM(RIGHT($A1,LEN($A1)-FIND("~",SUBSTITUTE($A1," ","~",$B1-1)))),FIND(" ",TRIM(RIGHT($A1,LEN($A1)-FIND("~",SUBSTITUTE($A1," ","~",$B1-1)))))-1)
F1 =TRIM(RIGHT($A1,LEN($A1)-FIND("~",SUBSTITUTE($A1," ","~",$B1))))
0

Вот метод, который требует кучу «вспомогательных столбцов».  Выберите столбец, который находится вне пути; например, AA или Sheet2!A (я предполагаю, что вы выбрали AA), и введите это

=IFERROR(FIND(" ", $A1), "")

в клетку AA1 .  Это находит положение символа в ячейке A1 первого пробела.  Если его нет, FIND() возвращает ошибку, а IFERROR() заменяет ошибку пустой строкой.  Затем введите

=IFERROR(FIND(" ", $A1, AA1+1), "")

в клетку AB1 .  (Обратите внимание, что у A есть $ а у AA нет.)  Он находит позицию символа в ячейке A1 второго пробела (т.е. первый после того, который был найден в ячейке AA1).  Опять же, коды ошибок заменяются пустыми ячейками.  Перетащите это вправо, насколько это необходимо.  (Например, если вы не ожидаете, что когда-либо будет более 24 слов фактического текста, то у вас будет максимум 27 «слов», считая три числа.  Поэтому будет максимум 26 пробелов, поэтому перетаскивания на AZ1 должно быть достаточно.)  Если вы перетащите AB1 в AZ1 , тогда AZ1 должен содержать

=IFERROR(FIND(" ", $A1, AY1+1), "")

Затем (при условии, что вы заполнили диапазон AA1:AZ1 , выше), введите следующее в X1 , Y1 и Z1:

  • X1 - =LARGE(AA1:AZ1,3)
  • Y1 - =LARGE(AA1:AZ1,2)
  • Z1 - =LARGE(AA1:AZ1,1)

Они становятся местами от третьего до последнего, второго до последнего и последнего пробела в A1 .  Например:


  (Изображение выше является ссылкой на полноразмерную копию самого себя.)

где я вручную выделил значения в столбцах AA - AZ которые Excel выбрал для столбцов X , Y и Z

Теперь это «простой» вопрос использования этих позиций символов для вырезания значений (текстовых и числовых), которые вы хотите:

  • B1 - =LEFT($A1, X1-1)
  • C1 - =MID($A1, X1+1, Y1-X1-1)
  • D1 - =MID($A1, Y1+1, Z1-Y1-1)
  • E1 - =RIGHT($A1, LEN(A1)-Z1)

что приравнивается к

  • B1 - все (в A1) до (но не включая) пробела от третьего до последнего
  • C1 - все, что находится между третьим и последним пробелом
  • D1 - все между вторым и последним пробелом
  • E1 - все после последнего пробела

И, конечно же, перетащите все вниз, насколько это у вас есть данные.  Например,

           

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .