È soltanto un Pokémon con le armi o è un qualcosa di più? Vieni a parlarne su Award & Oscar!
 
Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

copiare una riga ogni "n" righe ed inserirla sotto

Ultimo Aggiornamento: 16/09/2020 06:22
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 [SM=x423051]

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 [SM=x423051]
[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 [SM=x423051]
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

perfetto
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 [SM=x423051]
[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]
Vota: 15MediaObject5,00111 1
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 21:08. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com