Danes sem bil soočen z zelo zanimivim izzivom. Kolega je potreboval malce statistično obdelane podatke.
Podatki obsegajo pojavljanje tornadov za mesece april, maj in junij, za tri zvezne države in še zanimivost, zbrani so za obdobje 1970 - 2010. Vsaka država je urejena na svojem listu, stolpci pa si sledijo tako: dan v mesecu, april, maj, junij, dan v mesecu, april, maj, junij, dan v mesecu,...
Najprej sem neobdelane podatke skopiral v nov zvezek in pobrisal podatke, ki me niso zanimali oziroma so me motili.
Sub brisanje()
Dim a As Integer
Dim i As Integer
'od zadnjega stolpca pobrišemo vsak 4. stolpec
For i = 1 To 40
a = 165 - (4 * i)
ActiveWorkbook.Sheets("List1").Select
ActiveSheet.Cells(1, a).EntireColumn.Delete
Next
End Sub
Nato sem skopiral podatke iz večih stolpcev v en sam stolpec:
Sub kopiranje()
Dim i As Integer
Dim a As Integer
For i = 1 To 41
a = i * 3
'izberemo prvi stolpec z uporabnimi podatki in jih kopiramo
ActiveWorkbook.Sheets("List1").Select
Range(Cells(3, a), Cells(32, a)).Select
Selection.Copy
'prilepimo jo na nov delovni list
ActiveWorkbook.Sheets("List2").Select
ActiveSheet.Cells((i * 91 - 90), 2).Select
ActiveSheet.Paste
'spet gremo na prvi delovni list in izberemo drugi stolpec in ga kopiramo
ActiveWorkbook.Sheets("List1").Select
Range(Cells(3, a + 1), Cells(33, a + 1)).Select
Selection.Copy
'prilepomo ga na koncu prvega kopiranega stolpca
ActiveWorkbook.Sheets("List2").Select
ActiveSheet.Cells((i * 91 + 30 - 90), 2).Select
ActiveSheet.Paste
ActiveWorkbook.Sheets("List1").Select
Range(Cells(3, a + 2), Cells(32, a + 2)).Select
Selection.Copy
'junij
ActiveWorkbook.Sheets("List2").Select
ActiveSheet.Cells((i * 91 + 61 - 90), 2).Select
ActiveSheet.Paste
'to naredimo za i * 41 stolpcev
Next
End Sub
Seveda moramo podatkom pripisati še datum. Vmes so seveda tudi prestopna leta, zato ne moremo direktno uporabit funkcije =A1+365 ;)
Lahko pa naredimo tako:
Sub datumi()
Dim i As Integer
For i = 1 To 41
'izberemo prvo celico na listu 2 in vanjo vpišemo 1.4. (na angleški način)
ActiveWorkbook.Sheets("List2").Select
ActiveSheet.Cells((i * 91 - 90), 1).Select
ActiveCell = "4/1/" & 1969 + i
'nato zapolnimo vseh 90 zaporednih dni in v drugem krogu spet vpišemo 1.4. in prištejemo i-to leto
Selection.AutoFill Destination:=Range(Cells((i * 91 - 90), 1), Cells((i * 91), 1))
Next
End Sub
To je nekako to. Za napake pa ne odgovarjam, zato uporabljajte varnostne kopije podatkov.
Ni komentarjev:
Objavite komentar