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

#1 17. 7. 2022 14:34:01

barevnej
Člen
Registrace: 6. 8. 2015
Příspěvků: 171

Makro na opakování

Nevím jak to pojmenovat ale potřebuji v jednom sloupci rozkopírovat kody viz obrázek. Vzorcem bych to uměl ale datábáze má desítky tisíc řádků tak je to nepraktické, Makro by bylo ideální.
_
2022-07-17_15-23.png
_
A výsledek by měl být rozkopírovat kody dolů dokud nenarazí na jiný a tak pořád dokola dokud nenarazí na slovo KONEC a tam zastaví, jinak by to bylo nekonečné.
_
2022-07-17_15-23_1.png
_
ps: Makro použit na aktualním listu, ne podle jména jelikož má pokaždé jméno listu jiné.

Offline

#2 17. 7. 2022 19:51:02

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

Re: Makro na opakování

To je podobné zadání jako ve Vašem předchozím příspěvku. Podobné je také řešení. makrem a i maticovým vzorcem. Tam stačí upravit a rozvinout do pomocného sloupce, kterým nakonec nahradíme původní "A".
     Na to stačí také obyčejný vzorec, ale opět do pomocného sloupce (dejme tomu "E". V prvním řádku dáme do pomocného sloupce první údaj (aaa). Do druhého (druhý řádek pod aaa) napíšeme :

=IF(A2="";E1;A2)

Rozkopírovat a vyjmout (nebo jen kopírovat) a vložit do sloupce "A" jen jako text a čísla (jsou-li tam samostatně bez textu).

     Makrem by to šlo také. To makro co jsem poslal mělo problémy kvůli velkému objemu načítanému naráz. Dá se to optimalizovat (rozsekat na menší díly) a tím se to zrychlí. Na to bych se podíval až když potvrdíte, že vzorec nechcete.


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

Offline

#3 18. 7. 2022 08:20:19

barevnej
Člen
Registrace: 6. 8. 2015
Příspěvků: 171

Re: Makro na opakování

První sloupec má vždy popis takže začínám od druhého řádku. Zatím to dělám vzorcem v druhém sloupci na druhém řádku "B2"

=IF(ISBLANK(A2);B1;A2)

Akorát mi jde o to že teď ručně musím přidat sloupec "B" abych tam udělal onen vzorec. Právě bych rád to samé aby se aplikovalo v tom samém sloupci tj ve sloupci "A".
Jak říkám zatím si poradím ručně takto ovšem jelikož to dělám prakticky každý den tak mě napadlo si to ulehčit smile

Offline

#4 19. 7. 2022 11:29:04

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

Re: Makro na opakování

Otestujte toto Vyplňování mezi součty.


     Použil jsem na první pokus fungující úpravu. Ani jsem ji neoptimalizoval. Pokud by byl problém s časem nebo něco jiného tak se k tomu vrátím a upravím.


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

Offline

#5 19. 7. 2022 14:15:53

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

Re: Makro na opakování

Možná se pletu, ale nepotřebujete náhodou oba úkony (součty a vyplnění) udělat najednou?. Jde to také makrem, které vloží vzorce (včetně maticových), vrátí je zpět jen jako hodnoty. Následně k vyplnění přidám sloupec "B", vložím vzorec, následně změním vzorce na hodnoty a smažu první sloupec, nebo to do něj zkopíruji a smažu vložený "B". Myslím, že by to bylo nejrychlejší řešení - možná rychlejší, nežli každý jednotlivý úkon samostatně.


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

Offline

#6 20. 7. 2022 08:56:15

barevnej
Člen
Registrace: 6. 8. 2015
Příspěvků: 171

Re: Makro na opakování

Dokonalé, co dodat... Děkuji moc.

Offline

#7 20. 7. 2022 09:00:41

barevnej
Člen
Registrace: 6. 8. 2015
Příspěvků: 171

Re: Makro na opakování

Možná jen dotaz, jak zvolím jiný sloupec? Vím že se počítá od nuly ale nevím kterou tu nulu přepsat.

Offline

#8 20. 7. 2022 10:39:58

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

Re: Makro na opakování

barevnej napsal(a)

Možná jen dotaz, jak zvolím jiný sloupec? Vím že se počítá od nuly ale nevím kterou tu nulu přepsat.

     To potřebuje více úprav kódu. Takže místo toho vzorového, který fungoval pouze na sloupci "A" si otestujte toto :

Sub Main
	Dim oDoc As Object
	Dim oCtrl as Object
	Dim oSelRange as Object, oCellRange as Object
	oDoc = ThisComponent
	oCtrl = oDoc.getCurrentController()
sTime = Timer()
oSheets = ThisComponent.Sheets()
N = oCtrl.getActiveSheet().Name 'Jméno aktivního listu ze kterého uděláme číslo (index)
oSheets = ThisComponent.Sheets
  For i = 0 to oSheets.Count-1
    IF oSheets(i).Name = N Then
    SH = i 'číslo listu
    Exit For
    End If
  Next i
'-------------------------------------------------------------
leftCol = 0 'Stačí přepsat tohle, protože počáteční a koncový sloupec je stejný
leftRow = 0
righCol = leftCol
righRow = LastRowWithData(righCol ,SH) - 1
oRange = oCtrl.getActiveSheet().getCellRangeByPosition(leftCol, leftRow, righCol, righRow)
dataArray = oRange.getDataArray()
   For i = LBound(dataArray) To UBound(dataArray)
      aRow = dataArray(i)
      For j = LBound(aRow) to UBound(aRow)
            IF aRow(j) = "" Then
            	aRow(j) = sVar
            Else
            	sVar = aRow(j)
            End IF
      Next j
      dataArray(i) = aRow
   Next i
   oRange.setDataArray( dataArray() )
eTime = Timer() - sTime
MsgBox("celkem " & righRow + 1 & " řádků bylo zpracováno za " & eTime & " vteřin.", "Konec")		
End Sub

Function LastRowWithData (ColumnIndex as long, SheetIndex as long) as long
   Dim oCursor As Object, oRange As Object, oSheet As Object
   Dim LastRowOfUsedArea as long, R as long
   Dim RangeData
   oSheet = ThisComponent.Sheets(SheetIndex)
   oCursor = oSheet.createCursor
   oCursor.gotoEndOfUsedArea(False)
   LastRowOfUsedArea = oCursor.RangeAddress.EndRow
   oRange = oSheet.getCellRangeByPosition(ColumnIndex, 0, ColumnIndex, LastRowOfUsedArea)
   oCursor = oSheet.createCursorByRange(oRange)
   RangeData = oCursor.getDataArray
   For R = UBound(RangeData) To LBound(RangeData) Step - 1
       If RangeData(R)(0) <> "" then
          LastRowWithData = R
          Exit Function
       End If
   Next
End Function

     Stačí zadat sloupec na jediném místě leftCol = 0.


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

Offline

#9 20. 7. 2022 10:52:56

barevnej
Člen
Registrace: 6. 8. 2015
Příspěvků: 171

Re: Makro na opakování

Dokonalé, perfektní, nádhera. Děkuji.

Offline

Zápatí