| | Post: 1 | Registrato il: 11/09/2020
| Età: 56 | Utente Junior | 2013 | | OFFLINE | |
|
11/09/2020 17:52 | |
buonasera a tutti.
Spero possiate aiutarmi.
ho una foglio con 3600 righe.
a seconda dell'errore di misurazione, il mio strumento mi emette un numero di dati inferiore, riempendomi circa 3400 righe.
Dovei interpolare e riempire le righe vuote.
per far eun lavoro corretto, devo calcolare ogni quante righe interpolare un dato (ad esempio ogni 8 righe), poi dovrei fare una macro che partendo dalla riga 1, ogni 8 righe mi ci la riga e me la inserisca tra la riga stessa e quella successiva.
questo va ripetuto per il numero di volte necessario ad arrivare alla riga 3600.
spero di essere stato chiaro, perchè non è semplice da spiegare.
Grazie anticipatamenta a chi mi risponderà |
|
| | Post: 151 | Registrato il: 03/09/2018
| Città: GROTTAGLIE | Età: 25 | Utente Junior | Microsoft Office Professional Plus 2019 64 bit | | OFFLINE | |
|
11/09/2020 21:18 | |
Ciao aquila-uno1968, potresti creare un file esempio? |
| | Post: 6.067 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
12/09/2020 07:25 | |
Ciao, non sono molto bravo in matematica, ma si dovrebbe prima calcolare gli spazi per arrivare a 3600 e poi riempirli, con che cosa? una riga vuota?
non so se sia esatto ma la differenza tra 3600-3400 = 200 quindi 3400/200 dovrebbe essere 17, quindi ogni 17 record inserire una riga
se poi per te 8 è un numero specifico nel senso che ogni 8 rilevazioni sono 1 minuto, visto che 3600 dovrebbero essere secondi 60*60 = 1 ora
per cui non so come interpretare la cosa.
stabilisci meglio, poi vedremo anche con un esempio che facilita di più la cosa.
Ciao By Sal
se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
| | Post: 1 | Registrato il: 11/09/2020
| Età: 56 | Utente Junior | 2013 | | OFFLINE | |
|
14/09/2020 08:29 | |
ciao,
By sal ha compreso il problema.
il numero 8 era scritto a caso, in realtà il calcolo che faccio per ogni serie di dati, è chiaramente quello scritto da te.
Trovato ildato, devo ongi "n" righe copiare la riga corrispondente ed inserirla appena sotto.
i dati sono una lettura di un run out. Con un comparatore elettronico leggo l'eccentricità di un pezzo in rotazione. Devo avere una lettura ogni 0.10°. Siccome non posso definire ogni quanti gradi, ma ogni quanti millisecondi leggere, alla fine del giro, per via di errori negli encoder del tornio, leggo meno dati: 3100 una volta, 3400 l'altra ecc..
I valori delle letture sono talmente vicini (parliamo di micron di differenza) che basta inserire un dato in più ogni "n" dati, per avere i 3600 dati richiesti dal cliente.
La cosa che cerco di fare, è solo automatizzare il "copia - inserisci" di una riga, ripetuto per il nimero di volte pari al numero di dati mancanti, ed intervalalte dal numero di righe calcolate come ha intuito correttamente By sal. |
| | Post: 6.070 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
14/09/2020 15:49 | |
Ciao ecco una soluzione che a me non piace, in quanto dovrebbe essere precisa, ma come ho detto la matematica non è il mio forte, e non sono riuscito a trovare il dato giusto.
però ho trovato un escamotage, ho messo una funzione "Conta.Valori()" in "E1" che conta quanti valori sono nella colonna "A".
questo perche a te, da come ho capito non interessano i valori ma soltanto riempire la colonna fino al raggiungimento di 3600 valori.
la mia macro ne inserisce qualcuno in più, non ne capisco il motivo forse il calcolo errato, o il ciclo sbagliato, ecco perche ho inserito il limitatore.
non hai inserito un elenco e mi sono dovuto "Arrangiare", ecco la macro, ho inserito 3600 valori e poi ne ho eliminato manualmente una quantità.
lanciata la macro calcola ogni quante righe deve inserire il valore che lo prende dalla cella superiore, quindi hai 2 valori uguali ogni x righe, arrivato a 3600 righe chiude la macro.
Sub riempi()
Dim x, r, d, n
r = Cells(Rows.Count, 1).End(xlUp).Row
n = 3600 - r
d = Abs(Int(r / n)) - 1
For x = r To 1 Step -d
If Cells(1, 5) = 3600 Then Exit For
Cells(x, 1).Insert Shift:=xlDown
Cells(x - 1, 1).Copy Cells(x, 1)
Next x
End Sub
Ciao By Sal [Modificato da by sal 14/09/2020 15:50] se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
|
14/09/2020 18:59 | |
Ciao a tutti
Con questo quesito (mi piacerebbe vedere altre risposte)
Come dice By Sal è giusto inserire una riga ogni "TOT" righe, il problema se NON sono numeri interi. Da due giorni ci divento "matto" e non ci riesco. |
| | Post: 6.072 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
15/09/2020 08:56 | |
Ciao questo rende il numero intero
d = Abs(Int(r / n)) - 1
Abs perche a volte il numero può essere negativo
Ciao By Sal se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
|
15/09/2020 13:01 | |
Ciao By Sal
>>>quindi ogni 17 record inserire una riga
A parte la riga 'If Cells(1, 5) = 3600 Then Exit For
Ho provato il Tuo codice con 3400 righe ed è arrivato ad 3613 righe
Io ho già il VBA per arrivare a 3600 righe (solo se è un numero intero)
Se NON fosse un numero intero (qui sono due giorni che ci provo)
r = Cells(Rows.Count, 1).End(xlUp).Row
x = 3600 - r
In teoria metto 17/18 righe e quando yy Mod 3600/x = 0, devo farlo diventare 16/17
Qui diventa un casino, perchè x diminuisce ogni volta
[Modificato da ABCDEF@Excel 15/09/2020 13:12] |
| | Post: 2 | Registrato il: 11/09/2020
| Età: 56 | Utente Junior | 2013 | | OFFLINE | |
|
15/09/2020 14:31 | |
assolutamente meraviglioso!!!!!
funziona perfettamente. Grazie!
non hai idea del tempo e della nia che mi sono risparmiato!
al contrario si può fare?
se ho per esempio 3800 valori e voglio cancellare una riga ogni n con la stessa logica di prima?
grazie!
Gianluca |
| | Post: 6.073 | Registrato il: 14/11/2004
| Utente Master | Office 2019 | | OFFLINE |
|
15/09/2020 15:48 | |
Ciao Gianluca, non devi fare altro che duplicare la macro e dove vedi 3600 scrivi 3800.
Logicamente la seconda invece di chiamarla "Riempi" la chiami "Riempi2" o "Riempi3800"
Ciao By Sal [Modificato da by sal 15/09/2020 15:49] se ti piace la soluzione sostienici con una DONAZIONE a piacere. Grazie clicca qui |
|
16/09/2020 06:22 | |
Alla fine l'ho fatto e mi dà le righe "ESATTE" (non ho fatto molte prove)
Se si mette meno righe aggiunge, se si mette piu righe diminuisce
Nella 4° riga.... v1 = 3600 che si può cambiare
L'unica cosa che il VBA non funziona se le righe sono uguale a v1 e non possono essere minori della meta oppure maggiori del doppio.
Ex V1=100, le righe dovranno essere da minimo 50 a massimo 200 [Modificato da ABCDEF@Excel 16/09/2020 18:03] |
|
|