makrolla solujen yhdistäminen?

Taulukon riveillä on sarakkeesta B alkaen n kappaletta sellaisia soluja, joiden tiedot haluan kullekin riville yhteen soluun, esim. B1:IV1 soluun B1. Löysin netistä jonkinlaisen makron, mutta en osaa muokata siitä itselleni sopivaa:

Sub Combine()
Dim J As Integer

If Selection.Cells.Count > 1 Then
For J = 2 To Selection.Cells.Count
Selection.Cells(1).Value = _
Selection.Cells(1).Value & " " & _
Selection.Cells(J).Value
Selection.Cells(J).Clear
Next J
End If
End Sub

Haluaisin siis valita makrolla automaattisesti riviltä solut B:IV (tai ensimmäiseen tyhjään soluun asti), jonka jälkeen ylläolevalla makrolla yhdistetään solujen tiedot. Tämän jälkeen pitäisi valita seuraava rivi ja suorittaa ylläoleva uudestaan.

Yritin jo seuraavaa:

Sub Combine()
Dim J As Integer
Do Until Selection.Value = ""
Range("b3:iv3").Select
If Selection.Cells.Count > 1 Then
For J = 2 To Selection.Cells.Count
Selection.Cells(1).Value = _
Selection.Cells(1).Value & " " & _
Selection.Cells(J).Value
Selection.Cells(J).Clear
Next J
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Tuossa vaan loopataan pelkästään riviä 3. Jos siirrän rivin Range("b3:iv3").Select ennen Do-lauseketta, ei homma toimi ollenkaan (type mismatch). Miten tuo kannattaisi oikeasti tehdä?
5472
Äänestä

Muut lukivat myös

Vastaukset 5

Vanhimmat

Nyt sain toimimaan, mutta vähän hienosäätöä vielä kaipaa. Tämä versio yhdistää myös tyhjät solut. Miten saisin tämän valitsemaan riviltä vain sellaiset solut, joissa on joitain merkkejä?

Sub Combine()
Dim J As Integer
Range("c4").Select
Do Until Selection.Value = ""
Range(Selection, Selection.End(xlToRight)).Select
If Selection.Cells.Count > 1 Then
For J = 2 To Selection.Cells.Count
Selection.Cells(1).Value = _
Selection.Cells(1).Value & " " & _
Selection.Cells(J).Value
Selection.Cells(J).Clear
Next J
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Äänestä
  • For J = 2 To Selection.Cells.Count
    If Selection.Cells(J).Value "" Then
    Selection.Cells(1).Value = _
    Selection.Cells(1).Value & " " & _
    Selection.Cells(J).Value
    Selection.Cells(J).Clear
    End If
    Next J

    Äänestä

  • ... kirjoitti:

    For J = 2 To Selection.Cells.Count
    If Selection.Cells(J).Value "" Then
    Selection.Cells(1).Value = _
    Selection.Cells(1).Value & " " & _
    Selection.Cells(J).Value
    Selection.Cells(J).Clear
    End If
    Next J

    Kiitoksia yrityksestä, mutta ei toimi ainakaan minulla, vaan tulee "Runtime error '1004': Applicatio-defined or object-defined error".

    Eihän tällä muuten paljon väliä ole, mutta säästäisi aikaa, kun makron ei tartteis käydä sadoilla riveillä kaikkia tyhjiäkin soluja läpi.

    Äänestä

  • ei toimi kirjoitti:

    Kiitoksia yrityksestä, mutta ei toimi ainakaan minulla, vaan tulee "Runtime error '1004': Applicatio-defined or object-defined error".

    Eihän tällä muuten paljon väliä ole, mutta säästäisi aikaa, kun makron ei tartteis käydä sadoilla riveillä kaikkia tyhjiäkin soluja läpi.

    Kyllähän tuo esimerkki toimii sittenkin, mutta vain samalla taulukon sivulla. Yritin kopioida sen myös muille sivuille, mutta siellä tulee tuo aiemmin mainittu virheilmoitus. Miten tämän saisi toimimaan myös muualla?

    Äänestä

  • osittain kirjoitti:

    Kyllähän tuo esimerkki toimii sittenkin, mutta vain samalla taulukon sivulla. Yritin kopioida sen myös muille sivuille, mutta siellä tulee tuo aiemmin mainittu virheilmoitus. Miten tämän saisi toimimaan myös muualla?

    Makro piti laittaa moduuliin, nyt toimii.

    Äänestä

Kommentoi aloitusta


kuinka? kirjoitti:

Taulukon riveillä on sarakkeesta B alkaen n kappaletta sellaisia soluja, joiden tiedot haluan kullekin riville yhteen soluun, esim. B1:IV1 soluun B1. Löysin netistä jonkinlaisen makron, mutta en osaa muokata siitä itselleni sopivaa:

Sub Combine()
Dim J As Integer

If Selection.Cells.Count > 1 Then
For J = 2 To Selection.Cells.Count
Selection.Cells(1).Value = _
Selection.Cells(1).Value & " " & _
Selection.Cells(J).Value
Selection.Cells(J).Clear
Next J
End If
End Sub

Haluaisin siis valita makrolla automaattisesti riviltä solut B:IV (tai ensimmäiseen tyhjään soluun asti), jonka jälkeen ylläolevalla makrolla yhdistetään solujen tiedot. Tämän jälkeen pitäisi valita seuraava rivi ja suorittaa ylläoleva uudestaan.

Yritin jo seuraavaa:

Sub Combine()
Dim J As Integer
Do Until Selection.Value = ""
Range("b3:iv3").Select
If Selection.Cells.Count > 1 Then
For J = 2 To Selection.Cells.Count
Selection.Cells(1).Value = _
Selection.Cells(1).Value & " " & _
Selection.Cells(J).Value
Selection.Cells(J).Clear
Next J
End If
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Tuossa vaan loopataan pelkästään riviä 3. Jos siirrän rivin Range("b3:iv3").Select ennen Do-lauseketta, ei homma toimi ollenkaan (type mismatch). Miten tuo kannattaisi oikeasti tehdä?

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