Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 20. 4. 2016 15:02:31

dech
Člen
Registrace: 1. 10. 2008
Příspěvků: 146

zjistit číslo posledního prázdného řádku

Už se to určitě řešilo..akorát můj případ je složitější o to, že hledám poslední prázdný řádek v sl. B a zároveň v sl. A prázdný není.

Už mám za sebou hodiny zkoušení a googlování...tak teď už mi může pomoct jenom někdo jiný než já sám.

diky.


obr


OO 3.2.1  WIn 8 64bit  16GB RAM

Offline

#2 20. 4. 2016 15:17:34

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,678

Re: zjistit číslo posledního prázdného řádku

Stačí Vám makro?

Sub PosledniRadekNaSloupciB
Dim oSheet as object
Dim oCell As Object
Dim oCursor As Object
oDoc = ThisComponent
oSheet = ThisComponent.Sheets.getByIndex(0)' první list sešitu
oCell = oSheet.GetCellbyPosition(1, 0)     ' start
oCursor = oSheet.createCursorByRange(oCell)
oCursor.GotoEndOfUsedArea(False)
lastrow = oCursor.RangeAddress.EndRow
print lastrow +1
End Sub

     Otestujte. Když byste potřeboval například aby to chodilo v každém sešitu, nebo podle jména sešitu tak to snadno předěláme. Já tohle makro používám upravené na funkci která hledá konec řádků pro iterace. Takže předávám parametry jak sešit, tak sloupec a pak to volám například pro zjištění koncové hodnoty cyklu For. příklad :
Dim svar as long
sVar = PosledniRadekNaSloupci(sešit, sloupec)
For i = 0 To svar
....
Next i


PS - Podle obrázku tam, máte sloučené buňky. V takových případech budete mít asi problémy. Když například sloučíte A1 s B1, tak B1 makro nenajde. Pokud tam ale buňka B1 bude tak by se hledání spustit mělo. Jenže text ze sloučených buněk se načte jen v první buňce sloučeného úseku. Pokud tedy máte ve sloupci B sloučené úseky a jejich první buňka není ve sloupci B - nenajdete nic.

Editoval neutr (20. 4. 2016 15:25:09)


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 20. 4. 2016 17:02:55

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 790

Re: zjistit číslo posledního prázdného řádku

Maticově (ctrl-shift-enter)

=MAX(IF(NOT(ISBLANK($A$1:$A$30))*ISBLANK($B$1:$B$30);ROW($A$1:$A$30);0))

ale opatrně s rozsahem a počtem, je to pomalé.

Pokud nic nevyhoví, tak je výsledek 0.

Offline

#4 20. 4. 2016 19:55:44

dech
Člen
Registrace: 1. 10. 2008
Příspěvků: 146

Re: zjistit číslo posledního prázdného řádku

za makro děkuji, ale potřebuji vzorec.

vzorec funguje! supr! díky!


OO 3.2.1  WIn 8 64bit  16GB RAM

Offline

#5 20. 4. 2016 20:00:38

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 520

Re: zjistit číslo posledního prázdného řádku

Já bych s dovolením navázal se svým problémem. Mám velký list (5000 nachystaných řádků) ale vyplněno třeba jen 1000. Chci se rychlým skokem dostat na konec vyplněných záznamů. Tzn. najít poslední vyplněnou buňku v určitém sloupci a přesunout tam kurzor (tzn cca řádek 1000). Mám na to makro, ale připadá mi takové neohrabané. Zkoušel jsem modifikovat výše uvedené makro od Neutra, ale skáče to na konec sešitu (tzn na řádek 5000). Nebyl by nějaký nápad? (Sloupec K je zaručeně ve všech záznamech vyplněn nenulovými čísly, ostatní sloupce mohou mít mezery)

Sub skoc_na_konec
dim skok as string
Dim oFunc as Object
 s1 = ThisComponent.Sheets.GetByName("vstup_z_banky")
 oFunc = createUnoService( "com.sun.star.sheet.FunctionAccess" )
 oblast = s1.GetCellRangeByName("K2:K10000")
 radek = oFunc.callFunction("COUNTIF",array(oblast,"<>0")) + 2
 skok = "G" & radek 
 presun ( skok )
End Sub

sub presun (pozice as string) 'metoda pro ulození poslední hodnoty
	dim dokument   as object
	dim dispatcher as object
	dokument   = ThisComponent.CurrentController.Frame
	dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
	dim args1(0) as new com.sun.star.beans.PropertyValue
	args1(0).Name = "ToPoint"
	args1(0).Value = pozice
	dispatcher.executeDispatch(dokument, ".uno:GoToCell", "", 0, args1())
end sub

LibreOffice 5.2.2.2

Offline

#6 21. 4. 2016 00:21:08

lp.
Člen
Registrace: 24. 9. 2009
Příspěvků: 790

Re: zjistit číslo posledního prázdného řádku

Skočí na poslední vyplněnou buňku. Výběr buněk lze korigovat parametrem v queryContentCells.

Sub skoc_na_konec
  Dim oSh As Object
  Dim oSloupec as Object
  Dim oOblasti as Object
  Dim oBunka as Object
	
  oSh = ThisComponent.Sheets.GetByName("vstup_z_banky")
  oSloupec = oSh.GetCellRangeByName("K2:K10000")
  oOblasti = oSloupec.queryContentCells(1+2+4+16).RangeAddresses

  If Ubound(oOblasti) < 0 Then   ' Nenalezeno, vybereme začátek
     oBunka = oSh.GetCellRangeByName("K2")
  Else   
     With oOblasti(Ubound(oOblasti))
       oBunka =  oSh.getCellByPosition( .EndColumn, .EndRow ) ' Za poslední buňku:  .EndRow  + 1
     End With
  End If 

  ThisComponent.CurrentController.Select(oBunka)
End Sub

Editoval lp. (21. 4. 2016 00:27:49)

Offline

#7 21. 4. 2016 07:10:40

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 2,678

Re: zjistit číslo posledního prázdného řádku

Otestujte tohle

Sub NajdiPosledniRadek
	'Zavoláme funkci LastRowWithData a zadáme sloupec + sešit
	'1 = Col - jako column (sloupec B)
	'0 = SH  - jako Sheet  (sešit jako 1. list v sešitě)
   x = LastRowWithData(1, 0)
   Print "Poslední řádek dat = " & x + 1
end sub
Function LastRowWithData (Col as long, SH as long) as long
'Hledá poslední řádek definovaného sloupce Col
   Dim oCursor As Object, oRange As Object, oSheet As Object
   Dim LastRowOfUsedArea as long, R as long
   Dim RangeData

   oSheet = ThisComponent.Sheets(SH)
   oCursor = oSheet.createCursor
   oCursor.gotoEndOfUsedArea(False)
   LastRowOfUsedArea = oCursor.RangeAddress.EndRow
   'nejprve najde poslední řádek v listu a definuje úsek oRange
   oRange = oSheet.getCellRangeByPosition(Col, 0, Col, LastRowOfUsedArea)
   oCursor = oSheet.createCursorByRange(oRange)
   RangeData = oCursor.getDataArray
   'Hledá od konce "neprázdnou buňku" na úseku oRange
   For R = UBound(RangeData) To LBound(RangeData) Step - 1
       ' Zde můžeme zadat například hledaný výraz. Nyní je nasteven "neprázdný řádek"
       If RangeData(R)(0) <> "" then
          LastRowWithData = R
          Exit Function
       End If
   Next
End Function

     Princip je v tom, že základem je nalezení posledního řádku v celém sešitě. Z toho se dovodí konec konkrétního úseku na zadaném sloupci. Takhle určený úsek se prohledává od konce. Je to tedy jen poněkud upravené makro z toho předcházejícího příkladu. Já ho užívám většinou pro cyklus For od začátku do konce - tedy opačně nežli je tomu tady.
     Tedy abych vyjádřil správně k čemu se hodí. Makro uvedené v předchozím příspěvku používám také místo funkce COUNTA. Taková funkce je sice v Basicu zabudovaná (generalFunction.Count ap) ale asi přede dvěma roky začala blbnout tak jsem přepsal několik desítek maker právě tímto trošku upraveným makrem.


     To co je tady v tomto příspěvku už je napasované přímo na určitý sloupec, respektive úsek.

Editoval neutr (21. 4. 2016 07:22:46)


Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte tak orientaci na fóru při vyhledávání řešení problémů
JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#8 21. 4. 2016 11:17:46

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 520

Re: zjistit číslo posledního prázdného řádku

Děkuji vám velice. Ta makra vypadají mnohem rozumněji, než ten můj paskvil. Makro od LP jsem použil, makro od Neutr ještě prozkoumám, ale princip celkem chápu. Díky moc.


LibreOffice 5.2.2.2

Offline

Zápatí