Загрузка данных


Sub PasteRowWithListInFirstCell()
    Dim DataObj As Object
    Dim rawText As String
    Dim lines() As String
    Dim linePart As String
    Dim firstCellContent As String
    Dim remainingText As String
    Dim otherParts() As String
    Dim i As Long, j As Long
    Dim tabPos As Long

    ' --- 1. Читаем буфер обмена ---
    On Error Resume Next
    Set DataObj = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    DataObj.GetFromClipboard
    rawText = DataObj.GetText
    On Error GoTo 0

    If rawText = "" Then
        MsgBox "Буфер обмена пуст или не содержит текст.", vbExclamation
        Exit Sub
    End If

    ' --- 2. Нормализуем переносы строк ---
    rawText = Replace(rawText, vbCrLf, vbLf)
    rawText = Replace(rawText, vbCr, vbLf)

    ' --- 3. Ищем первую табуляцию: разбиваем на «первую ячейку» и «остальное» ---
    tabPos = InStr(1, rawText, vbTab)

    If tabPos = 0 Then
        ' Табуляции нет — всё в первую ячейку
        firstCellContent = rawText
        remainingText = ""
    Else
        ' Часть до первой табуляции (включая переносы) = первая ячейка
        firstCellContent = Left(rawText, tabPos - 1)
        ' Всё после первой табуляции — будущие ячейки 2, 3, ...
        remainingText = Mid(rawText, tabPos + 1)
    End If

    ' Убираем возможный последний перенос строки внутри первой ячейки
    If Right(firstCellContent, 1) = vbLf Then
        firstCellContent = Left(firstCellContent, Len(firstCellContent) - 1)
    End If

    ' --- 4. Вставляем первую ячейку ---
    ActiveCell.Value = firstCellContent
    ActiveCell.WrapText = True

    ' --- 5. Обрабатываем остаток (если есть) ---
    If remainingText <> "" Then
        ' Убираем хвостовой vbLf, если он есть
        If Right(remainingText, 1) = vbLf Then
            remainingText = Left(remainingText, Len(remainingText) - 1)
        End If

        ' Теперь оставшийся текст может содержать табуляции и, возможно, переносы строк,
        ' но мы исходим из того, что остальные ячейки однострочные.
        ' Разбиваем по табуляции — это ячейки 2, 3, ...
        otherParts = Split(remainingText, vbTab)

        ' Вставляем справа от активной
        For i = LBound(otherParts) To UBound(otherParts)
            ActiveCell.Offset(0, i + 1).Value = otherParts(i)
            ActiveCell.Offset(0, i + 1).WrapText = True
        Next i
    End If
End Sub