Объединить текст UDF в Excel, объединить два столбца - PullRequest
0 голосов
/ 06 августа 2020

Я здесь новенький, и это мой первый вопрос. Я создал функцию соединения текста UDF. но он объединяет только первый диапазон, а затем второй диапазон, если ячейки.

В то время как я хочу, чтобы он получал значение ячейки 1 из столбца 1, а затем объединял его с ячейкой 1 столбца 2, затем снова объединял ячейку 2 столбца 1 и ячейка 2 столбца 2 и т. д.

Более того, если данные в coulmn 1 доступны, но не в столбце 2, тогда он должен получить значение ячейки 1 столбца 2 и объединить его, например, с ячейкой 14 столбца 1.

Надеюсь, все понятно.

Column 1      column2
A               1
B               2
C               3
D               4
E
F
G

И вывод должен быть

A1B2C3D4E1F2G3

Заранее спасибо

Мой код такой же, как

Function Text_Join(delimiter As String, Ignore_Empty As Boolean, ParamArray text() As Variant)
   Dim Rg As Variant 
   Dim rgCell As Variant
   Dim amal As Range 
   Dim i As Long 
   Dim NewArray() As Variant
   
   i = 0
   
   For Each Rg In text
       If TypeName(Rg) = "Range" Then
           For Each rgCell In Rg
           If Not Ignore_Empty Or Not IsEmpty(rgCell) Then
                ReDim Preserve NewArray(i)
                NewArray(i) = rgCell
                i = i + 1
           End If
           Next
       Else
           If Not Ignore_Empty Or Not IsEmpty(rgCell) Then
           ReDim Preserve NewArray(i)
           NewArray(i) = Rg
           i = i + 1
           End If
       End If
    Next    
    Text_Join = Join(NewArray, delimiter) 
End Function

1 Ответ

1 голос
/ 07 августа 2020

Чтобы помочь вам решить вашу проблему, я внес некоторые изменения в ваш код (в конце строки вы видите «Добавлено или удалено или изменено».

Function Text_Join(delimiter As String, Ignore_Empty As Boolean, text As Range) 'Changed
   Dim Rg As Variant
   Dim rgCell As Variant
   Dim amal As Range
   Dim i As Long
   Dim NewArray() As Variant
   Dim Result As String 'Added
   
   i = 0
   
   For Each Rg In text
       If TypeName(Rg) = "Range" Then
           For Each rgCell In Rg
           If Not Ignore_Empty Or Not IsEmpty(rgCell) Or rgCell.text <> "" Then 'Changed
                'ReDim Preserve NewArray(i)   'Removed
                'NewArray(i) = rgCell         'Removed
                'i = i + 1                    'Removed
                Result = Result + rgCell.text 'Added
           Else                               'Added
                Result = Result + "X"         'Added
           End If
           Next
       Else
           If Not Ignore_Empty Or Not IsEmpty(rgCell) Then
           ReDim Preserve NewArray(i)
           NewArray(i) = Rg
           i = i + 1
           End If
       End If
    Next
    'Text_Join = Join(NewArray, delimiter)   'Removed
    Text_Join = Result
End Function

Я тестировал с =Text_Join("";TRUE;A2:B8)

Результат: A1B2C3D4EXFXGX

Надеюсь, у вас достаточно навыков, чтобы решить оставшуюся проблему ? Suc6!

...