/ / Макро за Excel за отстраняване на данни - excel, vba, excel-vba

Макро Excel за отстраняване на данни - excel, vba, excel-vba

Имам данни, които са били подредени преди менполучават го. Има няколко реда стойности за един идентификационен номер. Бих искал да преобразувам тези няколко реда в един ред, като добавям колони и извличам определен диапазон от данни.Така че първоначалните ми данни изглеждат така: въведете описанието на изображението тук

И изходните данни трябва да изглеждат така:

въведете описанието на изображението тук

В идеалния случай бих искал да видя макроса по два начинав този случай тя изкарва набор от колони, които са заедно (B: C), но също така бих искал да видя дали колоните не са последователни (например B и E).

Благодаря за всяка помощ, оценявам го!

Отговори:

1 за отговор № 1

Това трябва да направи това, което искате, като премахнете данните в Sheet2, така че Sheet1 да не е презаписан - основно по-безопасното нещо, което трябва да направите. Не създава таблица в Sheet2, а просто пише данните.

Състои се от два вътрешни бримки: който итера над редове с идентични кодове и друг, който се повтаря над останалите. Трябва да се уверите, че стойността на заглавката на клетка B1 не е равна на първата стойност на ИД - което не би трябвало да е проблем, тъй като вашите идентификационни номера са числа и B1 винаги ще бъде "ID".

Sub UnstackData()
Dim wSht1 As Worksheet, wSht2 As Worksheet
Set wSht1 = Sheets("Sheet1")
Set wSht2 = Sheets("Sheet2")

Dim r As Integer: r = 2
Dim r2 As Integer: r2 = 1
Dim r1 As Integer, c2 As Integer

With wSht1
wSht2.Rows(1).Value = .Rows(1).Value
r1 = .Cells(.Rows.Count, "A").End(xlUp).Row

Do While r <= r1
c2 = 6

Do While .Cells(r, "A") = .Cells(r - 1, "A")
wSht2.Cells(r2, c2).Value = .Cells(r, "B").Value
wSht2.Cells(r2, c2 + 1).Value = .Cells(r, "C").Value
c2 = c2 + 2
r = r + 1
Loop
r2 = r2 + 1

Do While .Cells(r, "A") <> .Cells(r - 1, "A")
wSht2.Range("A" & r2 & ":E" & r2).Value = .Range("A" & r & ":E" & r).Value
r = r + 1
r2 = r2 + 1
Loop
r2 = r2 - 1

Loop

End With

End Sub