Tehoa taulukon käsittelyyn

Hei. Olen kopsannut netistä taulukoita välilehdille ja niistä koonnut yhtenäisen taulukon. Mun osaamisella jo kuudella välilehdellä olevien taulukoiden kasaamisessa menee reilut 8,5 min. Tohon nopeuteen mä pyytäsin apuu, niin tulis homma mielekkäämmäks.
Tos olis yhen kopioidun (Ottelut) taulukon osote, jos siit on apuu. Ylärivin nimet oon muuttanu samanlaiseks kuin vasemmas laidas on.
https://fi.wikipedia.org/wiki/Englannin_Valioliigan_kausi_2015–2016

Sub Lue_Data()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim r1 As Integer
Dim r2 As Integer
Dim solu As Range
Application.ScreenUpdating = False
ActiveSheet.Unprotect
r1 = 9: r2 = 9
For i = 6 To Sheets.Count
For j = 2 To 21
For k = 2 To 21
Range("A" & r1) = Sheets(i).Range("A" & j)
If Range("A" & r1) <> Sheets(i).Range("A" & k) Then
Range("B" & r1) = Sheets(i).Range("A" & k)
r1 = r1 1
Else
Range("A" & r1) = ""
End If
Next
For Each solu In Sheets(i).Range("B" & j & ":U" & j)
If solu <> "" Then
Range("C" & r2) = solu
Range("F" & r2) = Sheets(i).Name
r2 = r2 1
End If
Next
Next
Next
ActiveSheet.Protect
Application.ScreenUpdating = True
End Sub
4450
Äänestä

Muut lukivat myös

Vastaukset 4

Vanhimmat

Tuleeko taulukosta kuitenkin sellainen kuin haluat?
Esim. tämä rivi kirjoittaa samaan soluun 20 kertaa:
Range("A" & r1) = Sheets(i).Range("A" & j)

Äänestä

Just sellanen kun pitää. Siis se toimii ja on käytössä, mutta niin pirullisen hidas,. Eli A-sarakkeeseen 19 riviä allekkain kotijoukkue (sama) ja B-sarakkeeseen vierasjoukkueet, sekä C-sarakkeeseen tulos. Sit seuraavat "joukkueet" noitten alle samalla systeemillä. Esim. tos kuuden pelikauden tilastossa on vajaat 2300 rivii tuloksii

Äänestä

Sub Fiksattu()
Dim Tilasto As Worksheet
Dim Alue As Variant
Dim Alue2 As Variant
Dim Solu As Range
Dim j As Long
Dim k As Long
Dim vika As Long

Application.ScreenUpdating = False
ActiveSheet.Unprotect
Set Tilasto = ActiveSheet
Tilasto.Range("A:F") = ""
k = 0
For i = 6 To Sheets.Count
For Each Solu In Worksheets(i).Range("A2:A21")
vika = Tilasto.Cells(Rows.Count, "A").End(xlUp).Row 1
If vika < 9 Then vika = 9
Range(Cells(vika, "A"), Cells(vika 19, "A")).Value = Solu
Range(Cells(vika, "F"), Cells(vika 19, "F")).Value = Worksheets(i).Name
Next Solu
For j = 1 To 20
Alue = Worksheets(i).Range("B1:U1").Value
Tilasto.Range("B9").Offset(k, 0).Resize(20, 1) = Application.WorksheetFunction.Transpose(Alue)
Alue2 = Worksheets(i).Range("B1:U1").Offset(j).Value
Tilasto.Range("C9").Offset(k, 0).Resize(20, 1) = Application.WorksheetFunction.Transpose(Alue2)
k = k 20
Next
Next
vika = Tilasto.Cells(Rows.Count, "A").End(xlUp).Row 1
Tilasto.Range("C9:C" & vika).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
ActiveSheet.Protect
Application.ScreenUpdating = True
End Sub


Keep EXCELing
@Kunde

Äänestä

Kiitti koodista, toimii hienosti. En vain älynny kertoo kaikkee.
Laitan toiveet, jos sais nää muutettuu.

Rivit 1-8 säilys muuttumattona (sisältää otsikoita ja muuta tekstii, nyt tyhjenee)
Sarakkeet A-F riviltä 9 lähtien säilyttäs kohteen muotoilun
Sarakkeissa D-E olevat kaavat säilyisivät, nyt häippäsee

Saisko jonkun tämmösen rivin C-sarakkeen välimerkin mahdollista muuttamista varten.
Ottasin sen tarvittaessa käyttöön (ollut yhdellä sivulla erilainen merkki).
Selection.Replace What:="–", Replacement:="-", SearchOrder:=xlByColumns, MatchCase:=True

Äänestä

Kommentoi aloitusta


1x2 kirjoitti:

Hei. Olen kopsannut netistä taulukoita välilehdille ja niistä koonnut yhtenäisen taulukon. Mun osaamisella jo kuudella välilehdellä olevien taulukoiden kasaamisessa menee reilut 8,5 min. Tohon nopeuteen mä pyytäsin apuu, niin tulis homma mielekkäämmäks.
Tos olis yhen kopioidun (Ottelut) taulukon osote, jos siit on apuu. Ylärivin nimet oon muuttanu samanlaiseks kuin vasemmas laidas on.
https://fi.wikipedia.org/wiki/Englannin_Valioliigan_kausi_2015–2016

Sub Lue_Data()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim r1 As Integer
Dim r2 As Integer
Dim solu As Range
Application.ScreenUpdating = False
ActiveSheet.Unprotect
r1 = 9: r2 = 9
For i = 6 To Sheets.Count
For j = 2 To 21
For k = 2 To 21
Range("A" & r1) = Sheets(i).Range("A" & j)
If Range("A" & r1) <> Sheets(i).Range("A" & k) Then
Range("B" & r1) = Sheets(i).Range("A" & k)
r1 = r1 1
Else
Range("A" & r1) = ""
End If
Next
For Each solu In Sheets(i).Range("B" & j & ":U" & j)
If solu <> "" Then
Range("C" & r2) = solu
Range("F" & r2) = Sheets(i).Name
r2 = r2 1
End If
Next
Next
Next
ActiveSheet.Protect
Application.ScreenUpdating = True
End Sub

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu