Объединить одну (!) Строку с разделителем - PullRequest
1 голос
/ 09 июля 2019

У меня есть следующие данные:

Surname: John Walter Friedrich
Name: Waterford Harrington from Downhill

Каждое слово (разделенное " ") в новом столбце (здесь: «Фамилия:» = A1, «Джон» = B1, ... »Фридрих "= D1).

У меня есть пользовательская форма с текстовыми полями.

Что я хочу: скопировать слова из ячеек A1: (последняя не пустая ячейка в строке) в текстовое поле в пользовательской форме.-> Текстовое поле заполнено: "John Walter Friedrich" (отделено " ")

Я пробовал различные коды, но не нашел ничего, что соответствует моей проблеме.

Чего я не хочу: Объединить ряды!Это то, что я нашел, но у меня есть для одного текстового поля только один ряд.Поэтому я не хочу проходить каждую строку до тех пор, пока одна из них не станет пустой (потому что следующая заполнена).

PS: Я не могу получить данные в своем листе Excel, разделенные " ", чтобы скопировать их.Проблема: не следует копировать первое слово (фамилию или имя)!

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Проверьте это:

Public Sub Test()

    Dim InputText As String
    InputText = "Surname: John Walter Friedrich"  'or Worksheets("Sheet1").Range("A1").Value

    MsgBox Right$(InputText, Len(InputText) - InStr(1, InputText, " "))

End Sub
0 голосов
/ 09 июля 2019

Если ваши данные выглядят так:

enter image description here

Вы можете объединить их, пройдя от столбца B к последнему использованному столбцу. Чтобы найти последнюю использованную ячейку в строке, используйте

Set LastUsedCellInRow = ws.Cells(RowNumber, ws.Columns.Count).End(xlToLeft)

Итак, вы получите что-то вроде этого:

Option Explicit

Public Sub TestConcat()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1")

    Dim RowNumber As Long
    RowNumber = 2

    Dim LastUsedCellInRow As Range
    Set LastUsedCellInRow = ws.Cells(RowNumber, ws.Columns.Count).End(xlToLeft)

    MsgBox ConcatenateSpaced(ws.Range("B" & RowNumber, LastUsedCellInRow))
End Sub

Public Function ConcatenateSpaced(InputRange As Range) As String
    If InputRange.Rows.Count = 1 Then
        Dim cell As Range
        For Each cell In InputRange
            ConcatenateSpaced = ConcatenateSpaced & " " & cell.Value
        Next cell
    End If

    ConcatenateSpaced = Trim$(ConcatenateSpaced)
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...