Перемещение данных на лист назначения и форматирование вывода - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть данные в столбцах A: L на Листе 2, и я хочу скопировать каждый блок на основе начальной точки, как определенного текста ячейки и конечной точки, снова как определенного текста ячейки!Данные находятся в столбцах A: L и перемещаются вниз на блок за блоком enter image description here

Код, который у меня есть, завершен почти на 100%, но последняя часть, которую я пытаюсь выполнитьэто поместить каждый элемент в определенном порядке на листе назначения.Как мы знаем, столбцы - это A: L. Я хочу вставить свой первый блок в столбцы A: L в месте назначения, затем следующий в M: X, а затем последний в Y: AJ.Поскольку существует около 10 таких блоков, Tank Engine, Weatherman и т. Д. Я предполагаю, что сначала мне понадобятся три блока, а затем около трех рядов, которые являются пробелами, а затем повторяются.

Пример этого

enter image description here

Строки являются динамическими, но их длина не превышает 11.Код, который у меня есть,

Option Explicit

Sub MIKE3()
    Dim wsSrc As Worksheet 'define source
    Set wsSrc = ThisWorkbook.Worksheets("Sheet1")

    Dim wsDest As Worksheet 'define destination
    Set wsDest = ThisWorkbook.Worksheets("Sheet2")

    Dim FindList As Variant 'defind search words
    FindList = Array("Tank Engine")

    Dim i As Long

    Dim FindItm As Variant
    For Each FindItm In FindList
        Dim CopyRange As Range
        Set CopyRange = FindMyRange(wsSrc.Range("A:L"), FindItm, "INFORMATION: " & FindItm)
        If Not CopyRange Is Nothing Then
            CopyRange.Copy wsDest.Range("A1").Offset(ColumnOffset:=i) 'note that if the first column uses merged cells the ColumnOffset:=i otherwise it is ColumnOffset:=i*12
            i = i + 1
        End If
    Next FindItm
End Sub
Function FindMyRange(SearchInRange As Range, ByVal StartString As String, ByVal EndString As String) As Range
   'find start
    Dim FoundStart As Range
    Set FoundStart = SearchInRange.Find(What:=StartString, LookAt:=xlWhole)

    If FoundStart Is Nothing Then GoTo ERR_NOTHING_FOUND
    find end
    Dim FoundEnd As Range
    Set FoundEnd = SearchInRange.Find(What:=EndString, LookAt:=xlWhole, After:=FoundStart)

    If FoundEnd Is Nothing Then GoTo ERR_NOTHING_FOUND

    Set FindMyRange = SearchInRange.Parent.Range(FoundStart, FoundEnd).Resize(ColumnSize:=12)

    Exit Function'

ERR_NOTHING_FOUND:
    FindMyRange = Nothing
End Function

, спасибо PEH за его первоначальную помощь и спасибо за внимание!

1 Ответ

0 голосов
/ 21 ноября 2018

Мне удалось сделать эту работу, отредактировав строки в моих исходных данных, затем написав x количество макросов, чтобы покрыть мои сценарии, затем вызвав их один за другим в модуле

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...