Здравствуйте, подскажите пожалуйста как из одной ячейки исключить слова находящиеся в других ячейках. У меня в ячейка "B13:K13", находятся текст который сцепляется функцией "сцепитьмного", взял отсюда, теперь нужно исключить слова из этой функции, которые находятся в ячейках "O13:X13". Можно конечно воспользоваться функцией "подставить", но это нужно прописывать для каждой ячейки. Есть какой-нибудь способ по короче?
если не писать отдельную функцию то можно заменив на TextJoin (ОБЪЕДИНИТЬ) встроенные или UDF и формулу массива =TextJoin(";";;IF(ISNUMBER(MATCH(B13:K13;O13:X13;));"";B13:K13))
Function СцепитьМного(Диапазон As Range, Optional Разделитель As String = " ", Optional БезПовторов As Boolean = False, Optional Исключение As Range)
Dim avData, isData, lr As Long, lc As Long, sRes As String
avData = Диапазон.Value
If Not IsArray(avData) Then
СцепитьМного = avData
Exit Function
End If
For lc = 1 To UBound(avData, 2)
For lr = 1 To UBound(avData, 1)
If Len(avData(lr, lc)) Then
sRes = sRes & Разделитель & avData(lr, lc)
End If
Next lr
Next lc
If Len(sRes) Then
sRes = Mid(sRes, Len(Разделитель) + 1)
End If
Dim oDict As Object, sTmpStr
Set oDict = CreateObject("Scripting.Dictionary")
If БезПовторов Then
sTmpStr = Split(sRes, Разделитель)
On Error Resume Next
For lr = LBound(sTmpStr) To UBound(sTmpStr)
oDict.Add sTmpStr(lr), sTmpStr(lr)
Next lr
sRes = ""
sTmpStr = oDict.keys
For lr = LBound(sTmpStr) To UBound(sTmpStr)
sRes = sRes & IIf(sRes <> "", Разделитель, "") & sTmpStr(lr)
Next lr
End If
If Not Исключение Is Nothing Then
isData = Исключение.Value
sTmpStr = Split(sRes, Разделитель)
oDict.RemoveAll
For lc = 1 To UBound(isData, 2)
For lr = 1 To UBound(isData, 1)
If Len(isData(lr, lc)) Then
If Not oDict.Exists(isData(lr, lc)) Then oDict.Add isData(lr, lc), isData(lr, lc)
End If
Next lr
Next lc
sRes = ""
For lr = LBound(sTmpStr) To UBound(sTmpStr)
If Not oDict.Exists(sTmpStr(lr)) Then sRes = sRes & IIf(sRes <> "", Разделитель, "") & sTmpStr(lr)
Next lr
End If
СцепитьМного = sRes
End Function
НУ да, ооочень круто, спасибо. А еще один вопрос, а если у меня сцепляет вот такого типа формулы "=ЕСЛИ(C6="";"";C6&СИМВОЛ(10))"", то тогда разделитель ставиться в начале, а не в конце. Ну это не критично, но все же может быть можно, сделать, чтобы он прописывался в конце. Я сделал так эту формулу, чтобы после сцепления Показывался весь текст ни одной строкой, а типа через ALT+ENTER