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 Sub
Thanks 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 Next
Tuohon 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 Sub
2. 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 Sub
Thanksis 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.