Мне поручено извлечь данные из листа Excel, который странно/плохо отформатирован. Слишком много данных для ручной копирования, поэтому я пытаюсь использовать макрос. Я не очень разбираюсь в VBA, но знаю немного (возможно, достаточно, чтобы что-то сломать :)).Excel Macro копирует плохо отформатированные данные в таблицу
Я сейчас работаю только на 1 листе, но есть несколько листов, все они отформатированы одинаково. Вот фрагмент того, как выглядят исходные данные: Я выделил ячейки, которые мне нужно скопировать. Остальные данные не важны и их не нужно извлекать.
Как вы можете видеть, исходные данные не отформатирован как традиционные строки и столбцы, чтобы не сказать больше.
Я копирую эти данные в таблицу, которую я установил на новом листе.
**** Редактировать: **** Я обновил свой код. Я понял, что данные были отформатированы там, где есть те же промежутки между строками в данных, которые мне нужны, а точнее. У меня теперь есть цикл While While, который каждый раз увеличивает индекс Row на 14, чтобы перейти к следующей записи.
Этот код работает, но я собираюсь сделать это правильным способом ??? Мне нужно будет повторить этот процесс примерно для 50 листов, некоторые из которых имеют 1000 или более записей.
Sub CopyData()
Dim SourceSheet As Worksheet
Dim DestSheet As Worksheet
Dim DestRow As Long
Dim i As Integer
i = 0
Set SourceSheet = Sheets("Sheet1")
Set DestSheet = Sheets("Data")
Do While i < 100
DestRow = DestSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
SourceSheet.Cells(2 + i, 1).Copy
DestSheet.Range("A" & DestRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
SourceSheet.Cells(2 + i, 2).Copy
DestSheet.Range("D" & DestRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
SourceSheet.Cells(3 + i, 2).Copy
DestSheet.Range("E" & DestRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
SourceSheet.Cells(4 + i, 2).Copy
DestSheet.Range("F" & DestRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
SourceSheet.Cells(2 + i, 7).Copy
DestSheet.Range("C" & DestRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
SourceSheet.Cells(5 + i, 7).Copy
DestSheet.Range("G" & DestRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
SourceSheet.Cells(14 + i, 2).Copy
DestSheet.Range("B" & DestRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
i = i + 14
Loop
End Sub
Я бы отметил это как ответ. Что касается проверки ошибок на одноразовое, что вы запускаете себя, я бы не стал беспокоиться. Для новичков вы хорошо себя чувствуете, поэтому, надеюсь, вы сможете использовать VBA для чего-то более длительного. Тем не менее, удовлетворение от написания чего-то такого, что сокращает количество часов работы до щелчка кнопки, отлично. –
Спасибо, что я никогда не отвечал на свой вопрос раньше, поэтому я точно не знал, как это работает. Я буду отмечать как ответ, как только это позволит мне. Проблемы и решения, подобные этому, именно то, что мне нравится в программировании. –