Pagina precedente | 1 | Pagina successiva
Facebook  

Controllo valori in due colonne. Come aggiungere celle vuote in automatico

Ultimo Aggiornamento: 15/02/2018 07.26
Autore
Stampa | Notifica email    
Post: 1
Registrato il: 13/02/2018
Città: ROMA
Età: 56
Utente Junior
office 2013
OFFLINE
13/02/2018 13.46

Buongiorno a tutti, mi presento, sono Stefano di Roma e per lavoro mi interfaccio spesso con Excel (che io adoro). Come sempre non si finisce mai di imparare. Vi spiego il mio problema.
Si tratta di confrontare due colonne numeriche (normalmente la prima colonna comprende più campi numerici della seconda) ordinate dal più piccolo e dove devo mettere in ordine sulla stessa riga i numeri uguali inserendo nella seconda tante celle vuote quante ne occorrono per far collimare i numeri uguali sulla stessa riga.Devo fare questo lavoro periodicamente e i numeri nella seconda colonna possono variare di volta in volta. La prima colonna
Quindi non si tratta di cercare valori ma di ordinare la seconda colonna sulla prima (più grande e che comprende i numeri della seconda) inserendo tante celle vuote quanto ne servono per fare stare tutti i valori uguali sulla stessa riga. Ovviamente tutto questo in automatico. Possibilmente se si può fare tramite funzioni e/o macro perchè di vba sono un pò a digiuno.
Come si presenta:
colonna1 colonna2
1 2
2 5
3 6
4 7
5
6
7
8
come deve venire:
colonna1 colonna2
1
2 2
3
4
5 5
6 6
7 7
8
La colonna 2 i codici 2,6,7 hanno sulla stecca riga altri valori che devono essere spostati insieme, quindi bisogna inserire n celle vuote sulla stessa riga. Allego file di esempio.
Spero di essermi spiegato bene.
Ringrazio fin d'ora chi saprà aiutarmi e in ogni caso, grazie comunque.
Ciao.
Stefano
[Modificato da bedexx 13/02/2018 14.12]
La Juve come antidoto al populismo Testimoni di Geova Online...come15/05/2018 13.52 by giusyforever
EVIDENZIARE CELLE DI DIVERSO COLORE IN BASE AL TEMPO RESTANTE ALLA SCADENZAcelle23/05/2018 17.41 by by sal
formattazione condizionale o funzionefunzione02/05/2018 15.39 by diego=18
Post: 521
Registrato il: 24/06/2015
Città: CATANIA
Età: 74
Utente Senior
Excel2010
ONLINE
13/02/2018 16.28

Ciao
Nel tuo esempio lascia solo i valori nell'intervallo A3:I11 ed elimina quelli sotto (in "come dovrebbe venire".
In un Modulo standard metti questa macro (da associare ad un pulsante)
Sub confronta_sposta()
ur = Cells(Rows.Count, 1).End(xlUp).Row
ele = "A3:A" & ur
Range(ele).Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
For i = ur To 3 Step -1
    For j = Cells(Rows.Count, 2).End(xlUp).Row To 3 Step -1
        If Cells(i, 1) = Val(Cells(j, 2)) Then
            Cells(j, 2).Select
            Range(Cells(j, 2), Cells(j, 9)).Cut Destination:=Sheets(1).Cells(i, 2)
        End If
    Next j
Next i
End Sub


Fai sapere. Ciao,
Mario
Post: 2.674
Registrato il: 03/04/2013
Utente Veteran
Excel 2000 - 2013
OFFLINE
13/02/2018 18.31

Buona sera, bedexx;
dopo aver preso buona nota della soluzione proposta da @Marius44, che saluto, potresti considerare questo Codice VBA:
Option Explicit

Sub Test()
Application.ScreenUpdating = False
Dim URc1 As Long, URc2 As Long, x As Long, y As Long
Dim Cdc() As Long

    Range("A17:I25").Clear
    Range("A3:A11").Copy Range("A17")
    URc2 = Range("B" & Rows.Count).End(xlUp).Row
ReDim Cdc(URc2)
        For x = 3 To 8
            Cdc(x - 2) = Cells(x, 2).Value
        Next x
    URc1 = Range("A" & Rows.Count).End(xlUp).Row
        For y = 17 To 25
            For x = 1 To 5
                If Cells(y, 1).Value = Cdc(x) Then Range(Cells(x + 2, 2), Cells(x + 2, 9)).Copy Cells(y, 2)
            Next x
        Next y
Application.ScreenUpdating = True
End Sub


Considera che solo una bozza riferita strettamente ai Range del tuo esempio; in realtà preferirei adattarlo ad altro Foglio di lavoro nel quale riportare il risultato presente nel Range "A16 : I25" del tuo esempio.


A disposizione.

Buona serata.

Giuseppe

Windows XP - Excel 2000
Windows 10 - Excel 2013
Post: 1
Registrato il: 13/02/2018
Città: ROMA
Età: 56
Utente Junior
office 2013
OFFLINE
14/02/2018 08.26

Marius44, grazie infinite, funziona perfettamente.
Anche la soluzione di Giuseppe funziona ma quella di Marius mi modifica direttamente i dati di lavoro (che è esattamente quello che volevo) mentre il metodo "Giuseppe" mi crea una copia del foglio di lavoro opportunamente modificata.
Grazie a tutti e due e anche a quanti hanno solo letto il mio quesito.
Comunque ho capito che è ora di imparare bene il VBA, perchè immagino che non 'si possa arrivare ad una soluzione del mio problema tramite funzioni e macro senza utilizzare il codice. Almeno io non l'avevo trovata.
Spero in futuro di potermi sdebitare con voi con un mio contributo nel forum.
Un caro saluto e ancora grazie.
Bedexx
Post: 2
Registrato il: 13/02/2018
Città: ROMA
Età: 56
Utente Junior
office 2013
OFFLINE
14/02/2018 09.55

Ciao Marius44, ho applicato il tuo codice ad un foglio di lavoro vero e funziona benissimo. Ho notato però che se per caso la colonna B contiene un codice che non esiste ancora nella colonna A (e che deve essere inserito nella colonna A come un nuovo codice) tale codice viene eliminato dalla colonna B.
Lo so, non avevo detto questa cosa ma avevo paura di complicare troppo la spiegazione iniziale. Mi servirebbe che nel caso in cui nella colonna B compare un nuovo codice che ancora non esiste nella colonna A (e che quindi è da aggiungere nella colonna A) si inserisse una cella vuota nella colonna A in corrispondenza del nuovo codice della colonna B.
Grazie fin d'ora per la pazienza.
Post: 522
Registrato il: 24/06/2015
Città: CATANIA
Età: 74
Utente Senior
Excel2010
ONLINE
14/02/2018 15.35

Ciao
La prossima volta esponi il problema "completo" perchè una "mezza verità" non è la "verità".

Poichè, ritengo, che il valore "nuovo" venga inserito in col.B in coda ai presenti, bisogna creare una Collection (con chiave) che assuma tutti i valori delle col.A e B e li riscriva in col.A; quindi ordinare sia la col.A sia l'intervallo B3:I & urB e poi lanciare la macro.
Vedi se va bene questa macro (un po' diversa dalla precedente)
Sub confronta_sposta_bis()
urA = Cells(Rows.Count, 1).End(xlUp).Row
urB = Cells(Rows.Count, 1).End(xlUp).Row
Dim EleNum As New Collection
On Error Resume Next
For i = 3 To urA
    a = a + 1
    EleNum.Add Cells(i, 1).Value, Str(Cells(i, 1))
Next i
For j = 3 To urB
    a = a + 1
    b = Val(Cells(j, 2))
    EleNum.Add b, Str(b)
Next j
For i = 1 To EleNum.Count - 1
    Cells(i + 2, 1) = EleNum.Item(i)
Next i
urA = Cells(Rows.Count, 1).End(xlUp).Row
ele = "A3:A" & urA
Range(ele).Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
ele2 = "B3:B" & urB
Range(ele2).Sort Key1:=Range("B3"), Order1:=xlAscending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
For i = urA To 3 Step -1
    For j = Cells(Rows.Count, 2).End(xlUp).Row To 3 Step -1
        If Cells(i, 1) = Val(Cells(j, 2)) Then
            Cells(j, 2).Select
            Range(Cells(j, 2), Cells(j, 9)).Cut Destination:=Sheets(1).Cells(i, 2)
        End If
    Next j
Next i
End Sub


Fai sapere. Ciao,
Mario
Post: 3
Registrato il: 13/02/2018
Città: ROMA
Età: 56
Utente Junior
office 2013
OFFLINE
14/02/2018 16.00

Marius... grazie infinite, funziona alla grandissima.
Però non mi trattare male, non è che ho detto una mezza verità per nascondere chissà cosa (mica sono un politico).
Però per una mia leggerezza mi dispiace averti fatto lavorare due volte.
Grazie ancora.
Un caro saluto.
Post: 524
Registrato il: 24/06/2015
Città: CATANIA
Età: 74
Utente Senior
Excel2010
ONLINE
14/02/2018 16.40

Ciao
Grazie per il riscontro e colgo l'occasione per una precisazione.
Non era mia intenzione trattare male nessuno (mi scuso se ha inteso così); volevo solo far presente che se devo andare da Palermo a Cagliare non posso chiedere un ponte (tra Messina e Reggio non lo vogliono fare neppure) o l'autostrada, devo avere un traghetto.

Ciao e... alla prossima,
Mario
Post: 4
Registrato il: 13/02/2018
Città: ROMA
Età: 56
Utente Junior
office 2013
OFFLINE
15/02/2018 07.26

Marius, non occorre precisare niente, la mia voleva essere solo una battuta spiritosa. Hai perfettamente ragione, non sono stato esaustivo nell'esposizione del mio quesito e tu sei stato gentilissimo nel risolvermelo e ti sono grato per questo. Ti auguro una buonissima giornata.
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]
Home Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 22.46. Versione: Stampabile | Mobile | Regolamento Privacy
FreeForumZone [v.4.4.2] - Copyright © 2000-2018 FFZ srl - www.freeforumzone.com