Hei, nyt voi olla taas tyhmä kysymys, mutta on ongelma. Jos joku voisi auttaa tällaisessa: Excel taulukosta pitäisi poistaa turhat rivit eli tässä tapauksessa rivit joissa dataa vain ensimmäisessä sarakkeessa. Yksitellen poistaminen on aika työlästä kun taulukko on aikas suuri.
Vaikka näin:
Sub RIVIENPOISTO()
Dim i As Long
i = 2 'alkaen riviltä 2
Do Until Cells(i, "A").Value = "" ' loopataan niin kauan kuin sarakkeessa A jotain
If Cells(i, "B").Value = "" Then 'Jos sarake B tyhjä
Rows(i).Delete shift:=xlUp ' niin poistetaan
i = i - 1
End If
i = i + 1
Loop
End SubThanks Hycke. Ongelmana on vielä, että ensimmäisillä kolmella rivillä on tekstiä, joten ei ehkä ihan tuollaisenaan toimi, mutta yritänpä soveltaa tuota eteenpäin.. niin ja riveillä mitä ei saisi poistaa on tyhjiäkin soluja mukana. Eli rivi pitäisi poistaa vain jos koko rivillä ei ole muuta kun ekassa sarkeessa arvo.
Osaisitko ehkä auttaa vielä toisessa ongelmassani. Tällaisesta varmaankin saisi jotenkin siistittyä tai tehtyä jonkinlaisen silmukan, mutta en ihan osaa. Tässä yrityksenä oli siis saada taulukosta 2 nimen perässä olevia lukuja nimen perään taulukkoon 1, jossa pitkä lista nimiä... No en ehkä osaa oikein selittää, mutta thanks anyway avusta.
Sub Button2_Click()
Dim areaT1, areaT2, cellT1, cellT2
Sheets("Sheet2").Activate
areaT2 = "B1:B" & CStr(Cells.SpecialCells(xlCellTypeLastCell).Row)
Sheets("Sheet1").Activate
areaT1 = "A1:A" & CStr(Cells.SpecialCells(xlCellTypeLastCell).Row)
For Each cellT1 In Sheets("Sheet1").Range(areaT1)
For Each cellT2 In Sheets("Sheet2").Range(areaT2)
If cellT1.Value = cellT2.Value Then
Cells(cellT1.Row, 3).Value = Sheets("Sheet2").Cells(cellT2.Row, 1).Value
Cells(cellT1.Row, 4).Value = Sheets("Sheet2").Cells(cellT2.Row, 3).Value
End If
Next
Next
Application.ScreenUpdating = True
Dim areaT3, areaT4, cellT3, cellT4
Sheets("Sheet2").Activate
areaT4 = "D1:D" & CStr(Cells.SpecialCells(xlCellTypeLastCell).Row)
Sheets("Sheet1").Activate
areaT3 = "A1:A" & CStr(Cells.SpecialCells(xlCellTypeLastCell).Row)
For Each cellT3 In Sheets("Sheet1").Range(areaT3)
For Each cellT4 In Sheets("Sheet2").Range(areaT4)
If cellT3.Value = cellT4.Value Then
Cells(cellT3.Row, 5).Value = Sheets("Sheet2").Cells(cellT4.Row, 1).Value
Cells(cellT3.Row, 6).Value = Sheets("Sheet2").Cells(cellT4.Row, 5).Value
End If
Next
Next
Application.ScreenUpdating = True
Dim areaT5, areaT6, cellT5, cellT6
Sheets("Sheet2").Activate
areaT6 = "G1:G" & CStr(Cells.SpecialCells(xlCellTypeLastCell).Row)
Sheets("Sheet1").Activate
areaT5 = "A1:A" & CStr(Cells.SpecialCells(xlCellTypeLastCell).Row)
For Each cellT5 In Sheets("Sheet1").Range(areaT5)
For Each cellT6 In Sheets("Sheet2").Range(areaT6)
If cellT5.Value = cellT6.Value Then
Cells(cellT5.Row, 7).Value = Sheets("Sheet2").Cells(cellT6.Row, 1).Value
Cells(cellT5.Row, 8).Value = Sheets("Sheet2").Cells(cellT6.Row, 8).Value
End If
Next
Next
Application.ScreenUpdating = True
Dim areaT7, areaT8, cellT7, cellT8
Sheets("Sheet2").Activate
areaT8 = "I1:I" & CStr(Cells.SpecialCells(xlCellTypeLastCell).Row)
Sheets("Sheet1").Activate
areaT7 = "A1:A" & CStr(Cells.SpecialCells(xlCellTypeLastCell).Row)
For Each cellT7 In Sheets("Sheet1").Range(areaT7)
For Each cellT8 In Sheets("Sheet2").Range(areaT8)
If cellT7.Value = cellT8.Value Then
Cells(cellT7.Row, 9).Value = Sheets("Sheet2").Cells(cellT8.Row, 1).Value
Cells(cellT7.Row, 10).Value = Sheets("Sheet2").Cells(cellT8.Row, 10).Value
End If
Next
NextTuohon 1. kohtaan voisi kokeilla seuraavaa:
Sub RIVIENPOISTO()
Dim i As Long
i = 2 'alkaen riviltä 2
Do Until Cells(i, "A").Value = "" ' loopataan niin kauan kuin sarakkeessa A jotain
If Application.WorksheetFunction.Subtotal(3, Range(Cells(i, "B"), Cells(i, "IV"))) = 0 Then 'Jos sarakkeissa B-IV ei ole arvoja
Rows(i).Delete shift:=xlUp ' niin poistetaan
i = i - 1
End If
i = i + 1
Loop
End Sub2. kohtaan helpotusta?
Sub Hakua()
Dim i As Long, C As Range, S1 As String, S2 As String
S1 = "Sheet1"
S2 = "Sheet2"
i = 16
Do Until Sheets(S1).Cells(i, "A").Value = ""
With Sheets(S2)
For Each C In .Range(.Cells(1, 1), .Cells(.Cells.SpecialCells(xlCellTypeLastCell).Row, .Cells.SpecialCells(xlCellTypeLastCell).Column))
If C.Value = Sheets(S1).Cells(i, "A").Value Then
Sheets(S1).Cells(i, C.Column) = .Cells(C.Row, C.Column).Value
Sheets(S1).Cells(i, C.Column + 1) = .Cells(C.Row, C.Column + 1).Value
End If
Next
End With
i = i + 1
Loop
End SubThanksis taas Hycke. Perehdyn noihin ja kokeilen jahka ehdin. Kiva kun joku viitsii auttaa tällaista vasta-alkajaa.
No niin, taas loppui soveltamisen taito. Hyvin sain sovellettua ja toimimaan tuon rivien poiston, mutta tuo kohta 2 on aikas ongelmallinen ainakin minulle. Mun Sheet 2 sisältää suurinpiirtein tämän näköistä juttua:
1 | aa |45 | | gg | 45 | ...jne
2 | ss |65 | | aa | 65 |....
3 | ff |76 | | ss | 34 |...
haluaisin että saisin sheet1:lle aina nimen perään 1,2 tai 3 ja sitten luvun
eli
aa | 1 | 45 | 2 | 65 | ...
gg | | | 1 | 45 |...
ss | 2 | 65 | 3 | 34 |...
ff | 3 | 76 | | |...
tähän tyyliin. Saako tästä sotkusta mitään irti?
Aihe on jo aika vanha, joten et voi enää vastata siihen.