Преобразование диапазона строк в разделенный запятыми список в буфере обмена

у меня есть некоторые данные в электронной таблице excel, которые мне нужно переформатировать. Существующий формат в строках. Желаемый формат-через запятую.

в другом месте на superuser я нашел сценарий VBA, который получает меня около 75% пути туда...

преобразовать столбец в список, разделенный запятыми.

Sub generatecsv() 

Dim i As Integer
Dim s As String

i = 1

Do Until Cells(i, 1).Value = ""
    If (s = "") Then
        s = Cells(i, 1).Value
    Else
        s = s & "," & Cells(i, 1).Value
    End If
    i = i + 1 
Loop

Cells(1, 2).Value = s

End Sub

недостатки этого сценария для моего предполагаемого рабочего процесса в настоящее время:

диапазон ячеек всегда должен быть в столбце 1. Я сценарий должен принимать входные данные из выбранного диапазона в любом месте листа.

вывод скрипта всегда отображается в ячейке (1,2). Я хотел бы скопировать в буфер обмена.

Я надеялся, что что-то вроде s.Копировать или s.PutInClipboard будет работать, но я получаю ошибки.

данные выглядят так:

Topic 1
Mike
Tony
Dave


Topic 2 
Steve
Joe
Sally


Topic 3
...

желаемый результат будет такой:

Mike, Tony, Dave

(в буфер обмена)

затем на следующий итерация:

Steve, Joe, Sally

(в буфер обмена)

3
задан Community
07.11.2022 21:44 Количество просмотров материала 3628
Распечатать страницу

1 ответ

во-первых, в книге, содержащей макрос, в IDE VBA перейдите в меню Сервис - > ссылки и добавьте ссылку на "библиотеку объектов Microsoft Forms 2.0" (путь к файлу в моей системе C:\Windows\system32\FM20.DLL.)

затем попробуйте этот макрос. Этот макрос поместит данные, которые "выбраны"(выделены) в буфер обмена. Он будет идти слева направо, если вы выберите ряд ячеек в той же строке; он будет идти сверху вниз, если вы выберите ряд ячеек в том же столбце.

Если вам нужно делать составной из строк и столбцов (прямоугольник в форме выбор из более чем одну строку и несколько столбцов), можно добавить в код:

MsgBox "Row: " & cell.Row & " Column: " & cell.Column

, чтобы определить, какие номера строк (на основе 1) и номера столбцов (a=1) перечисляются и в каком порядке.

Если вам нужно что-то, что будет поместить данные в буфер обмена, а затем ждать действия пользователя, а затем поместить следующий набор данных в буфер обмена автоматически, этот макрос будет должны быть изменены. Из вашего вопроса неясно, что именно вы подразумеваете под "выбранным".

Sub su492198()
Dim cell As Range
Dim sel As Range
Dim output As String
Dim first As Boolean
Dim dat As New DataObject

first = True
output = ""

On Error GoTo Errhndl
Set sel = Selection
On Error GoTo 0

For Each cell In sel.Cells
    If first = False Then output = output & ", "
    output = output & cell.Value
    first = False
Next

On Error GoTo Errclip
dat.SetText output
dat.PutInClipboard
On Error GoTo 0

Exit Sub
Errhndl:
MsgBox "Can't use this macro if nothing is selected or a non-cell object is selected"
Exit Sub
Errclip:
MsgBox "Error copying text to clipboard! Text was: " & output
End Sub
2
отвечен Horn OK Please 2022-11-09 05:32

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх