Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Salvataggio dati particolare

Ultimo Aggiornamento: 08/05/2023 12:43
Post: 7.246
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
07/05/2023 17:29

ciao a tutti, come faccio a salvare dei dati, ma in modo particolare, diciamo che ho questa tabella



come vedere è una semplice tabella non si sono formule o altro,

ma vorrei salvare il tutto, non come copia incolla in un altra parte del foglio, devo salvare sullo stesso foglio, su un unica riga ed anche in un unica cella possibilmente, visto che il range non è grande e credo che i caratteri entrerebbero in una cella.

un poco come un file CSV una stringa che conterrebbe tutti i dati del range, però poi dovrei poter fare anche il procedimento inverso cioè la stringa riportarla di nuovo in tabella.

credete sia possibile?

allego il file ma comunque non contiene niente, non so come iniziare a preparare qualcosa.
perdonatemi cerco sempre di trovare cose impossibili

Ciao By Sal (8-D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 1.561
Registrato il: 27/06/2011
Utente Veteran
excel 2007
OFFLINE
07/05/2023 19:27

ciao Salvatore
non so se ho capito, dai un'occhiata

range(!a19") = valori in unica riga

se va bene, vediamo di proseguire.
Allego anche il file.

ciao
Frank
vb
Sub unica_riga()

Dim arr() As Variant
Dim r As Long, c As Long
Dim stringa As String

r = Range("A1", Range("A1").End(xlDown)).Cells.Count

c = Range("A1", Range("A1").End(xlToRight)).Cells.Count
 
ReDim arr(0 To r, 0 To c)
 
For r = LBound(arr, 1) To UBound(arr, 1)
    For c = LBound(arr, 2) To UBound(arr, 2)
        If ActiveSheet.Range("A1").Offset(r, c) = "" Then
        Else
            stringa = stringa & ActiveSheet.Range("A1").Offset(r, c)
        End If
        ActiveSheet.Range("A19") = stringa
    Next c

Next r
End Sub







Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
Post: 1.562
Registrato il: 27/06/2011
Utente Veteran
excel 2007
OFFLINE
07/05/2023 22:39

ciao Salvatore,

spero di avere capito....
l'allegato dovrebbe essere quello che hai chiesto.

ciao
Frank


Questa la macro
vb
Sub unica_riga_tante_colonne()

Dim arr() As Variant
Dim r As Long, c As Long, d As Long, col As Long
Dim stringa As String
Dim sh As Worksheet

'============================================
'nel range A19 la stringa con tutti i valori
' in riga 20 i valori per colonna

'============================================
Set sh = ActiveSheet

With sh

        r = Range("A1", Range("A1").End(xlDown)).Cells.Count
        
        c = Range("A1", Range("A1").End(xlToRight)).Cells.Count
         
        ReDim arr(0 To r, 0 To c)
        
         
        For r = LBound(arr, 1) To UBound(arr, 1)
            For c = LBound(arr, 2) To UBound(arr, 2)
                
                arr(r, c) = ActiveSheet.Range("A1").Offset(r, c)
                If ActiveSheet.Range("A1").Offset(r, c) = "" Then
                Else
                
                    stringa = stringa & ActiveSheet.Range("A1").Offset(r, c)
                End If
                ActiveSheet.Range("A19") = stringa
                
            Next c
          
        Next r
        
        col = 1
        
        For r = LBound(arr, 1) To UBound(arr, 1)
            For c = LBound(arr, 2) To UBound(arr, 2)
            
                arr(r, c) = ActiveSheet.Range("A1").Offset(r, c)
                
                If ActiveSheet.Range("A1").Offset(r, c) = "" Then
                Else
                
                    Cells(20, col) = ActiveSheet.Range("A1").Offset(r, c)
                End If
                
              col = col + 1
            Next c
         
        Next r
        
        For d = Range("A20", Range("A1").End(xlToRight)).Cells.Count To 1 Step -1
            
            If Cells(20, d).Value = "" Then
                Cells(20, d).Delete Shift:=xlToLeft
            End If
            
        Next d
        
End With
Set sh = Nothing

End Sub







Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
Post: 1.111
Registrato il: 24/06/2015
Città: CATANIA
Età: 80
Utente Veteran
Excel2019
OFFLINE
08/05/2023 07:28

Salve a tutti

@tanimon
Frank, perchè utilizzi With sh ... End With ?
Mi sembra che non sia necessario (e si potrebbe anche evitare di settare il foglio).

Ciao,
Mario
Post: 1.563
Registrato il: 27/06/2011
Utente Veteran
excel 2007
OFFLINE
08/05/2023 07:36

Ciao Mario,
hai ragione ma non sapendo se nel file
originale è presente un singolo foglio....
ho preferito aggiungerlo.
Ciao
Frank







Stretta la foglia, larga la via, dite la vostra che ho detto la mia.
Excel 2007 forse anche 2013 ... 2021 ... 365 e future...
Post: 7.246
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
08/05/2023 09:03

Ciao Frank, grazie per la risposta, ma non va bene, la macro funziona, però ho visto che salti le celle vuote, e non deve saltarle, in quanto nel ripristinare i dati nella tabella, come faccio a capire quale sia il dato vuoto.

per la verità mi sono ricordato di aver creato delle macro per un file CSV, sono riuscito a trovarle, ed ho preso spunto da quelle, questa è la macro risultante per prendere i dati

Sub nuovo()
Dim rng, x, r, tmp
  
r = Cells(Rows.Count, 1).End(xlUp).Row
Set rng = ActiveSheet.Range("A1:I" & r)

For Each x In rng
    tmp = tmp & x & ";"
Next x
tmp = Mid(tmp, 1, Len(tmp) - 1)
Range("P1") = tmp
End Sub


questo il risultato tutto in una cella



anche se al momento non ho il ritorno a capo, però conosco il numero di colonne della tabella, sto creando adesso la macro di ripristino dividendo la stringa in base alle colonne con il ritorno a capo.

vediamo come va a finire.

Ciao Salvatore (8-D

se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 2.955
Registrato il: 10/10/2013
Città: VICENZA
Età: 69
Utente Veteran
365
OFFLINE
08/05/2023 09:18

ciao
ho fatto per capriccio
alcune prove con formule basiche
so che a te non può andare bene per via della colonna d'appoggio

ma se vuoi dare un'occhiata tanto per divertimento

tutto parte dalla colonna N

la stringa in Q2

lo sviluppo della tabella in A22
Post: 7.247
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
08/05/2023 10:39

Ciao Federico ho visto, però non ho capito la tabella alla riga 22, non riporta i dati come originalmente sopra, a parte che sono tutte formule Matriciali, poi la colonna d'appoggio serve solamente per esplodere la cella Q2, ma non ripristina la tabella originale.

comunque sono riuscito a riportare i dati di nuovo nella tabella, come si può vedere



la tabella sotto è solamente per vedere se i dati collimano

questa la macro

Sub espandi()
Dim r, c, c1, d, x, k

k = Split(Cells(1, 16), ";")
r = 1: c = 1
For x = 0 To UBound(k)
  Cells(r, c) = k(x)
  c = c + 1
  If c = 10 Then c = 1: r = r + 1
Next x
End Sub


a cosa mi serve questo metodo, ho una tabella giornaliera in cui vengono scritte delle presenze, la tabella è unica ed è relativa ad 1 sola giornata.scritte le presenze devo salvarle perche poi potranno essere modificate successivamente.

non posso salvare ogni volta la tabella intera con tutti i dati in formato tabella, oltre lo spazio che occorrerebbe, ma anche un foglio dedicato con tutte le tabelle salvate che dovrei riprendere ogni volta.
e qui il salvataggio della tabella in un unica stringa in una cella e di fianco la data del giorno, a questo punto richiamando la giornata ripristino la tabella salvata nel caso faccio le modifiche e poi la converto in stringa di nuovo con le modifiche fatte per essere usate successivamente.

P.S. se conoscete qualche altro metodo più semplice e sempre benvenuto

Ciao a tutti e grazie By Sal (8-D

[Modificato da by sal 08/05/2023 10:45]
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 2.956
Registrato il: 10/10/2013
Città: VICENZA
Età: 69
Utente Veteran
365
OFFLINE
08/05/2023 10:54

ciao
ti ho avvisato che a te non poteva andare bene
e certo che ripristina la tabella ma sotto non certamente sopra l'originale
con le formule non si può

dove le vedi le differenze
se vuoi anche l'intestazione
=SE.ERRORE(INDICE($A$1:$I$16;1+INT((RIF.RIGA(A1)-1)/COLONNE($A$1:$I$16));RESTO(RIF.RIGA(A1)-1+COLONNE($A$1:$I$16);COLONNE($A$1:$I$16))+1);"")

ma è chiaro che a te serve il VBA
è solo per curiosità.





[Modificato da federico460 08/05/2023 10:58]
Post: 7.248
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
08/05/2023 10:58

Ciao a parte che non mi sarei mai permesso di contestare le tue formule, ma questo è il file che ho scaricato, ho fatto anche F9 nel caso fossero bloccate le formule



ecco perche ho detto che non è uguale

Ciao Salvatore (8-D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 2.957
Registrato il: 10/10/2013
Città: VICENZA
Età: 69
Utente Veteran
365
OFFLINE
08/05/2023 11:21

ciao
non hai l'espansione 😞
metti questa
=SCARTO(INDIRETTO("N"&(RIF.RIGA(A2)-1)*9+2);RIF.COLONNA(A$1)-1;0)
la tiri a destra fino alla colonna I e in basso
Post: 7.249
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
08/05/2023 11:30

Ciao OK adesso funziona, ho dovuto eliminare gli zero dalla visualizzazione, ma va bene adesso.

Ciao Salvatore (8-D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 2.958
Registrato il: 10/10/2013
Città: VICENZA
Età: 69
Utente Veteran
365
OFFLINE
08/05/2023 11:44

ciao
al prossimo acquisto di excel
passa al 365 è una goduria con le formule😀
Post: 7.250
Registrato il: 14/11/2004
Utente Master
Office 2019
OFFLINE
08/05/2023 12:08

Ciao lo so, stanno facendo una strage del vba con le formule, ma ricorda che dietro ad ogni formula(funzione) vi sempre il VBA, o altro script adesso.

poi sinceramente, non mi piace la politica che sta usando adesso la Microsoft, il fatto di fare un abbonamento per usarlo, lo so che esiste anche la versione Desktop.
e posso anche capirla visto le risorse che impiega per lo sviluppo, ma alla fine diventa una guerra per l'ultima formula o funzione.

che poi vorrei vedere tutte le persone che hanno un abbonamento quante delle nuove funzioni usano, oltretutto quando hanno realizzato un foglio lo possono passare solamente a chi ha lo stesso abbonamento, e questo diventa molto riduttivo, anzi spinge chi non ha un abbonamento a farlo, lo so che è il marketing moderno.

come pure con win11 che costringe a chi non ha un pc moderno a non poterlo usare, non credi che questa politica alla fine gli si ritorce contro e costringe a passare ad altri software, più liberi e fruibili gratuitamente, perdendo clienti.

come è successo con il 365 che ha dovuto fare una versione desktop proprio per questo motivo.

se io compro un paio di scarpe le pago una volta e le uso quando sono rotte o consumate le cambio o mi arrangio, ma non pago un canone per usarle, mi verrebbe a costare di più, è anche se mi dice che quando sono rotte ti do un paio nuovo, ma cio mi rende dipendente a vita, verso questo metodo.

dal contro però vi è anche che questo metodo genera lavoro, ma non nel nostro paese, ma in paesi lontani che vengono sfruttati da queste per il basso costo della mano d'opera.

ma finisco qui perche andrei oltre e non finirei mai

Ciao e scusa di essere diventato un poco prolisso, Salvatore (8-D
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui
Post: 2.959
Registrato il: 10/10/2013
Città: VICENZA
Età: 69
Utente Veteran
365
OFFLINE
08/05/2023 12:43

ciao
io le nuove formule le utilizzo pochissimo
giusto per impararle.

è vero che ti aiutano ma non sostituiscono certamente il VBA

rimangono sempre formule e l'espansione crea qualche problemino.

se guardi il LET() sostituisce la costuzione della vecchia formula della barra multifunzione
LAMBDA() è la vecchia UDF
poi ci sono parecchie formule che ti aiutano a gestire colonne righe e tabelle varie
niente che non si potesse fare anche prima ma molto e molto semplificato

ma stanno andando troppo veloci.

chiaro che nel forum preferisco usare formule "stagionate"
uno perchè se non impari le basi non capirai mai quello che hai tra le mani
due perchè il 365 non è ancora così comune come si crede
vedo che ci sono persone che hanno ancora il 2003 e mi sembra che le versioni
più popolari siano tra il 2010 e il 2016

poi che sia marketing lo si sa😀
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 10:51. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com