Solun transponointi sarakkeeseen

Hei,

Tiedoston Taul1 sisältää X riviä tietoa, jokaisella rivillä tietoa on soluissa A:K. Tiedot pitäisi kopioda samaisen tiedoston välilehteen Taul2 sarakkeeseen B niin että yhden rivin tiedot ovat soluissa B1:B11, toisen rivin tiedot soluissa B12:B23, kolmannen rivin tiedot soluissa B24:B35 ja niin edelleen.

Onnistuuko makrolla tuo jotenkin?
212043
Äänestä

Muut lukivat myös

Vastaukset 21

Vanhimmat
  • Tuo ei skulaa ja sama transponointi onnistuu kyllä Excelissäkin, mutta ongelmaksi tässä muodostuu se, että makron pitäisi transponoida tiedot yhteen sarakkeeseen. Antamassasi esimerkissähän on aivan normaali transponointi, jolloin tiedot kopioituvat kolmelta riviltä kolmeen sarakkeeseen. Tarvitsisin siis jonkin VBA-koodin millä vaikka 250 rivistä saataisiin tiedot kopioitua yhdelle sarakkeelle.

    Äänestä

  • JariM kirjoitti:

    Tuo ei skulaa ja sama transponointi onnistuu kyllä Excelissäkin, mutta ongelmaksi tässä muodostuu se, että makron pitäisi transponoida tiedot yhteen sarakkeeseen. Antamassasi esimerkissähän on aivan normaali transponointi, jolloin tiedot kopioituvat kolmelta riviltä kolmeen sarakkeeseen. Tarvitsisin siis jonkin VBA-koodin millä vaikka 250 rivistä saataisiin tiedot kopioitua yhdelle sarakkeelle.

    Sorry, luin kysymyksesi hätäisesti. :(

    Äänestä

saat yhdistettyä tietosi yhteen sarakkeeseen.

Sub YhdistäTiedot()
Dim tArr As Variant
Dim i As Integer
Dim Kohderivi As Integer

tArr = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K")

Sheets("Taul1").Select
Kohderivi = 1

For i = 0 To 10
If i > 0 Then Kohderivi = 2
Range(tArr(i) & "1:" & tArr(i) & Range(tArr(i) & "65536").End(xlUp).Row).Copy _
Destination:=Worksheets("Taul2").Cells(Rows.Count, "B").End(xlUp)(Kohderivi)
Next i
End Sub

Äänestä
  • Tuo on jo niin lähellä, mutta silti niin kaukana. Tuo laittoi Taul2 soluun B1 lähtien Taul1:n kaikki sarakkeen A tiedot allekkain, sitten sarakkeen B tiedot allekkain jne.

    Jos Taul1:ssä on jokaisella rivillä Tulos, Sukunimi, Etunimi, Osoite jne. niin ne pitäisi saada siis allekkain niin että ensiksi on ensimmäisen rivin Tulos, Sukunimi, Etunimi, Osoite... ja ja vasta sitten toisen Tulos, Sukunimi, Etunimi jne.

    Äänestä

  • JariM kirjoitti:

    Tuo on jo niin lähellä, mutta silti niin kaukana. Tuo laittoi Taul2 soluun B1 lähtien Taul1:n kaikki sarakkeen A tiedot allekkain, sitten sarakkeen B tiedot allekkain jne.

    Jos Taul1:ssä on jokaisella rivillä Tulos, Sukunimi, Etunimi, Osoite jne. niin ne pitäisi saada siis allekkain niin että ensiksi on ensimmäisen rivin Tulos, Sukunimi, Etunimi, Osoite... ja ja vasta sitten toisen Tulos, Sukunimi, Etunimi jne.

    Sub Transponoi()
    Dim vika As Integer
    Dim solu As Range
    Worksheets("Taul2").Range("B:B") = ""
    vika = Range("Taul1!A65536").End(xlUp).Row
    For Each solu In Range("Taul1!A1:A" & vika)
    solu.Resize(1, 11).Copy
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
    Next
    Application.CutCopyMode = False
    End Sub

    keep Exceling ;-)
    @Kunde

    Äänestä

  • kunde kirjoitti:

    Sub Transponoi()
    Dim vika As Integer
    Dim solu As Range
    Worksheets("Taul2").Range("B:B") = ""
    vika = Range("Taul1!A65536").End(xlUp).Row
    For Each solu In Range("Taul1!A1:A" & vika)
    solu.Resize(1, 11).Copy
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
    Next
    Application.CutCopyMode = False
    End Sub

    keep Exceling ;-)
    @Kunde

    Aivan mahtavaa, kiitoksia =)

    Äänestä

  • kunde kirjoitti:

    Sub Transponoi()
    Dim vika As Integer
    Dim solu As Range
    Worksheets("Taul2").Range("B:B") = ""
    vika = Range("Taul1!A65536").End(xlUp).Row
    For Each solu In Range("Taul1!A1:A" & vika)
    solu.Resize(1, 11).Copy
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
    Next
    Application.CutCopyMode = False
    End Sub

    keep Exceling ;-)
    @Kunde

    Hei,

    vielä pitäisi pikkaisen virittäää makroa edellisen pohjalta. Tiedoston Taul1:ssä sarakkeessa A on siis Tulos ja tuloksen kanssa samalla rivillä henkilön tiedot. Mitenkä saan alla olevan makron pohjalta tiedot eriteltyä kolmeen eri välilehteen niin että
    - Taul2:n sarakkeeseen B siirtyvät allekkain niiden rivien tiedot joissa tuloksena (Taul1:n sarake A) on Ympyrä
    - Taul3:n sarakkeeseen B ne, joissa tuloksena on Kolmio ja
    - Taul4:n sarakkeeseen B ne rivit joissa tuloksena on Neliö

    Alla on nimimerkin kunde tekemä makro:
    Sub Transponoi()
    Dim vika As Integer
    Dim solu As Range
    Worksheets("Taul2").Range("B:B") = ""
    vika = Range("Taul1!A65536").End(xlUp).Row
    For Each solu In Range("Taul1!A1:A" & vika)
    solu.Resize(1, 11).Copy
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
    Next
    Application.CutCopyMode = False
    End Sub

    Äänestä

  • JariM kirjoitti:

    Hei,

    vielä pitäisi pikkaisen virittäää makroa edellisen pohjalta. Tiedoston Taul1:ssä sarakkeessa A on siis Tulos ja tuloksen kanssa samalla rivillä henkilön tiedot. Mitenkä saan alla olevan makron pohjalta tiedot eriteltyä kolmeen eri välilehteen niin että
    - Taul2:n sarakkeeseen B siirtyvät allekkain niiden rivien tiedot joissa tuloksena (Taul1:n sarake A) on Ympyrä
    - Taul3:n sarakkeeseen B ne, joissa tuloksena on Kolmio ja
    - Taul4:n sarakkeeseen B ne rivit joissa tuloksena on Neliö

    Alla on nimimerkin kunde tekemä makro:
    Sub Transponoi()
    Dim vika As Integer
    Dim solu As Range
    Worksheets("Taul2").Range("B:B") = ""
    vika = Range("Taul1!A65536").End(xlUp).Row
    For Each solu In Range("Taul1!A1:A" & vika)
    solu.Resize(1, 11).Copy
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
    Next
    Application.CutCopyMode = False
    End Sub

    Sub Transponoi()
    Dim vika As Integer
    Dim solu As Range
    Worksheets("Taul2").Range("B:B") = ""
    Worksheets("Taul3").Range("B:B") = ""
    Worksheets("Taul4").Range("B:B") = ""
    vika = Range("Taul1!A65536").End(xlUp).Row
    For Each solu In Range("Taul1!A1:A" & vika)
    solu.Offset(0, 1).Resize(1, 11).Copy
    Select Case LCase(solu)
    Case "ympyrä"
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
    Case "neliö"
    Range("Taul3!B65536").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
    Case "kolmio"
    Range("Taul4!B65536").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
    Case Else
    End Select
    Next
    Application.CutCopyMode = False
    End Sub

    Äänestä

  • kunde kirjoitti:

    Sub Transponoi()
    Dim vika As Integer
    Dim solu As Range
    Worksheets("Taul2").Range("B:B") = ""
    Worksheets("Taul3").Range("B:B") = ""
    Worksheets("Taul4").Range("B:B") = ""
    vika = Range("Taul1!A65536").End(xlUp).Row
    For Each solu In Range("Taul1!A1:A" & vika)
    solu.Offset(0, 1).Resize(1, 11).Copy
    Select Case LCase(solu)
    Case "ympyrä"
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
    Case "neliö"
    Range("Taul3!B65536").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
    Case "kolmio"
    Range("Taul4!B65536").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
    Case Else
    End Select
    Next
    Application.CutCopyMode = False
    End Sub

    Terve!

    Sellaista olisin kysellyt, että mitenkäs jos haluaisi tuosta viestiketjun alussa olevasta esimerkistä
    ottaa tuohon transponointiin vaikka vain A ja C sarakkeet. Eli tuo alla oleva makro toimii muuten mutta, pitäisi saada otettua vain osa sarakkeista mukaan?

    Alla on nimimerkin kunde tekemä makro:
    Sub Transponoi()
    Dim vika As Integer
    Dim solu As Range
    Worksheets("Taul2").Range("B:B") = ""
    vika = Range("Taul1!A65536").End(xlUp).Row
    For Each solu In Range("Taul1!A1:A" & vika)
    solu.Resize(1, 11).Copy
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
    Next
    Application.CutCopyMode = False
    End Sub

    Äänestä

  • macroista_tietämätön kirjoitti:

    Terve!

    Sellaista olisin kysellyt, että mitenkäs jos haluaisi tuosta viestiketjun alussa olevasta esimerkistä
    ottaa tuohon transponointiin vaikka vain A ja C sarakkeet. Eli tuo alla oleva makro toimii muuten mutta, pitäisi saada otettua vain osa sarakkeista mukaan?

    Alla on nimimerkin kunde tekemä makro:
    Sub Transponoi()
    Dim vika As Integer
    Dim solu As Range
    Worksheets("Taul2").Range("B:B") = ""
    vika = Range("Taul1!A65536").End(xlUp).Row
    For Each solu In Range("Taul1!A1:A" & vika)
    solu.Resize(1, 11).Copy
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
    Next
    Application.CutCopyMode = False
    End Sub

    Sub Transponoi()
    Dim vika As Integer
    Dim solu As Range

    Worksheets("Taul2").Range("B:B") = ""

    'a- sarake
    vika = Range("Taul1!A65536").End(xlUp).Row
    For Each solu In Range("Taul1!A1:A" & vika)
    solu.Copy
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
    Next

    'c sarake
    vika = Range("Taul1!C65536").End(xlUp).Row
    For Each solu In Range("Taul1!C1:C" & vika)
    solu.Copy
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
    Next

    Application.CutCopyMode = False
    End Sub

    Keep EXCELling
    @Kunde

    Äänestä

  • kunde kirjoitti:

    Sub Transponoi()
    Dim vika As Integer
    Dim solu As Range

    Worksheets("Taul2").Range("B:B") = ""

    'a- sarake
    vika = Range("Taul1!A65536").End(xlUp).Row
    For Each solu In Range("Taul1!A1:A" & vika)
    solu.Copy
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
    Next

    'c sarake
    vika = Range("Taul1!C65536").End(xlUp).Row
    For Each solu In Range("Taul1!C1:C" & vika)
    solu.Copy
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
    Next

    Application.CutCopyMode = False
    End Sub

    Keep EXCELling
    @Kunde

    Tuo edellinen kunde:n tekemä makro laittoi sarakkeen A tiedot ensin Taul2 sarakkeeseen B
    ja siihen perään sarakkeen c tiedot.

    Tarkoitin, että Taul2 sarakkeeseen B tulisi ensin Taul1 solun A1 tieto, sitten solun C1, sitten
    A2, sitten C2.

    kiitoksia kaikista neuvoista.

    Äänestä

  • macroista_tietämätön kirjoitti:

    Tuo edellinen kunde:n tekemä makro laittoi sarakkeen A tiedot ensin Taul2 sarakkeeseen B
    ja siihen perään sarakkeen c tiedot.

    Tarkoitin, että Taul2 sarakkeeseen B tulisi ensin Taul1 solun A1 tieto, sitten solun C1, sitten
    A2, sitten C2.

    kiitoksia kaikista neuvoista.

    Sub Transponoi()
    Dim vika As Integer
    Dim solu As Range
    Worksheets("Taul2").Range("B:B") = ""
    vika = Range("Taul1!A65536").End(xlUp).Row
    For Each solu In Range("Taul1!A1:C" & vika)
    solu.Copy
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
    Next
    Application.CutCopyMode = False
    End Sub

    Äänestä

  • kunde kirjoitti:

    Sub Transponoi()
    Dim vika As Integer
    Dim solu As Range
    Worksheets("Taul2").Range("B:B") = ""
    vika = Range("Taul1!A65536").End(xlUp).Row
    For Each solu In Range("Taul1!A1:C" & vika)
    solu.Copy
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial Transpose:=True
    Next
    Application.CutCopyMode = False
    End Sub

    kunde,

    tuo edellinen makro toimii muuten, mutta siihen tulee se b sarake mukaan,
    vaikka se pitäisi jättää pois. Eli ainoastaan a ja c pitäisi tulla

    Äänestä

  • macroista_tietämätön kirjoitti:

    kunde,

    tuo edellinen makro toimii muuten, mutta siihen tulee se b sarake mukaan,
    vaikka se pitäisi jättää pois. Eli ainoastaan a ja c pitäisi tulla

    Sub Transponoi()
    Dim vika As Long
    Dim vika2 As Long
    Dim solu As Range
    Worksheets("Taul2").Range("B:B") = ""
    vika = Range("Taul1!A65536").End(xlUp).Row
    vika2 = Range("Taul1!C65536").End(xlUp).Row
    If vika < vika2 Then
    vika = vika2
    End If
    For Each solu In Range("A1:A" & vika)
    solu.Copy Range("Taul2!B65536").End(xlUp).Offset(1, 0)
    solu.Offset(0, 2).Copy Range("Taul2!B65536").End(xlUp).Offset(1, 0)
    Next
    Application.CutCopyMode = False
    End Sub

    Äänestä

  • kunde kirjoitti:

    Sub Transponoi()
    Dim vika As Long
    Dim vika2 As Long
    Dim solu As Range
    Worksheets("Taul2").Range("B:B") = ""
    vika = Range("Taul1!A65536").End(xlUp).Row
    vika2 = Range("Taul1!C65536").End(xlUp).Row
    If vika < vika2 Then
    vika = vika2
    End If
    For Each solu In Range("A1:A" & vika)
    solu.Copy Range("Taul2!B65536").End(xlUp).Offset(1, 0)
    solu.Offset(0, 2).Copy Range("Taul2!B65536").End(xlUp).Offset(1, 0)
    Next
    Application.CutCopyMode = False
    End Sub

    Hei,

    pientä viilausta vielä. Edellinen koodi itsessään toimii, mutta osassa kopioitavista soluista on kaavoja jolloin makro kopio koko kaavan ja liitettäessä muuttaa tietysti indeksöintiä. Olisiko makroa mahdollista muokata niin, että se kopioisi ainoastaan solussa olevan lopputuloksen eikä kaavaa.

    Äänestä

  • macroista_tietämätön kirjoitti:

    Hei,

    pientä viilausta vielä. Edellinen koodi itsessään toimii, mutta osassa kopioitavista soluista on kaavoja jolloin makro kopio koko kaavan ja liitettäessä muuttaa tietysti indeksöintiä. Olisiko makroa mahdollista muokata niin, että se kopioisi ainoastaan solussa olevan lopputuloksen eikä kaavaa.

    Sub Transponoi()
    Dim vika As Long
    Dim vika2 As Long
    Dim solu As Range
    On Error Resume Next
    Application.ScreenUpdating = False
    Worksheets("Taul2").Range("B:B") = ""
    vika = Range("Taul1!A65536").End(xlUp).Row
    vika2 = Range("Taul1!C65536").End(xlUp).Row
    If vika < vika2 Then
    vika = vika2
    End If
    For Each solu In Range("A1:A" & vika)
    solu.Copy
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial (xlPasteValues)
    solu.Offset(0, 2).Copy
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial (xlPasteValues)
    Next
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
    End Sub

    Äänestä

  • kunde kirjoitti:

    Sub Transponoi()
    Dim vika As Long
    Dim vika2 As Long
    Dim solu As Range
    On Error Resume Next
    Application.ScreenUpdating = False
    Worksheets("Taul2").Range("B:B") = ""
    vika = Range("Taul1!A65536").End(xlUp).Row
    vika2 = Range("Taul1!C65536").End(xlUp).Row
    If vika < vika2 Then
    vika = vika2
    End If
    For Each solu In Range("A1:A" & vika)
    solu.Copy
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial (xlPasteValues)
    solu.Offset(0, 2).Copy
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial (xlPasteValues)
    Next
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
    End Sub

    kiitoksia kundelle erittäin paljon vastauksista, nyt toimii täydellisesti!

    Äänestä

  • macroista_tietämätön kirjoitti:

    kiitoksia kundelle erittäin paljon vastauksista, nyt toimii täydellisesti!

    Iloitsin sitten liian aikaisin täydellisestä toiminnasta, C sarakkeen arvot hiukan muuttuivat. Osassa C sarakkeen soluissa kaavan lopputulokseksi tulee #N/A, nämä solut pitäisi jättää kopiomatta, mutta kohteena olevaan B sarakkeeseen ei saisi tulla tyhjää solua.

    Esimerkkinä: A1=1, C1=5 B1=1
    A2=2, C2=#N/A B2=5
    A3=3, C3=7 B3=2
    B4=3
    B5=7

    Äänestä

  • macroista_tietämätön kirjoitti:

    Iloitsin sitten liian aikaisin täydellisestä toiminnasta, C sarakkeen arvot hiukan muuttuivat. Osassa C sarakkeen soluissa kaavan lopputulokseksi tulee #N/A, nämä solut pitäisi jättää kopiomatta, mutta kohteena olevaan B sarakkeeseen ei saisi tulla tyhjää solua.

    Esimerkkinä: A1=1, C1=5 B1=1
    A2=2, C2=#N/A B2=5
    A3=3, C3=7 B3=2
    B4=3
    B5=7

    Sub Transponoi()
    Dim vika As Long
    Dim vika2 As Long
    Dim solu As Range
    On Error Resume Next
    Application.ScreenUpdating = False
    Worksheets("Taul2").Range("B:B") = ""
    vika = Range("Taul1!A65536").End(xlUp).Row
    vika2 = Range("Taul1!C65536").End(xlUp).Row
    If vika < vika2 Then
    vika = vika2
    End If
    For Each solu In Range("A1:A" & vika)
    solu.Copy
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial (xlPasteValues)
    If Not solu.Offset(0, 2).Text = "#N/A" Then
    solu.Offset(0, 2).Copy
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial (xlPasteValues)
    End If
    Next
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
    End Sub

    Keep EXCELling
    @Kunde

    Äänestä

  • kunde kirjoitti:

    Sub Transponoi()
    Dim vika As Long
    Dim vika2 As Long
    Dim solu As Range
    On Error Resume Next
    Application.ScreenUpdating = False
    Worksheets("Taul2").Range("B:B") = ""
    vika = Range("Taul1!A65536").End(xlUp).Row
    vika2 = Range("Taul1!C65536").End(xlUp).Row
    If vika < vika2 Then
    vika = vika2
    End If
    For Each solu In Range("A1:A" & vika)
    solu.Copy
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial (xlPasteValues)
    If Not solu.Offset(0, 2).Text = "#N/A" Then
    solu.Offset(0, 2).Copy
    Range("Taul2!B65536").End(xlUp).Offset(1, 0).PasteSpecial (xlPasteValues)
    End If
    Next
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
    End Sub

    Keep EXCELling
    @Kunde

    Toimii! kiitoksia jälleen kerran.

    Äänestä

Kommentoi aloitusta


JariM kirjoitti:

Hei,

Tiedoston Taul1 sisältää X riviä tietoa, jokaisella rivillä tietoa on soluissa A:K. Tiedot pitäisi kopioda samaisen tiedoston välilehteen Taul2 sarakkeeseen B niin että yhden rivin tiedot ovat soluissa B1:B11, toisen rivin tiedot soluissa B12:B23, kolmannen rivin tiedot soluissa B24:B35 ja niin edelleen.

Onnistuuko makrolla tuo jotenkin?

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