Однако принцип отбора значительно изменился, и, помогите, пожалуйста. Из Ячеек D4, E4, F4 достать сумму значений, размещенных между = и *, и замените, пожалуйста в ячейке A10 : слово ИСХОД на добытую сумму, т.е. на 4,58+0,31+12,41, записав как результат 17,30 в ячейку A10 слово РЕЗУЛЬТАТ на сумму значений из D4, E4, F4, т.е. 352,66+23,87+955,57, записав как результат 1332,10 в ячейку A10 Прошу Вашего содействия.
Добрый день Очень похожая тема ранее обсуждалась здесь
Однако принцип отбора значительно изменился, и, помогите, пожалуйста. Из Ячеек D4, E4, F4 достать сумму значений, размещенных между = и *, и замените, пожалуйста в ячейке A10 : слово ИСХОД на добытую сумму, т.е. на 4,58+0,31+12,41, записав как результат 17,30 в ячейку A10 слово РЕЗУЛЬТАТ на сумму значений из D4, E4, F4, т.е. 352,66+23,87+955,57, записав как результат 1332,10 в ячейку A10 Прошу Вашего содействия.timo64uk
timo64uk, с допстолбцом допстрокой и одной UDF. Хотя можно и в столбец положить. Можно усложнить UDF и сделать без допстолбца, но всегда ведь можно найти 3 свободные ячейки. Но если нужно эти значения ещё и покрасить - только макрос.
Да, смотреть на листе "Было"
timo64uk, с допстолбцом допстрокой и одной UDF. Хотя можно и в столбец положить. Можно усложнить UDF и сделать без допстолбца, но всегда ведь можно найти 3 свободные ячейки. Но если нужно эти значения ещё и покрасить - только макрос.
В итоговой ячейке более 255 символов и при адаптации формулы выскакивает сообщение: "Длина текстовых значений в формулах не может превышать 255 символов". Сейчас пытался через split выхватить значение и за поля временно закинуть, чтобы впоследствии просуммировать за полями и далее заменить в А10 и зачистить за полями значения, однако дальше split не идет.
На основе кода от _Boroda_ сделал первый шаг, но отобранные значения между = и * встают заменой как не числовые, т.е. при выделении ячейки нужно кликать на желтый треугольник и преобразовывать в число... А такого макроса нет., т.е. дальнейшие операции сложения невозможны. Часть кода (ячейки и слова изменил немного, но суть осталось прежней:
[vba]
Код
Dim tg_ As Variant Dim tg1_ As Variant Dim tg11_ As Variant Dim tg111_ As Variant Dim th_ As Variant Dim th1_ As Variant Dim th11_ As Variant Dim th111_ As Variant Dim tj_ As Variant Dim tj1_ As Variant Dim tj11_ As Variant Dim tj111_ As Variant tg_ = Range("S18").Value th_ = Range("T18").Value tj_ = Range("U18").Value tg1_ = "ЕРТ" th1_ = "ЕРО" tj1_ = "ЕРМ" tg111_ = "" & Replace(Mid(Range("L18").Formula, 2), ".", ",") & "" tg11_ = "" & Split(tg111_, "*")(0) & "" th111_ = "" & Replace(Mid(Range("M18").Formula, 2), ".", ",") & "" th11_ = "" & Split(th111_, "*")(0) & "" tj111_ = "" & Replace(Mid(Range("N18").Formula, 2), ".", ",") & "" tj11_ = "" & Split(tj111_, "*")(0) & "" tg_ = Replace(tg_, tg1_, tg11_) th_ = Replace(th_, th1_, th11_) tj_ = Replace(tj_, tj1_, tj11_) Range("S18").Value = tg_ Range("T18").Value = th_ Range("U18").Value = tj_ 'выделяем для преобразования в числа Range("S18:U18").Select Dim rArea As Range On Error Resume Next ActiveWindow.RangeSelection.SpecialCells(xlCellTypeConstants).Select If Err Then Exit Sub With Application: .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlManual: End With For Each rArea In Selection.Areas rArea.FormulaLocal = rArea.FormulaLocal Next rArea With Application: .ScreenUpdating = True: .EnableEvents = True: .Calculation = xlAutomatic: End With
Dim t_ As Variant Dim t01_ As Variant Dim t02_ As Variant Dim t03_ As Variant Dim t04_ As Variant Dim t11_ As Variant Dim t12_ As Variant Dim t13_ As Variant Dim t14_ As Variant t_ = Range("A26").Value t01_ = "ЕдиничнаяРасценка" t02_ = "ЦЕНА" t03_ = "ИТОГО" t04_ = "см.Q13" t11_ = "" & Range("A18").Value & "" t12_ = "" & Range("V18").Value & "" t13_ = "" & Range("O18").Value & "" t14_ = "" & Range("Q13").Value & "" t_ = Replace(t_, t01_, t11_) t_ = Replace(t_, t02_, t12_) t_ = Replace(t_, t03_, t13_) t_ = Replace(t_, t04_, t14_) Range("A26").Value = t_
[/vba]
Заработало... добавил код от Alex_ST. Дальше проще, главное начать. В итоге второй цикл вставок работает немного не корректно - вставляет не сотые, а округленные значения, т.е. вместо 12,30 вставляет 12,3 А первый цикл на основе такого же кода вставляет как нужно числа "как текст". Попробую ячейки доноры перевести в текстовый формат. *** Нашел решение [vba]
Код
t12_ = "" & Range("V18").Value & ""
[/vba] меняем на [vba]
Код
t12_ = "" & Range("V18").Text & ""
[/vba] Из минусов: Длинный код и возможно я не верно обозначил переменные через As Variant
В итоговой ячейке более 255 символов и при адаптации формулы выскакивает сообщение: "Длина текстовых значений в формулах не может превышать 255 символов". Сейчас пытался через split выхватить значение и за поля временно закинуть, чтобы впоследствии просуммировать за полями и далее заменить в А10 и зачистить за полями значения, однако дальше split не идет.
На основе кода от _Boroda_ сделал первый шаг, но отобранные значения между = и * встают заменой как не числовые, т.е. при выделении ячейки нужно кликать на желтый треугольник и преобразовывать в число... А такого макроса нет., т.е. дальнейшие операции сложения невозможны. Часть кода (ячейки и слова изменил немного, но суть осталось прежней:
[vba]
Код
Dim tg_ As Variant Dim tg1_ As Variant Dim tg11_ As Variant Dim tg111_ As Variant Dim th_ As Variant Dim th1_ As Variant Dim th11_ As Variant Dim th111_ As Variant Dim tj_ As Variant Dim tj1_ As Variant Dim tj11_ As Variant Dim tj111_ As Variant tg_ = Range("S18").Value th_ = Range("T18").Value tj_ = Range("U18").Value tg1_ = "ЕРТ" th1_ = "ЕРО" tj1_ = "ЕРМ" tg111_ = "" & Replace(Mid(Range("L18").Formula, 2), ".", ",") & "" tg11_ = "" & Split(tg111_, "*")(0) & "" th111_ = "" & Replace(Mid(Range("M18").Formula, 2), ".", ",") & "" th11_ = "" & Split(th111_, "*")(0) & "" tj111_ = "" & Replace(Mid(Range("N18").Formula, 2), ".", ",") & "" tj11_ = "" & Split(tj111_, "*")(0) & "" tg_ = Replace(tg_, tg1_, tg11_) th_ = Replace(th_, th1_, th11_) tj_ = Replace(tj_, tj1_, tj11_) Range("S18").Value = tg_ Range("T18").Value = th_ Range("U18").Value = tj_ 'выделяем для преобразования в числа Range("S18:U18").Select Dim rArea As Range On Error Resume Next ActiveWindow.RangeSelection.SpecialCells(xlCellTypeConstants).Select If Err Then Exit Sub With Application: .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlManual: End With For Each rArea In Selection.Areas rArea.FormulaLocal = rArea.FormulaLocal Next rArea With Application: .ScreenUpdating = True: .EnableEvents = True: .Calculation = xlAutomatic: End With
Dim t_ As Variant Dim t01_ As Variant Dim t02_ As Variant Dim t03_ As Variant Dim t04_ As Variant Dim t11_ As Variant Dim t12_ As Variant Dim t13_ As Variant Dim t14_ As Variant t_ = Range("A26").Value t01_ = "ЕдиничнаяРасценка" t02_ = "ЦЕНА" t03_ = "ИТОГО" t04_ = "см.Q13" t11_ = "" & Range("A18").Value & "" t12_ = "" & Range("V18").Value & "" t13_ = "" & Range("O18").Value & "" t14_ = "" & Range("Q13").Value & "" t_ = Replace(t_, t01_, t11_) t_ = Replace(t_, t02_, t12_) t_ = Replace(t_, t03_, t13_) t_ = Replace(t_, t04_, t14_) Range("A26").Value = t_
[/vba]
Заработало... добавил код от Alex_ST. Дальше проще, главное начать. В итоге второй цикл вставок работает немного не корректно - вставляет не сотые, а округленные значения, т.е. вместо 12,30 вставляет 12,3 А первый цикл на основе такого же кода вставляет как нужно числа "как текст". Попробую ячейки доноры перевести в текстовый формат. *** Нашел решение [vba]
Код
t12_ = "" & Range("V18").Value & ""
[/vba] меняем на [vba]
Код
t12_ = "" & Range("V18").Text & ""
[/vba] Из минусов: Длинный код и возможно я не верно обозначил переменные через As Varianttimo64uk
Сообщение отредактировал timo64uk - Четверг, 24.10.2024, 11:19
Возможно кто-нибудь знает как найденное через Split значение, присвоенное переменной вписать в конкретную ячейку. Простыми ["S18"]= tg_ не выходит. А через Replace с предварительно введенным текстом для последующей его подмены получается. Но это как-то должно проще решаться.
Возможно кто-нибудь знает как найденное через Split значение, присвоенное переменной вписать в конкретную ячейку. Простыми ["S18"]= tg_ не выходит. А через Replace с предварительно введенным текстом для последующей его подмены получается. Но это как-то должно проще решаться.timo64uk