Добрый день! Подскажите, пожалуйста, может кто-то знает решение задачи?
Есть столбец с фразами, к примеру:
обои купить
обои заказать в москве
цена обои
Нужно определенные слова в ячейке переносить (автоматически или по нажатию клавиши) в начало фразы:
было "обои купить" - стало "купить обои". Здесь контрольное слово "купить". Находим его в в ячейке и переносим в начало. И в конец фразы: было "цена обои" - стало "обои цена". Здесь контрольное слово "цена". Находим его в в ячейке и переносим в конец фразы.
То есть, мы имеем столбец с фразами, над которым будем творить волшебство, и столбец с контрольными словами, которые будем искать в первом столбце. Файл с примером прилагается.
1. Считываем фразы в массив. 2. Считываем слова правил в словарь Dictionary, в качестве значения True, если слово в начало, False, если в конец. 3. Создаём равный массив вывода 4. Цикл по массиву фраз 5. Берём очередную фразу. Split по пробелам, получаем массив слов 6. По массиву слов. Проверяем - есть ли слово в словаре. Если есть, то меняем порядок по значению словаря и выходим из цикла слов. 7. Join для массива слов и запись в массив вывода. 8. По окончании цикла по массиву фраз выводим массив вывода на лист. Так как-то. Успехов.
Спасибо большое за ответ, но увы, программировать под excel я пока не умею, подумал, может у кого-то есть готовое решение. Но когда возьмусь программировать, обязательно воспользуюсь вашим пояснением.
Public Function WordsChange(St As String, Rule_s As Range, Rule_e As Range)
Dim arrString() As String
Dim j As Integer
Dim ps As String, pe As String
arrString = Split(St, " ")
For j = LBound(arrString) To UBound(arrString)
If Not IsError(Application.VLookup(arrString(j), Rule_s, 1, 0)) Then
ps = ps & "" & arrString(j)
arrString(j) = ""
ElseIf Not IsError(Application.VLookup(arrString(j), Rule_e, 1, 0)) Then
pe = pe & "" & arrString(j)
arrString(j) = ""
End If
Next j
WordsChange = WorksheetFunction.Trim(ps & " " & Join(arrString, " ") & " " & pe)
End Function
Sub Переместить_слово_в_начало()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
Application.DisplayStatusBar = False
Application.DisplayAlerts = False
Dim c, r, Lastrow As Long, Sl
Sl = " " & InputBox("Введите СЛОВОСОЧЕТАНИЕ!!! для переноса в начало фразы с учётом рЕгИсТрА!") & " "
Lastrow = Cells(Rows.Count, 1).End(xlUp).Row
c = 1
r = 13
Do
If r > Lastrow Then
Exit Do
End If
If Cells(r, c).EntireRow.Hidden <> True Then
Cells(r, c).Select
Cells(r, c) = " " & Cells(r, c) & " "
Set k = Selection.Find(What:=Sl, LookIn:=xlValues, LookAt:=xlPart)
If k Is Nothing Then
Cells(r, c) = Application.Trim(Cells(r, c))
Else
'Cells(R, C).Value = " " & Cells(R, C).Value & " "
Old = Cells(r, c).Value
Cells(r, c).Value = Sl & Replace(Old, Sl, " ")
Selection.Replace What:="!", Replacement:="! ", LookAt:=xlPart
Selection.Replace What:=",", Replacement:=", ", LookAt:=xlPart
Selection.Replace What:=".", Replacement:=". ", LookAt:=xlPart
Cells(r, c) = Application.Trim(Cells(r, c))
End If
End If
r = r + 1
Loop
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.DisplayStatusBar = True
Application.DisplayAlerts = True
End Sub
Sub Переместить_слово_в_конец()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
Application.DisplayStatusBar = False
Application.DisplayAlerts = False
Dim c, r, Lastrow As Long, Sl
Sl = " " & InputBox("Введите СЛОВОСОЧЕТАНИЕ!!! для переноса в Конец фразы!") & " "
Lastrow = Cells(Rows.Count, 1).End(xlUp).Row
c = 1
r = 13
Do
If r > Lastrow Then
Exit Do
End If
If Cells(r, c).EntireRow.Hidden <> True Then
Cells(r, c).Select
Cells(r, c) = " " & Cells(r, c) & " "
Set k = Selection.Find(What:=Sl, LookIn:=xlValues, LookAt:=xlPart)
If k Is Nothing Then
Cells(r, c) = Application.Trim(Cells(r, c))
Else
Old = Cells(r, c).Value
Cells(r, c).Value = Replace(Old, Sl, " ") & Sl
Selection.Replace What:="!", Replacement:="! ", LookAt:=xlPart
Selection.Replace What:=",", Replacement:=", ", LookAt:=xlPart
Selection.Replace What:=".", Replacement:=". ", LookAt:=xlPart
Cells(r, c) = Application.Trim(Cells(r, c))
End If
End If
r = r + 1
Loop
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.DisplayStatusBar = True
Application.DisplayAlerts = True
End Sub
Bema, спасибо)) но возник вопрос - а как в случае с формулой быть, если в ячейке Е2 нет слова "купить" ? переместил слово в Е3, а в Е2 написал "заказать", в D2 слово "купить" осталось в середине фразы.