| | 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😀
|
|
|