Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Собрать строку уникальных значений ячеек (http://forum.oszone.net/showthread.php?t=349008)

stuermer01 14-06-2021 18:41 2960260

Собрать строку уникальных значений ячеек
 
Добрый день.

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

Скрытый текст

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 2960278

Что такое smfJoin и откуда она берётся?!

Цитата:

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

Сначала соберите словарь. Потом объедините его ключи.
Скрытый текст
Код:

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 2960324

Цитата:

Цитата Iska
Что такое smfJoin и откуда она берётся?! »

myJoin, сорри опечатка, исправил.

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

stuermer01 15-06-2021 17:56 2960334

Цитата:

Цитата Iska
Сначала соберите словарь. Потом объедините его ключи. »

работает, спасибо.

Iska 15-06-2021 22:25 2960353

Цитата:

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

Нет, это обычная функция VBA: Join function (Visual Basic for Applications) | Microsoft Docs, сливает одномерный массив в строку.

По работе со словарём рекомендую исчерпывающую статью: Исчерпывающее описание объекта Dictionary - Макросы и программы VBA - Excel - Каталог статей - Perfect Excel.


Время: 20:35.

Время: 20:35.
© OSzone.net 2001-