Страницы: 1
RSS
Перемножить размеры, записанные в тексте
 
Ребят, у меня есть код листа, который мы используем на складе.
S10 2000*6000
Перед мной поставили задачу, чтобы эксель таблица автоматически рассчитывала размер листа на основе кода, в котором указаны толщина, ширина, длинна.
Подскажите, есть возможность у эксель игнорировать буквы, пробел и звездочку, умножая исключительно три цифровых значения (10*2000*6000)?

Спасибо за помощь.  
 
1. Формулой вытягивать каждое значение и перемножать.
2. Применить макрофункцию ВЫЧИСЛИТЬ.
3. Макросом.
4. Руками :)

Вариант 2.
Ctrl+F3, создать имя, записать ему формулу:
=ВЫЧИСЛИТЬ(ПОДСТАВИТЬ(ПСТР(A1;2;50);" ";"*"))
Писал на коленке, т.к. примера-файла нет. Дальше сами.
 
Код всегда такой (в смысле - только одна буква впереди, а потом число до первого пробела)?
Кому решение нужно - тот пример и рисует.
 
Да, иногда конечно могут добавляться комментарии в конце.
S6 1500*6000
S8 1500*6000
S10 1500*6000
S15 2500*1500
S25 1500*6000
S20 1500*3000
S3 1500*3000 рифл.
 
дайте файл-пример со всеми возможными сочетаниями написания кода, а то универсальную формулу не получится сделать.
Кому решение нужно - тот пример и рисует.
 
Макрос или формулу Вам на бумажке писать?

Появился вариант со словом справа... Еще есть карты в рукаве?
 
Смотрите приложенный файл.  Три вида кодов.  
 
Цитата
vikttur написал: Макрос или формулу Вам на бумажке писать?
Посмотрите выше приложенный документ.   Три разных вида кода.    
 
bekkr, создайте ещё пару сообщений, в которых предложите посмотреть приложенный документ.
 
Цитата
Три вида кодов.
Ошибаетесь. Больше:
Слева буква или слово; справа может быть слово (в файле не показали со словом "рифл."); разделитель точка/запятая; три/два значения; знак */х...
Тут лучше макрос/функцию пользователя применить
 
UDF, количество чисел - любое, текст до, между и после чисел - любой
Код
Function Bek(s)
Static re As Object
Dim x
  If re Is Nothing Then
    Set re = CreateObject("vbscript.regexp")
    re.Pattern = "\d+"
    re.Global = True
  End If
  If re.test(s) Then
    Bek = 1
    For Each x In re.Execute(s)
      Bek = Bek * x
    Next
  End If
End Function
 
Ах там еще и точки с запятыми! Тогда так
Код
Function Bek(s)
Static re As Object
Dim x
  If re Is Nothing Then
    Set re = CreateObject("vbscript.regexp")
    re.Pattern = "[0-9.,]+"
    re.Global = True
  End If
  If re.test(s) Then
    Bek = 1
    For Each x In re.Execute(s)
      Bek = Bek * Val(Replace(x, ",", "."))
    Next
  End If
End Function
Кстати объем материала трубы вычисляется по совсем другой формуле. Будем искать слово "труба"  :qstn:
 
Цитата
Казанский написал: Будем искать слово "труба"
Будем.  Могли бы вы приложить файл, пытаюсь использовать ваш код для макроса, выдает Compile Error и все.  
Изменено: bekkr - 16.12.2016 11:52:05
 
bekkr
 
Казанский, странно, выдает #value! в ячейках к которым применен код VBA.  Пробовал даже запятую менять на точку с запятой, поскольку ";" является разделителем в формулах по умолчанию, но тоже не помогло.  
 
bekkr, ОС какая, Офис какой? Какие-нибудь макросы или пользовательские функции работают?
В VBA в окне Immediate (Ctrl+G) введите
Код
?bek("12 34")
- где происходит останов по ошибке?
 
Казанский, MacOS, MS Office 2016.  Ошибок не показывает.  
 
Цитата
bekkr написал: MacOS
Для Макинтошей у нас есть специальный форум.
 
bekkr, да, на Маке это работать не будет.
Надо парсить строку средствами VBA - мне лениво.
 
Казанский, в любом случае, спасибо. Дали вектор.  
 
Казанский,

Подскажите как изменить ваш код выше, чтобы цифры не умножались, а вычетались.  Например, код следующий: 114,3*16, макрос должен считать 114,3-16.

Спасибо.  
 
Ну близко все-таки :)
Код
Function Bek1_2(s)
Static re As Object
Dim v
  If re Is Nothing Then
    Set re = CreateObject("vbscript.regexp")
    re.Pattern = "[0-9.,]+"
    re.Global = True
  End If
  Set v = re.Execute(s)
  If v.Count > 1 Then
    Bek1_2 = Val(Replace(v(0), ",", ".")) - Val(Replace(v(1), ",", "."))
  Else
    Bek1_2 = CVErr(xlErrNA)
  End If
End Function
Страницы: 1
Наверх