Страницы: 1
RSS
Посчитать объем детали (размеры записаны в тексте)
 
Добрый день, прочитал много тем по поиску цифр в ячейке с текстом но мозгов собрать формулу под свой случай не хватает. Буду благодарен за помощь.
Задача посчитать вес конкретных деталей в прикреплённом файле.

Пример "Арка (120-60-8)"

Цифры это размер детали в сантиметрах, то есть надо найти каждое число в данной ячейке, разделить его на 100, перемножить результат между собой и умножить на 3000 (плотность), а в некоторых случаях на количество деталей. Я в примере для каждого случая расчет вставил. Также в примере представлены варианты, как могут быть записаны детали. Надо что бы вычислялось все одинаковой формулой.
 
UDF
Код
Function iVolume(cell$)
 With CreateObject("VBScript.RegExp")
   .Global = True
   .IgnoreCase = True
   .Pattern = "(\d+)н?-(\d+)н?-(\d+)"
    If .test(cell) Then
     iVolume = .Execute(cell)(0).SubMatches(0) * .Execute(cell)(0).SubMatches(1) * _
               .Execute(cell)(0).SubMatches(2) * 30 / 10000
     .Pattern = "\d+(?=\s?шт)"
     If .test(cell) Then
       iVolume = iVolume * .Execute(cell)(0)
     End If
    End If
 End With
End Function
 
Цитата
Kuzmich написал:
UDF
А без макроса, с помощью обычной формулы нельзя это реализовать?  
 
Другой вариант, более долгий, но более универсальный, с использованием бесплатной надстройки ЁXCEL.
В общем самое главное - это получить только цифры. Это можно сделать или с помощью встроенного макроса
https://e-xcel.ru/index.php/komandy/yachejki/330-ostavit-v-yachejke-tolko-chisla-udalit-ves-tekst
получиться как на верхней картинки:

Или с помощью функции:

Код
=ЁXCEL_РВИзвлечь(A2;"[0-9]+";0;0;" ")
Потом штатным инструментом разделить текст по столбцам и уже можно перемножать что угодно.
Изменено: dim284 - 09.01.2021 18:09:57
 
Цитата
Shock23 написал:
с помощью обычной формулы
ну я б не сказал что это обычная формула, ну и ряд  моментов не учтен, таких как варианты со шт.
=PRODUCT(MID(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(MID(A2;FIND(TRIM(RIGHT(SUBSTITUTE(LEFT(A2;FIND("-";A2));" ";REPT(" ";20));15));A2);99);" ";"-");"-";REPT(" ";99));"(";);")";);"н";);{1\99\198};99)%)*3000*IFERROR(RIGHT(SUBSTITUTE(LEFT(TRIM(A2);FIND("шт.";TRIM(SUBSTITUTE(A2&".";"шт.";" шт.")))-2);" ";REPT(" ";15));15);1)
Изменено: БМВ - 09.01.2021 19:06:37
По вопросам из тем форума, личку не читаю.
 
имхо:
почему некоторые так боятся UDF? они же намного проще!
могу дать только одно объяснение: политика фирмы не разрешает макросы
А зря
 
Цитата
Александр Моторин написал:
почему некоторые так боятся UDF?
просто есть ряд моментов
1. ну об этом сказано, у некоторых макросы запрещены, хотя как админ скажу, нужно не с макросами боротьсья. а с вредоносным кодом и правами пользователя излишними и аутентификацией и авторизацией правильной заниматься.
2. при необходимости перенести в другую книгу - не каждый справится.
3. если UDF слишком комплексная, то адаптация по чуть иные условия может оказаться непосильной с первого взгляда, хотя если формула чуть сложнее, то её адаптировать в разы  тяжелее.
По вопросам из тем форума, личку не читаю.
 
Цитата
Александр Моторин: почему некоторые так боятся UDF?
на объёмах более 10 тыс строк, UDF начинает серьёзно тормозить пересчёт, поэтому я предпочитаю макросы для вставки значений вместо макрофункций
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх