2017-01-19 3 views
0

Я пытаюсь разбить лист Excel на несколько листов. На листе, который я пытаюсь разбить, есть много таблиц, и каждый из них разделяется «-----», который появляется после каждой таблицы в столбце A. Кто-нибудь знает, как извлечь информацию до и после каждого " ----- "и положить его на новый лист? Я не против копирования строки на новый лист. Если у меня есть 10 таблиц на листе, разделенных «-----», я бы хотел, чтобы 10 листов, каждая с другой таблицей.Как разбить лист Excel на несколько листов на основе значения разделителя?

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

+0

Какие попытки вы сделали? Пожалуйста, покажите любой код/​​формулы, которые вы пробовали, и что работает/не работает. Вы также можете использовать Data -> Text to Columns для разделения данных на основе разделителя, вы это пробовали? – BruceWayne

+0

Это не особенно сложно; 'startRng = topOfSheet; Loop: nextRng = find-the-pattern начиная с startRng, скопируйте диапазон между startRng и nextRng в новый лист, startRng = nextRng.offset (1) '. Петля продолжается до тех пор, пока шаблон не будет найден. Начните кодировать это, и когда вы столкнетесь с любыми проблемами блокировки, вставьте код, и мы будем рады помочь. –

ответ

2

Это должно сработать. Измените searchString согласно вашему требованию. Он не создаст новый лист для первого набора данных, что означает, что он создаст 9 дополнительных листов, а исходный лист будет 10-м листом

Option Explicit 

Sub serachAndCopy() 
    Dim searchString As String 
    searchString = "---" 

    Dim lastRow As Integer, i As Integer 
    lastRow = 0 

    Dim thisSheet As Worksheet 
    Set thisSheet = Sheets("Sheet1") 

    Dim sh As Worksheet 

    For i = thisSheet.Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1 
     If (thisSheet.Range("A" & i) = searchString) Then 
      If lastRow = 0 Then 
       lastRow = i 
       Else 
       Sheets.Add After:=Sheets(Sheets.Count) 
       Set sh = ActiveSheet 
       thisSheet.Rows(i + 1 & ":" & lastRow).Copy Destination:=sh.Rows("1:1") 

       thisSheet.Rows(i + 1 & ":" & lastRow).Delete 
       lastRow = i 
      End If 
     End If 
    Next i 
End Sub 
+0

Ничего себе, спасибо! Это сделало именно то, что мне нужно. Я только начал изучать VBA несколько недель назад, поэтому я очень ценю помощь – studiis

Смежные вопросы