Condividi:        

Concatena celle colonne

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Concatena celle colonne

Postdi c_ros » 01/02/14 11:55

Ciao a tutti, vi riscrivo perchè ho di nuovo problemi con una tabella di excel...
Ho questa tabella
A B C D E F G H I J K L
ID DB_ID Var rCRS locus ntvar c_pos aach aavar aaposition varInMam disease
100262 AP008479 10005G A MT-TG 1.18E-02 Schizophrenia
100350 AP008759 10005G A MT-TG 1.18E-02 Schizophrenia
100430 AP008839 10005G A MT-TG 1.18E-02 Schizophrenia
101274 GQ999958 10005G A MT-TG 1.18E-02 Schizophrenia
101360 AP011008 10005G A MT-TG 1.18E-02 Schizophrenia
10005G Conteggio 5
100748 GU392101 10031C T MT-TG 1.40E-02 Schizophrenia
100749 GU392100 10031C T MT-TG 1.40E-02 Schizophrenia
100750 GU392099 10031C T MT-TG 1.40E-02 Schizophrenia
101364 AP010998 10031C T MT-TG 1.40E-02 Schizophrenia
101405 FJ969382 10031C T MT-TG 1.40E-02 Schizophrenia
101600 JF824897 10031C T MT-TG 1.40E-02 Schizophrenia
101693 JF824990 10031C T MT-TG 1.40E-02 Schizophrenia
10031C Conteggio 7
100706 HQ713452 10042C A MT-TG 4.38E-03 Gastric carcinoma
10042C Conteggio 1
100497 AP008906 10043T C MT-TG 2.31E-03 Thyroid cancer
10043T Conteggio 1
ecc..
vorrei riuscire a raggruppare/concatenarre tutte le celle delle colonne A e B ad ogni variazione delle colonna C e successivamente eliminare i duplicati per le restanti colonne e quindi ottenere
A B C D E F GJK L
100262;100350;100430;101274;101360 AP008479;AP008759;AP008839;GQ999958;AP011008 10005G A MT-TG 1.18E-02 Schizph

I dati presenti nelle due colonne vorrei non perderli e quindi raggrupparli in una sola cella. So che si deve usare la funzione concatena ma le righe sono più di 40000...
Non so se sono riuscita a farmi capire.

Grazie

Ciao
c_ros
Utente Junior
 
Post: 24
Iscritto il: 06/01/14 19:39

Sponsor
 

Re: Concatena celle colonne

Postdi Anthony47 » 01/02/14 19:54

Puoi allegare per favore un file di esempio? Per come fare guarda qui: viewtopic.php?f=26&t=80395

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19223
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Concatena celle colonne

Postdi c_ros » 02/02/14 10:05

c_ros
Utente Junior
 
Post: 24
Iscritto il: 06/01/14 19:39

Re: Concatena celle colonne

Postdi Anthony47 » 02/02/14 19:29

Prova con questa macro:
Codice: Seleziona tutto
Sub cros()
Dim OldC As String, ChainA As String, ChainB As String, I As Long, NextR As Long
'
Sheets("SNP").Select
OldC = "": ChainA = "": ChainB = ""
Sheets("RIEP").Cells.ClearContents
Range("A1:O1").Copy Sheets("RIEP").Range("A1")
'
For I = 2 To Cells(Rows.Count, 3).End(xlUp).Row
    If OldC = "" Then OldC = Cells(I, 3).Value
    If Cells(I, 3).Value = OldC Then
        ChainA = ChainA & ";" & Cells(I, 1)
        ChainB = ChainB & ";" & Cells(I, 2)
    Else
        With Sheets("RIEP")
            NextR = .Cells(Rows.Count, 1).End(xlUp).Row + 1
            .Cells(NextR, 1) = Mid(ChainA, 2, 9999)
            .Cells(NextR, 2) = Mid(ChainB, 2, 9999)
            .Cells(NextR, 3) = OldC
            .Cells(NextR, 4).Resize(1, 9).Value = Cells(I - 1, 4).Resize(1, 9).Value
            OldC = Cells(I, 3): ChainA = "": ChainB = ""
            I = I - 1
        End With
    End If
Next I
End Sub

La macro crea un riepilogo in un foglio chiamato RIEP, che deve gia' esistere e che sara' AZZERATO SENZA PREAVVISO prima di procedere nel calcolo.
Se, come immagino, colonna A e B sono dei "testi", allora dovrai formattarle "Testo" prima di lanciare la macro.

Prova e fai sapere.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19223
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Concatena celle colonne

Postdi c_ros » 02/02/14 20:37

Sei un genio!!!!!!funziona benissimo!!!!:) :) :)
grazie grazie grazie!!!
c_ros
Utente Junior
 
Post: 24
Iscritto il: 06/01/14 19:39

Re: Concatena celle colonne

Postdi c_ros » 05/05/14 19:32

Ciao Anthony,

ho provato ad applicare la tua macro in un'altra tabella che a differenza di quello che ho precedentemente proposto è molto più grande, ha circa 900000 righe. Applicando la tua macro l'errore che riscontro è che più di 100 valori vengono esclusi, nel senso che andando a controllare i valori della tabella originale (SNP) facendo un semplice rimuove duplicati, mi ritrovo che nel foglio RIEP ci sono dei valori mancanti.
Ho provato a modificare in qualche modo la macro ma non essendo esperta non ho concluso niente....
Mi potresti aiutare in qualche modo?
Grazie
c_ros
Utente Junior
 
Post: 24
Iscritto il: 06/01/14 19:39

Re: Concatena celle colonne

Postdi Anthony47 » 06/05/14 00:40

La macro aveva due problemi:
-prevedeva max 9999 caratteri per ogni cella; in alcune situazioni (soprattutto con lunghi elenchi) il contenuto di colonna A e B poteva risultare troncato
-veniva dimenticato l' ultimo codice presente in colonna C
Comunque il max contenuto di una cella puo' arrivare a 32000 caratteri, ossia circa 3600 "reference_DB_ID" (se ognuno e' di 8 crt); gia' nell' elenco di sole 28mila righe c' erano celle che contengono 1400 di questi valori (cioe' 12300 crt), non sara' difficile su elenchi lunghi 900mila righe superare questo limite e ottenere, sulle colonne A e B, valori monchi.

Il codice delle nuova macro:
Codice: Seleziona tutto
Sub cros2()
Dim OldC As String, ChainA As String, ChainB As String, I As Long, NextR As Long
'
Sheets("SNP").Select
OldC = "": ChainA = "": ChainB = ""
Sheets("RIEP").Cells.ClearContents
Range("A1:O1").Copy Sheets("RIEP").Range("A1")
'
For I = 2 To Cells(Rows.Count, 3).End(xlUp).Row + 1
    If OldC = "" Then OldC = Cells(I, 3).Value
    If Cells(I, 3).Value = OldC Then
        ChainA = ChainA & ";" & Cells(I, 1)
        ChainB = ChainB & ";" & Cells(I, 2)
    Else
        With Sheets("RIEP")
            NextR = .Cells(Rows.Count, 1).End(xlUp).Row + 1
            .Cells(NextR, 1) = Mid(ChainA, 2, 99999)
            .Cells(NextR, 2) = Mid(ChainB, 2, 99999)
            .Cells(NextR, 3) = OldC
            .Cells(NextR, 4).Resize(1, 9).Value = Cells(I - 1, 4).Resize(1, 9).Value
            OldC = Cells(I, 3): ChainA = "": ChainB = ""
            I = I - 1
        End With
    End If
Next I
End Sub

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19223
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Concatena celle colonne

Postdi c_ros » 09/05/14 19:00

Il problema continua a sussistere nel senso che i valori duplicati che vengono eliminati, e risultano nella tabella RIEP, sono di numero inferiore rispetto a quelli che risultano andando a fare rimuovi duplicati duplicati dalla tabella di partenza (SNP)...
c_ros
Utente Junior
 
Post: 24
Iscritto il: 06/01/14 19:39

Re: Concatena celle colonne

Postdi Anthony47 » 09/05/14 22:56

Allora mi servirebbe un file con la documentazione dell' errore; ce la fai a pubblicarlo?
Avatar utente
Anthony47
Moderatore
 
Post: 19223
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Concatena celle colonne":


Chi c’è in linea

Visitano il forum: Nessuno e 60 ospiti