Есть столбец "А" В нем ячейки в которых стоят цифры через запятую. (Пример: т-1,5,6,11,13,15,20,99) Каждой цифре соответствует стоимость. (Пример 1=150руб., 5=100руб, 6=150руб, 11=50руб и т.д.) Необходимо в ячейке заменить 1,5,6,11.... на стоимость (пример 150,100,150,50) Затем я ее хочу сложить и получить итоговую цифру. Проблема в том что при заменах "1" на 150, меняется значение "11" и получается стоимость 1150руб, а должно быть 50. И таких косячков много. Как я могу заменить по точному совпадению "1" и "11" и т.п. вариации. Разбиение на отдельные столбцы не предлагайте (причина на то есть)
Есть столбец "А" В нем ячейки в которых стоят цифры через запятую. (Пример: т-1,5,6,11,13,15,20,99) Каждой цифре соответствует стоимость. (Пример 1=150руб., 5=100руб, 6=150руб, 11=50руб и т.д.) Необходимо в ячейке заменить 1,5,6,11.... на стоимость (пример 150,100,150,50) Затем я ее хочу сложить и получить итоговую цифру. Проблема в том что при заменах "1" на 150, меняется значение "11" и получается стоимость 1150руб, а должно быть 50. И таких косячков много. Как я могу заменить по точному совпадению "1" и "11" и т.п. вариации. Разбиение на отдельные столбцы не предлагайте (причина на то есть)skvozniak
skvozniak, и Вам здравствуйте. Чтобы быстрее получить точный ответ на свой вопрос, пожалуйста, прочтите Правила форума и приложите xls(x) файл-пример (до 100 кБ), в котором будет видно что есть и что нужно получить на выходе.
skvozniak, и Вам здравствуйте. Чтобы быстрее получить точный ответ на свой вопрос, пожалуйста, прочтите Правила форума и приложите xls(x) файл-пример (до 100 кБ), в котором будет видно что есть и что нужно получить на выходе.Che79
Function change(s$, chto As Range, nachto As Range) Dim t$, m, i% t = Replace(s, "т-", "") m = Split(t, ",") For i = 0 To UBound(m) m(i) = Application.WorksheetFunction.Lookup(CInt(m(i)), chto, nachto) Next i t = Join(m, ",") t = "т-" & t change = t End Function
[/vba] А вот про вот этого зверя
Цитата
т-1,2,3,5,6,7,8,11,12,15,27*1
не понял - и т.д. должно получиться?
Навскидку вот такая UDF [vba]
Код
Function change(s$, chto As Range, nachto As Range) Dim t$, m, i% t = Replace(s, "т-", "") m = Split(t, ",") For i = 0 To UBound(m) m(i) = Application.WorksheetFunction.Lookup(CInt(m(i)), chto, nachto) Next i t = Join(m, ",") t = "т-" & t change = t End Function
Sub zamena() For x = 2 To Cells(Rows.Count, 1).End(xlUp).Row s = Split(Replace(Cells(x, 1), "т-", ""), ",") On Error Resume Next For y = 0 To UBound(s) zam = Range("g:g").Find(s(y)).Offset(0, 2) stroka = stroka & zam If y < UBound(s) Then stroka = stroka & "," Next y Cells(x, 3) = "т-" & stroka stroka = "" Next x End Sub
[/vba]
Добрый день. Вариант кнопкой [vba]
Код
Sub zamena() For x = 2 To Cells(Rows.Count, 1).End(xlUp).Row s = Split(Replace(Cells(x, 1), "т-", ""), ",") On Error Resume Next For y = 0 To UBound(s) zam = Range("g:g").Find(s(y)).Offset(0, 2) stroka = stroka & zam If y < UBound(s) Then stroka = stroka & "," Next y Cells(x, 3) = "т-" & stroka stroka = "" Next x End Sub
Мой вариант (пока что *1 так и считается - значение*1, т.е игнорируется) [vba]
Код
Function SubValue(r1 As Range, r2 As Range) Dim aSpl Dim sStr As String Dim lRws As Long, i As Long, j As Long lRws = r2.Rows.Count aSpl = Split(Mid$(r1.Value, 3), ",") sStr = "т-," If UBound(aSpl) = -1 Then SubValue = "": Exit Function
For j = 0 To UBound(aSpl) If aSpl(j) <> Empty Then For i = 1 To lRws If aSpl(j) = "" & r2(i, 1).Value Then sStr = sStr & "," & r2(i, 3).Value: Exit For End If Next i End If Next j
SubValue = Replace(sStr, ",,", "") End Function
[/vba]
Мой вариант (пока что *1 так и считается - значение*1, т.е игнорируется) [vba]
Код
Function SubValue(r1 As Range, r2 As Range) Dim aSpl Dim sStr As String Dim lRws As Long, i As Long, j As Long lRws = r2.Rows.Count aSpl = Split(Mid$(r1.Value, 3), ",") sStr = "т-," If UBound(aSpl) = -1 Then SubValue = "": Exit Function
For j = 0 To UBound(aSpl) If aSpl(j) <> Empty Then For i = 1 To lRws If aSpl(j) = "" & r2(i, 1).Value Then sStr = sStr & "," & r2(i, 3).Value: Exit For End If Next i End If Next j
Sub zamena() For x = 2 To Cells(Rows.Count, 1).End(xlUp).Row s = Split(Replace(Cells(x, 1), "т-", ""), ",") On Error Resume Next For y = 0 To UBound(s) c = Evaluate(s(y)) zam = Range("g:g").Find(c).Offset(0, 2) stroka = stroka & zam If y < UBound(s) Then stroka = stroka & "," Next y Cells(x, 3) = "т-" & stroka stroka = "" Next x End Sub
Sub zamena() For x = 2 To Cells(Rows.Count, 1).End(xlUp).Row s = Split(Replace(Cells(x, 1), "т-", ""), ",") On Error Resume Next For y = 0 To UBound(s) c = Evaluate(s(y)) zam = Range("g:g").Find(c).Offset(0, 2) stroka = stroka & zam If y < UBound(s) Then stroka = stroka & "," Next y Cells(x, 3) = "т-" & stroka stroka = "" Next x End Sub
Значение нужно изменить? Т.е. для примера 27*1 = 600*1 = 600 27*0,5 = 600*0,5 = 300 Вопрос2. Коэффициент может быть у любого значения в тексте? Вопрос3. Если коэффициент 0,5 (с запятой), то как различать запятую как разделитель текста и запятую как часть коэффициента?
Не тяните резину, покажите пример с реальными данными
Цитата
1 это коэффициент.
Значение нужно изменить? Т.е. для примера 27*1 = 600*1 = 600 27*0,5 = 600*0,5 = 300 Вопрос2. Коэффициент может быть у любого значения в тексте? Вопрос3. Если коэффициент 0,5 (с запятой), то как различать запятую как разделитель текста и запятую как часть коэффициента?
Не тяните резину, покажите пример с реальными даннымиvikttur
Сообщение отредактировал vikttur - Среда, 31.05.2017, 11:46
vikttur, Значение изменить нужно. Коэффициент только у значения 27 у других его нет они постоянные. Коэффициент с запятой. а вот как различить запятую я не знаю к сожалению. (может как-то использовать то, что после 27 стоит знак умножения "*") Хотя можно же просто заменить 27*1 на 600, а 27*0,5 на 300 и т.д.
vikttur, Значение изменить нужно. Коэффициент только у значения 27 у других его нет они постоянные. Коэффициент с запятой. а вот как различить запятую я не знаю к сожалению. (может как-то использовать то, что после 27 стоит знак умножения "*") Хотя можно же просто заменить 27*1 на 600, а 27*0,5 на 300 и т.д.skvozniak
Сообщение отредактировал skvozniak - Среда, 31.05.2017, 12:16
sboy, Пока коэффициенты 0,5 / 1 / 1,5 / 2 но со временем будут с шагом 0,25, т.е. 0,25 / 0,5 / 0,75 /1 и т.д. до 3 Если возможно это учесть сразу, то буду благодарен.
sboy, Пока коэффициенты 0,5 / 1 / 1,5 / 2 но со временем будут с шагом 0,25, т.е. 0,25 / 0,5 / 0,75 /1 и т.д. до 3 Если возможно это учесть сразу, то буду благодарен.skvozniak
Коэффициент только у значения 27 у других его нет они постоянные.
Да Вы опишете нормально задачу или придется клещами орудовать? 27 только в конце или может стоять в любом месте текста? Только это число такое уникальное? В таком случае не стоит огород городить. Добавить в таблицу десяток сообветствий значениям 27*1, 27*0,25... легче, чем усложнять код. Не нужно выдумывать обходы числа с коэффициентами Еще проще, если разделитель у коэффициетов будет точка: 27*0.25
Цитата
Коэффициент только у значения 27 у других его нет они постоянные.
Да Вы опишете нормально задачу или придется клещами орудовать? 27 только в конце или может стоять в любом месте текста? Только это число такое уникальное? В таком случае не стоит огород городить. Добавить в таблицу десяток сообветствий значениям 27*1, 27*0,25... легче, чем усложнять код. Не нужно выдумывать обходы числа с коэффициентами Еще проще, если разделитель у коэффициетов будет точка: 27*0.25vikttur
Сообщение отредактировал vikttur - Среда, 31.05.2017, 14:13
sboy, Вот полный пример. Во вложении. Задача: Цифры это виды работ. У каждой работы своя цена. В ячейке попадаются также слова "гарантия" и цены в скобках - это нужно убрать и ставить только виды работ. В итоге я хочу получить стоимости каждой работы с разделителями "+" чтоб потом их сложить. p/s 27*1 обычно в конце и таких штук как 27*0,5,5 - нет и быть не может.
sboy, Вот полный пример. Во вложении. Задача: Цифры это виды работ. У каждой работы своя цена. В ячейке попадаются также слова "гарантия" и цены в скобках - это нужно убрать и ставить только виды работ. В итоге я хочу получить стоимости каждой работы с разделителями "+" чтоб потом их сложить. p/s 27*1 обычно в конце и таких штук как 27*0,5,5 - нет и быть не может.skvozniak
а почему т-11,25,28,29(2200р.)32 должно получиться 0? сколько реально табличек? (т-, м- и т.д.?) как интерпретировать СКАУТ 900 Кроме 27 умножение только с 4.9 возможно или вариант опять неполный?
а почему т-11,25,28,29(2200р.)32 должно получиться 0? сколько реально табличек? (т-, м- и т.д.?) как интерпретировать СКАУТ 900 Кроме 27 умножение только с 4.9 возможно или вариант опять неполный?buchlotnik
Сообщение отредактировал buchlotnik - Среда, 31.05.2017, 16:03