1

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

В другом месте на суперпользователе я нашел скрипт 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). Я хотел бы скопировать его в буфер обмена.

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

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

Topic 1
Mike
Tony
Dave


Topic 2 
Steve
Joe
Sally


Topic 3
...

Желаемый результат будет:

Mike, Tony, Dave

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

Тогда на следующей итерации:

Steve, Joe, Sally

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

1 ответ1

2

Сначала в рабочей книге, содержащей макрос, в интегрированной среде разработки 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .