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ä?
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ä?
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
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.
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.