Войти

Показать полную графическую версию : Собрать строку уникальных значений ячеек


stuermer01
14-06-2021, 18:41
Добрый день.

Есть функция, которая собирает строку из текстовых значений ячеек:


Function myJoin(myRange As Range, myDelimiter As String)
myJoin = ""
For Each oCell In myRange
If myJoin <> "" And oCell.Value <> "" Then myJoin = myJoin & myDelimiter
myJoin = myJoin & oCell.Value
Next oCell
End Function


Подскажите, как сделать, чтобы она не добавляла повторяющиеся значения, т.е. чтобы каждое значение встречалось только один раз, а его повторы пропускались.

Iska
14-06-2021, 22:03
Что такое smfJoin и откуда она берётся?!

как сделать, чтобы она не добавляла повторяющиеся значения, т.е. чтобы каждое значение встречалось только один раз, а его повторы пропускались. »
Сначала соберите словарь. Потом объедините его ключи.
Option Explicit

Sub Sample()
MsgBox JoinUnique(Selection, "*")
End Sub

Function JoinUnique(objRange As Range, strDelimiter As String)
Dim objDictionary As Object
Dim objCell As Range


Set objDictionary = CreateObject("Scripting.Dictionary")

For Each objCell In objRange.Cells
If Not IsEmpty(objCell.Value) Then
If Not objDictionary.Exists(objCell.Value) Then
objDictionary.Add objCell.Value, 0
End If
End If
Next objCell

If objDictionary.Count > 0 Then
JoinUnique = Join(objDictionary.Keys, strDelimiter)
Else
JoinUnique = ""
End If

objDictionary.RemoveAll
Set objDictionary = Nothing
End Function

stuermer01
15-06-2021, 14:00
Что такое smfJoin и откуда она берётся?! »
myJoin, сорри опечатка, исправил.

У вас вызов Join имеется ввиду myJoin?

stuermer01
15-06-2021, 17:56
Сначала соберите словарь. Потом объедините его ключи. »
работает, спасибо.

Iska
15-06-2021, 22:25
У вас вызов Join имеется ввиду myJoin? »
Нет, это обычная функция VBA: Join function (Visual Basic for Applications) | Microsoft Docs (https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/join-function), сливает одномерный массив в строку.

По работе со словарём рекомендую исчерпывающую статью: Исчерпывающее описание объекта Dictionary - Макросы и программы VBA - Excel - Каталог статей - Perfect Excel (http://perfect-excel.ru/publ/excel/makrosy_i_programmy_vba/ischerpyvajushhee_opisanie_obekta_dictionary/7-1-0-101).




© OSzone.net 2001-2012