Страницы: 1
RSS
Как разбить на столбцы сумму двух чисел, Как разбить на столбцы сумму двух чисел
 
Как разбить на два столбца сумму двух чисел, записанную так
=24+1
=2+2
=15+1,
и арифметические знаки удалить, чтобы в результате было:
24 1
2   2
15 1
 
Есть два три пути (memo показал ниже третий): первый  - программный (написать макрос и использовать его периодически по мере необходимости), второй - руками пользователя (разово применить сочетание клавиш Ctrl+H - поиск и замена символов в ячейках). Какой путь выбираете Вы?
Изменено: Конь - 31.05.2022 00:34:29
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР.
 
Код
Function SplitSum(rg As Range)
  Dim s$, re
  s = rg.Formula:  Set re = CreateObject("VBScript.RegExp")
  re.Pattern = "(\D*)(\d+)(\D+)(\d+)(\D*)"
  If re.test(s) Then SplitSum = Split(re.Replace(s, "$2 $4")) _
                Else SplitSum = Array("Данные", "фигня")
End Function
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Формула. Нужен офис не ниже 2013.
Код
=--TRIM(MID(SUBSTITUTE(SUBSTITUTE(FORMULATEXT($A1);"=";);"+";REPT(" ";99));COLUMNS($B1:B1)*99-98;99))
 
Спасибо большое за формулу.
Никогда бы не написала такую. Совершенный новичок.  
Изменено: Екатерина Смирнова - 31.05.2022 00:12:25
 
Цитата
Екатерина Смирнова написал:
Никогда бы не написала такую.
Я тоже так думал четыре года назад))
Держите еще вариант.
Код
=FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(FORMULATEXT($A5);"=";);"+";"</s><s>")&"</s></t>";"//s[.*0=0 and position()="&COLUMNS($B5:B5)&"]")
 
Цитата
написал:
Цитата
Екатерина Смирнова написал:
Никогда бы не написала такую.
Я тоже так думал четыре года назад))
Держите еще вариант.
Код
    [URL=#]?[/URL]       1      =FILTERXML(  "<t><s>"  &SUBSTITUTE(SUBSTITUTE(FORMULATEXT($A5);  "="  ;);  "+"  ;  "</s><s>"  )&  "</s></t>"  ;  "//s[.*0=0 and position()="  &COLUMNS($B5:B5)&  "]"  )   
 
А если у меня два таких столбца рядом суммой прописаны и их нужно разбить на 4.
Есть возможность формулу написать по первому варианту?
Благодарю от души!  
Изменено: Екатерина Смирнова - 31.05.2022 00:59:18
 
Можно.
Вариант 1.
Код
=INDEX(--TRIM(MID(SUBSTITUTE(SUBSTITUTE(FORMULATEXT($A1:$B1);"=";);"+";REPT(" ";99));(MOD(COLUMNS($C1:C1)-1;2)+1)*99-98;99));INT((COLUMNS($C1:C1)-1)/2)+1)

Вариант 2.
Код
=FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(INDEX(FORMULATEXT($A5:$B5);INT((COLUMNS($C5:C5)-1)/2)+1);"=";);"+";"</s><s>")&"</s></t>";"//s[.*0=0]["&MOD(COLUMNS($C5:C5)-1;2)+1&"]")
 
Цитата
написал:
Можно.
Вариант 1.
Код
    [URL=#]?[/URL]       1      =INDEX(--TRIM(MID(SUBSTITUTE(SUBSTITUTE(FORMULATEXT($A1:$B1);  "="  ;);  "+"  ;REPT(  " "  ;99));(MOD(COLUMNS($C1:C1)-1;2)+1)*99-98;99));INT((COLUMNS($C1:C1)-1)/2)+1)   
 
Вариант 2.
Код
    [URL=#]?[/URL]       1      =FILTERXML(  "<t><s>"  &SUBSTITUTE(SUBSTITUTE(INDEX(FORMULATEXT($A5:$B5);INT((COLUMNS($C5:C5)-1)/2)+1);  "="  ;);  "+"  ;  "</s><s>"  )&  "</s></t>"  ;  "//s[.*0=0]["  &MOD(COLUMNS($C5:C5)-1;2)+1&  "]"  )   
 
Большое спасибо!
Это непостижимо для меня!  
 
Код
=ТРАНСП(
ФИЛЬТР.XML("<j><i>"&ПОДСТАВИТЬ(ПСТР(Ф.ТЕКСТ(A1);2;100)&"+"&ПСТР(Ф.ТЕКСТ(B1);2;100);"+";"</i><i>")
&"</i></j>";"//i"))
Изменено: Тимофеев - 31.05.2022 09:09:22
 
Цитата
написал:
Цитата
написал:
Можно.
Вариант 1.
 
Код
    [URL=#]?[/URL]       1            [URL=#]?[/URL]       1      =INDEX(--TRIM(MID(SUBSTITUTE(SUBSTITUTE(FORMULATEXT($A1:$B1);    "="    ;);    "+"    ;REPT(    " "    ;99));(MOD(COLUMNS($C1:C1)-1;2)+1)*99-98;99));INT((COLUMNS($C1:C1)-1)/2)+1)     
 
   
Вариант 2.
 
Код
    [URL=#]?[/URL]       1            [URL=#]?[/URL]       1      =FILTERXML(    "<t><s>"    &SUBSTITUTE(SUBSTITUTE(INDEX(FORMULATEXT($A5:$B5);INT((COLUMNS($C5:C5)-1)/2)+1);    "="    ;);    "+"    ;    "</s><s>"    )&    "</s></t>"    ;    "//s[.*0=0]["    &MOD(COLUMNS($C5:C5)-1;2)+1&    "]"    )     
      Большое спасибо!
Это непостижимо для меня!  
А Если нет в некоторых ячейках значений, то появляется Н/д. Можно ли в формуле прописать, если ноль, но пустые ячейки?  
 
Можно обработать ошибку функцией IFNA()
 
Можно проще: Выделите диапазон
Ctrl + H --> в Найти: "=", в Заменить на: ""(пусто), в Область поиска: "Формулы" --> Заменит все
И тоже самое со знаком "+", только менять на пробел
УПС, во втором сообщении от Коня уже есть об этом
Изменено: Msi2102 - 31.05.2022 09:49:44
 
Цитата
написал:
Можно проще: Выделите диапазон
Ctrl + H --> в Найти: "=", в Заменить на: ""(пусто), в Область поиска: "Формулы" --> Заменит все
И тоже самое со знаком "+", только менять на пробел
УПС, во втором сообщении от Коня уже есть об этом
Спасибо
 
если разделитель только + то вариант:
1. столбец скопировать в соседний столбец;
2. К  скопированному применить "текст по столбцам" с разделителем "+".
Изменено: V - 31.05.2022 11:03:12
 
Екатерина Смирнова,  прекратите цитировать всё подряд!
 
memo, Добрый день!
Есть возможность преобразовать формулу, которую вы делали с разбивкой по столбцам, чтобы при разделении распределение было такое:
=24+2 =25+3    24 25 2 3
 
Код
=ИНДЕКС(ТРАНСП(ФИЛЬТР.XML("<j><i>"&ПОДСТАВИТЬ(ПСТР(Ф.ТЕКСТ(A1);2;100)&"+"&ПСТР(Ф.ТЕКСТ(B1);2;100);"+";"</i><i>")&"</i></j>";"//i"));1;{1;3;2;4})
 
Цитата
Екатерина Смирнова написал:
чтобы при разделении распределение было такое:=24+2 =25+3    24 25 2 3
Да не вопрос! )
Код
=IFNA(INDEX(--TRIM(MID(SUBSTITUTE(MID(FORMULATEXT($A1:$B1),2,99),"+",REPT(" ",99)),(INT((COLUMNS($C1:C1)-1)/2)+1)*99-98,99)),MOD(COLUMNS($C1:C1)-1,2)+1),)
Изменено: memo - 01.06.2022 12:14:09
 
memo, Тимофеев, спасибо большое!
 
memo, можете перейти в личку и прочесть мою просьбу об оптимизации формы, в которой включить формулу, составленную вами? Спасибо.  
 
Екатерина Смирнова, Здравствуйте, ответил.
Страницы: 1
Наверх