Righe vuote, traslare dati in alto

Discussioni sull'applicazione per i fogli di calcolo
Rispondi
Francesco90
Messaggi: 73
Iscritto il: mercoledì 2 agosto 2017, 23:33

Righe vuote, traslare dati in alto

Messaggio da Francesco90 »

Ciao ragazzi, ho bisogno che in un elenco di persone, selezionando tale elenco, nel caso del file che vi posto, selezionando l'intervallo di celle A2:C7 io possa far riempire le righe vuote traslando in alto tutto.
elenco.ods
(10.83 KiB) Scaricato 125 volte
Windows8.1 Libreoffice 6.3.4
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: righe vuote, traslare dati in alto

Messaggio da patel »

non ti andrebbe bene eliminare le righe vuote con una macro ?
Ultima modifica di patel il domenica 23 giugno 2019, 18:42, modificato 1 volta in totale.
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Avatar utente
gioh66
Volontario
Volontario
Messaggi: 1805
Iscritto il: lunedì 31 luglio 2017, 14:57
Località: Friuli

Re: Righe vuote, traslare dati in alto

Messaggio da gioh66 »

Ciao, volendo si può fare con una formula matriciale

Codice: Seleziona tutto

=SE(VAL.ERRORE(INDICE(A$2:A$7;PICCOLO(SE(A$2:A$7<>"";RIF.RIGA($A$2:$A$7)-1);RIF.RIGA($A1))));"";INDICE(A$2:A$7;PICCOLO(SE(A$2:A$7<>"";RIF.RIGA($A$2:$A$7)-1);RIF.RIGA($A1))))
da inserire in E2 confermare con la combinazione di tasti ctrl+maiuscolo+invio e da copiare e in collare a destra per tre colonne e in basso fin dove serve.
...se sei soddisfatto delle risposte ricevute metti il [Risolto] viewtopic.php?f=9&t=5661

Libreoffice 7/24 LinuxMint 21/22
patel
Volontario attivo
Volontario attivo
Messaggi: 4030
Iscritto il: venerdì 30 aprile 2010, 8:04
Località: Livorno

Re: Righe vuote, traslare dati in alto

Messaggio da patel »

Una possibile soluzione è questa

Codice: Seleziona tutto

Sub MoveEmpyRows()
oSheet = ThisComponent.Sheets(0)
c = oSheet.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow
LastCol = 2
with oSheet
  r=1
  If oSheet.getCellByPosition(0, LastRow).String <>  ""  Then
    for r= LastRow to 1 step -1
      if .getCellByPosition(0, r).String = "" then
        dr=LastRow-r
        Range = .getCellRangeByPosition(0,r+1,Lastcol,LastRow).getDataArray
        dRange  = .getCellRangeByPosition(0,r,Lastcol,r+dr-1)
        dRange.setDataArray(Range)
        .getCellRangeByPosition(0,r+dr,Lastcol,LastRow).clearContents(5)
        exit for
      end if
    next
  endif
  n=0
  For r = Lastrow-1 to 1 step -1
      If oSheet.getCellByPosition(0, r).String = ""  Then
        oSheet.getRows.removeByIndex(r, 1)         
        n=n+1
      End If
  Next
  oRangeAddress = oSheet.getCellRangeByPosition(0,LastRow-n,Lastcol,LastRow-1).getRangeAddress()
  .insertCells(oRangeAddress, com.sun.star.sheet.CellInsertMode.ROWS)
End With
End Sub
-------------------
Libre Office 7.5.3.2 su Windows 11
allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
Rispondi