Страницы: 1
RSS
Пересчёт линейных размеров Длина*Ширина, находящихся внутри текста, в метры квадратные.
 
Приходит разрозненная информация, которая к тому же меняет в ячейках свой адрес, ввиду чего не сделать формулы на постоянной основе. Нужно каким то методом, (при обновлении информации), в автоматическом режиме линейные размеры длина*ширина пересчитывать в метрах квадратных.
Skvora
 
Код
Sub iArea()
Dim i As Long
With CreateObject("vbscript.regexp")
 .Global = True
 .Pattern = "(\d{4})\*(\d{4})"
  For i = 5 To 7
    If .test(Cells(i, 2)) Then
      Cells(i, 5) = .Execute(Cells(i, 2))(0).SubMatches(0) * .Execute(Cells(i, 2))(0).SubMatches(1) / 1000000
    End If
  Next
End With
End Sub
 
Kuzmich, спасибо, но до макросов у меня ещё нос не дорос... Нет ли стандартных методов, арифметики так сказать?
Изменено: Игорь Скворцов - 15.04.2021 22:32:11
Skvora
 
Код
Function Square#(s$)
  Dim re
  Set re = CreateObject("VBScript.RegExp")
  re.Pattern = "\*(\d+\*\d+)"
  If re.test(s) Then Square = Evaluate(re.Execute(s)(0).submatches(0)) / 1000000
End Function
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Тёзка, фантастика! Но ни чего не понятно)))

Вставлю пока в свою таблицу, потом буду брать уроки у Вас:)
Всем кому не спится, спасибо огромное!
Изменено: Игорь Скворцов - 15.04.2021 22:38:33
Skvora
 
=IFERROR(ROUND(PRODUCT(--MID(SUBSTITUTE(MID(B5;SEARCH("~**~*";B5)+1;10);"*";REPT(" ";15));{1;15};15))/10^6;2);"")
Цитата
БМВ написал:
Всем кому не спитЬся
а мне еще и не скуриться  :D
Изменено: БМВ - 15.04.2021 23:27:04
По вопросам из тем форума, личку не читаю.
 
БМВ, спасибо! Это я в состоянии понять:)))
Skvora
 
Цитата
Игорь Скворцов написал:
до макросов у меня ещё нос не дорос...
ну это зря конечно...
Код
=ПРОИЗВЕД(ФИЛЬТР.XML("<j><i>"&ПОДСТАВИТЬ(ФИЛЬТР.XML("<j><i>"&ПОДСТАВИТЬ(B5;" ";"</i><i>")&"</i></j>";"//i[contains(.,'*')]");"*";"</i><i>")&"</i></j>";"//i[position()>1]"))%%%

365-beta only
Изменено: buchlotnik - 15.04.2021 22:57:34
Соблюдение правил форума не освобождает от модераторского произвола
 
buchlotnik, сейчас стоит задача из прайсов, которые представляют разрозненную информацию с разными системами измерения (м.п., м.кв., м.куб., штуки, кг.) сделать таблицу позволяющую быстро и безошибочно рассчитывать заказную кухонную мебель. Побочный продукт этого расчёта - деталировки на производство и информация в снабжение. Сегодня, в том числе и благодаря Вам, узнал две новые мульки в Экселе, которые позволят упростить задачу. На этом с арифметикой пожалуй всё. Но есть одна задача нерешённая - это "Получение внешних данных"- "Из интернета". Стандартные методы практически не работают, многие нужные сайты на этот запрос выдают фигню, а если обновление данных поручить персоналу, ручкам золотым... Ну Вы сами понимаете... Нужно писать какие то обменники, или как они называются... Если есть возможность помочь, не за спасибо конечно, с радостью приму помощь.
Изменено: Игорь Скворцов - 15.04.2021 23:09:00
Skvora
 
Еще вариант.
Код
=PRODUCT(TRIM(MID(B5;SEARCH("~*";B5)+1;4));TRIM(MID(B5;SEARCH("~*";B5)+6;4)))%%%
 
memo, ну уж так зло не нужно, размер меньше метра и гудбай.
По вопросам из тем форума, личку не читаю.
 
Цитата
Игорь Скворцов написал:
Нужно писать какие то обменники, или как они называются...
парсеры они называются - с этим лучше обратиться в раздел работа; либо создать новую тему - возможно обойдемся PQ
Соблюдение правил форума не освобождает от модераторского произвола
 
БМВ, ЛДСП меньше метра не встречал, но действительно, формула перестаёт быть универсальной, вдруг для чего то ещё пригодится.

buchlotnik, интересовался темой "Получение внешних данных" - "Из интернета", толком ни чего вразумительного не нашёл, было на форуме одно мнение, что раньше сайты были лучше структурированы, делались на основе таблиц, а сейчас лепят кто во что горазд. Во всяком случае у меня получилось только с сайтом ЦБ РФ, и то информация хоть и обновляется каждый день, но скачет из ячейки в ячейку.
Skvora
 
Цитата
БМВ написал:
размер меньше метра и гудбай
Черт, а ведь верно. Соорудил такой костыль, вроде работает.
=PRODUCT(TRIM(SUBSTITUTE(MID(B5;SEARCH("~*";B5)+1;4);"*";""));TRIM(SUBSTITUTE(MID(B5;SEARCH("~*";B5)+LEN(TRIM(MID(B5;SEARCH("~*";B5)+6;4)))+2;4);"*";"")))%%%
Кстати, у вас тоже надо бы подправить: MID(B5;SEARCH("~**~*";B5)+1;9)
У buchlotnik, изначально универсальный вариант.
Изменено: memo - 16.04.2021 02:06:59
 
Цитата
Игорь Скворцов написал:  из прайсов, которые представляют разрозненную информацию с разными системами измерения ... сделать таблицу позволяющую быстро и безошибочно рассчитывать...
скорее всего, здесь будет связка VBA + PQ + PP: PQ - сбор и адаптация файлов; PP - аналитика; VBA - обновить выборочно, пути к папкам, создать файлы, отправить на почту и пр.
 
Цитата
memo написал:
+1;9)
не совсем тогда очень большие не обработает. И лучше так
=IFERROR(ROUND(PRODUCT(--MID(SUBSTITUTE(TRIM(SUBSTITUTE(MID(B5;SEARCH("~**~*";B5)+1;33);"*";" "));" ";REPT(" ";15));{1;15};15))/10^6;2);"")
По вопросам из тем форума, личку не читаю.
 
Цитата
memo написал:
изначально универсальный вариант
но за универсальность придется заплатить скоростью - считает на 30% медленнее чем у тезки
а вообще писал не универсальный, а ленивый - где думать поменьше  ;)
Соблюдение правил форума не освобождает от модераторского произвола
 
buchlotnik,  ну скорость не смотрел, а так и длинна и массивность. Я округление впихнул и %%% не стал. А то совсем коротко будет.

P.S. думать ваще опасно. С вольнодумцами всегда борятся  :D
Изменено: БМВ - 16.04.2021 08:24:19
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
длинна и массивность
ну длина лямбдой убирается  ;)  
а массивность в других ситуациях вполне нужна - опять же плата за универсальность...
то ли дело регулярки - но это в гугле...
Соблюдение правил форума не освобождает от модераторского произвола
 
Цитата
БМВ написал:
тогда очень большие не обработает
22800м и обрабатывать не нужно, можно сразу класть дорожку для боулинга  :)
Страницы: 1
Наверх