četrtek, 10. marec 2011

Urejanje podatkov in zapolnitev celic

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