Just nu i M3-nätverket
Jump to content

Hitta första lediga rad?


marbe

Recommended Posts

Hej!

Jag behöver i ett makro, en funktion som i det aktiva bladet hittar till första lediga rad, och ställer markören i kolumn A på denna rad, jag ska senare klistra in info på denna rad.

 

Jag har från xl-Dennis.com hittat följande kod, som fungerar på liknande sätt, men denna letar reda på första lediga kolumn istället!

 

Sub FindFirstCellNextColumn()

Dim x As Integer

x = ActiveSheet.UsedRange.Columns.Count

ActiveCell.SpecialCells(xlLastCell).Select

ActiveCell.EntireColumn.Cells(1, 2).Offset(0, 0).Activate

End Sub

 

Sub FindFirstCellNextRow()

...

End Sub

 

Mycket tacksam om någon kunde hjälpa mig att komplettera koden till FindFirstCellNextRow()

 

/marbe

/marbe

 

Link to comment
Share on other sites

Anjuna Moon

Verkade vara lite överflödiga rader i den första funktionen. Hursomhelst, för den andra funktionen, pröva med:

Sub FindFirstCellNextColumn()
   nrow = ActiveCell.SpecialCells(xlLastCell, 1).Row + 1
   ActiveSheet.Cells(nrow, 1).Select
End Sub

 

Link to comment
Share on other sites

är första tomma från toppen sedd samma som första ifyllda + en rad från botten sett? Då är även raden nedan ett alternativ.

 

Range("A65536").End(xlUp).Offset(1, 0).Select

 

 

Koden motsvarar vad som sker vid nedtryck av CTRL+Upp pil

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Link to comment
Share on other sites

Om du kan välja (om det alltid finns ett värde i första kolumnen) så röstar jag för Monshis variant.

"xlLastCell" kan ibland bli lurad. Om du t.ex har raderat rader i slutet så KAN den tro att området fortsätter dit (ovanligt, men jag höll på att bli vansinnig innan jag förstod vad som hände en gång i tiden).

Det andra problemet uppstår om du har en tom rad mitt i din "databas". Då hittas det tomrummet, det gör väl inget om du bara skall fylla på en rad, men om du fyller på mer så kommer du att skriva över data. Inte kul.

Liknande reservationer för Monshis kod, Om du inte är 100% säker på att första kolumnen är ifylld så kan du råka illa ut.

 

Link to comment
Share on other sites

Hej,

 

Vill i all enkelhet tillägga följande variant:

 

Dim lnLastRow As Long
lnLastRow = Cells(Rows.Count, "A").End(xlUp).Row 

 

Den kan med fördel användas upp till version 2003. Dock blir den ett sämre alternativ vid användning i Excel 12 med sina 1,1 miljoner rader...

 

Mvh

Dennis

 

För tips och tricks med MS Excel se: http://www.xldennis.se

 

Link to comment
Share on other sites

Snyggt och dynamiskt...

Dock blir den ett sämre alternativ vid användning i Excel 12 med sina 1,1 miljoner rader...

 

Det är väl just det din lösning klarar jämfört med den jag skrev?

 

Och sedan en undran:

Varför "A" istället för 1? Eller kanske ingen orsak bara "blev" så?

 

 

Hade för övrigt ingen aning om att det gick att ange kolumnens "namn" i Cells()-formeln.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

Link to comment
Share on other sites

Monshi - Du har givetvis rätt i det med version 12.

 

Ju äldre jag blir desto mer lutar jag åt "A"-hållet än talangivelse för celler såsom i exemplet.

 

Även jag lär mig nya saker, dock inte när det gäller Excel utan VSTO.

 

 

Mvh

Dennis

 

För tips och tricks med MS Excel se: http://www.xldennis.se

 

Link to comment
Share on other sites

Ju äldre jag blir desto mer lutar jag åt "A"-hållet än talangivelse för celler såsom i exemplet.

Att ange "A" kanske är mer tydligt än "1" men samtidigt kan man anta, om man ska vara petig, att ange en siffra är "snabbare" än en bokstav.

 

orsak: Om du anger en bokstav måste Excel översätta det till ett tal. Kanske.

 

Tvungen att testa...

Matchar

[color="#0000ff"]Sub[/color] test1()
[color="#0000ff"]For[/color] i = 1 [color="#0000ff"]To[/color] Rows.Count
    Cells(i, [GRÅ]"A"[/GRÅ]).[color="#0000ff"]Select[/color]
[color="#0000ff"]Next[/color] i
[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

och

[color="#0000ff"]Sub[/color] test2()
[color="#0000ff"]For[/color] i = 1 [color="#0000ff"]To[/color] Rows.Count
    Cells(i, 1).[color="#0000ff"]Select[/color]
[color="#0000ff"]Next[/color] i
[color="#0000ff"]End[/color] [color="#0000ff"]Sub[/color]

 

mot varandra

Tidtagning med skärmuppdateringar och ej.

Med skärmuppdateringar tar Test1 9.09 s på sig och Test2 8.08 s.

Utan skärmuppdateringar tar de båda lika lång tid på sig, 2.02 s.

 

Slutsats - det är egalt vilken metod man använder men den med tal är valet om man ska stega över kolumner.

 

 

/T

 

Even when we know we´ll never find the answers, we have to keep on asking questions.

 

 

[inlägget ändrat 2006-03-14 13:00:54 av Monshi]

Link to comment
Share on other sites

Anjuna Moon
Om du anger en bokstav måste Excel översätta det till ett tal. Kanske.

Jag gissar att VBA-motorn använder sig av hashtabeller för att lagra cellerna, så det borde vara hugget som stucket.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...