Есть макрос, который анализирует текстовую строку на похожие словосочетания, разделенные между собой - и суммирует их. Но он работает ища схожесть слов только по левую сторону от числа.
А вот как научить этот макрос искать схожесть по обе стороны от числа (поскольку число теперь находится посередине словосочетания, а не справа как в исходном примере) . Как из сложить похожие словосочетания из зеленой ячейки - и вставить результат в желтую ячейку - по убыванию ?
Добрый вечер. Имеется вопрос.
Есть макрос, который анализирует текстовую строку на похожие словосочетания, разделенные между собой - и суммирует их. Но он работает ища схожесть слов только по левую сторону от числа.
А вот как научить этот макрос искать схожесть по обе стороны от числа (поскольку число теперь находится посередине словосочетания, а не справа как в исходном примере) . Как из сложить похожие словосочетания из зеленой ячейки - и вставить результат в желтую ячейку - по убыванию ?RagnarLodbrokovitch
bmv98rus, ну в файле же приведен пример. Исходный текст такой: "м1текст+м3глагол+ер1запятая+зор5звук+м1глагол+зор2звук+м1текст"
В итоге должно получиться : зор7звук+м4глагол+м2текст+ер1запятая
То есть если макрос видит похожие словосочетания - то он должен суммировать числа - которые стоят посередине этих схожих словосочетаний.
bmv98rus, ну в файле же приведен пример. Исходный текст такой: "м1текст+м3глагол+ер1запятая+зор5звук+м1глагол+зор2звук+м1текст"
В итоге должно получиться : зор7звук+м4глагол+м2текст+ер1запятая
То есть если макрос видит похожие словосочетания - то он должен суммировать числа - которые стоят посередине этих схожих словосочетаний.RagnarLodbrokovitch
Sub ttt() Dim s$, v, t$, d# Dim Dic As Object s = Range("E13").Value Set Dic = CreateObject("scripting.dictionary") Dic.comparemode = 1
With CreateObject("vbscript.regexp") ' .Global = True: .Pattern = "\d+\.?\d?" .Global = True: .Pattern = "\d+" For Each v In Split(Replace(s, "-", "+"), "+") d = Val(.Execute(v)(0)) t = .Replace(v, "~") Dic(t) = Dic(t) + d Next End With s = "" For Each v In Dic.keys s = s & "+" & Replace(v, "~", Dic(v)) Next v Set Dic = Nothing
MsgBox Mid(s, 2) End Sub
[/vba]
например, вот
[vba]
Код
Sub ttt() Dim s$, v, t$, d# Dim Dic As Object s = Range("E13").Value Set Dic = CreateObject("scripting.dictionary") Dic.comparemode = 1
With CreateObject("vbscript.regexp") ' .Global = True: .Pattern = "\d+\.?\d?" .Global = True: .Pattern = "\d+" For Each v In Split(Replace(s, "-", "+"), "+") d = Val(.Execute(v)(0)) t = .Replace(v, "~") Dic(t) = Dic(t) + d Next End With s = "" For Each v In Dic.keys s = s & "+" & Replace(v, "~", Dic(v)) Next v Set Dic = Nothing
RagnarLodbrokovitch, суммировать можно только числа, складывать слова и фразы, хотя в данном случае складывать - это собирать. Ну это скорее придирка к терминологии.
RagnarLodbrokovitch, суммировать можно только числа, складывать слова и фразы, хотя в данном случае складывать - это собирать. Ну это скорее придирка к терминологии.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Вторник, 08.05.2018, 09:19