Excel: concatenare celle in cui il numero di riferimento corrisponde [duplicato]


4

Questa domanda ha già una risposta qui:

Ho un foglio di lavoro con molte righe. Alcune righe condividono numeri di riferimento (contenuti, diciamo, nella colonna A). Quello che mi piacerebbe fare è, dove una riga condivide un numero di riferimento con un'altra riga, mi piacerebbe concatenare i dati contenuti, diciamo, nella colonna B da entrambe le righe a una nuova cella, diciamo, nella colonna C .

Esempio:

Col A      Col B         Col C                    
12345     Robert      Robert, David      
12345     David        Chris                    
54321     Chris                                     


1
Nel tuo esempio, che è molto chiaro e ben strutturato, col C è Cognome, Nome - Non sono sicuro che l'ordine sarà possibile a meno che il cognome non sia sempre presente prima del nome (leggendo la colonna (). che problema? +1
Dave

@DaveRook Non credo che l'OP abbia Col C come Cognome, FirstName è una combinazione di valori del Col B. Robert e David sono i primi due valori e poiché entrambi hanno 12345 nel Col A l'OP li vuole insieme.
Brad Patton,

Brad ha ragione. Col C è solo un posto dove scaricare la concatenazione. Non mi importa in quale ordine vadano in particolare, ma anche se lo facessi, sembra che sia un problema separato.
Lewes Dev,

Questo è così ben formattato e l'altro è così mal formattato che non posso dire se questo è davvero un duplicato. Inoltre, non si parla di evitare VBA in questa domanda.
Tanner Faulkner,

Il divertimento con questo inizia quando provi a farlo con una formula;) E ho visto alcuni dei maghi eccellenti farlo :)
helena4

Risposte:


2

Ecco l'approccio VBA. Supponendo Excel 2007 o successivo; i primi passaggi differiranno se si utilizza una versione pre-Ribbon di Excel.

  1. Abilita la scheda Sviluppatore

  2. Fai clic su "Visual Basic" nella scheda Sviluppatore sulla barra multifunzione

  3. Fai clic con il tasto destro del mouse su "VBAProject (qualunque sia il tuo foglio è denominato.xls *)" e fai Inserisci -> Modulo nel menu contestuale

  4. Incolla questo codice

    Option Explicit
    
    Function allquixotic(param As Variant, search As Range, values As Range, Optional absolute As Boolean = False) As String
    
    Dim sep As String, retval As String
    Dim i As Integer, rownum As Integer
    Dim look As Range, j As Range
    
    sep = ", "
    retval = ""
    For i = 1 To search.Rows.Count
    Set look = search.Cells(i, 1)
    If absolute Then
            rownum = look.Row
    Else
            rownum = i
    End If
    
    If look.Value = param Then
            If absolute Then
                    Set j = values.Worksheet.Cells(rownum, values.Column)
            Else
                    Set j = values.Cells(i, 1)
            End If
            retval = IIf(retval = "", retval & j.Value, retval & sep & j.Value)
    End If
    
    Next
    
    allquixotic = retval
    
    End Function
  5. Usa la funzione del foglio di lavoro (sentiti libero di rinominarla) usando una formula simile

    =allquixotic(A1,$A$1:$A$15,$B$1:$B$15,true)
  6. Utilizzare la maniglia di riempimento per inserire la formula in tutte le celle

I parametri sono i seguenti:

=allquixotic(look_cell, key_range, value_range, absolute)

look_cell: Il primo parametro dovrebbe essere una singola cella o un valore letterale . L'input valido include cose come 3, $6.25, "Hello", ecc Questo è il valore che si sta cercando di trovare in key_range.

key_range: Questo dovrebbe essere un intervallo di celle (più di una cella); se absoluteè vero, otterrai risultati molto strani a meno che questo non sia un intervallo contiguo (tutti i valori sono in righe sequenziali).

value_range: Questo dovrebbe essere un intervallo di celle (più di una cella); se absoluteè vero, otterrai risultati molto strani a meno che questo non sia un intervallo contiguo (tutti i valori sono in righe sequenziali).

absolute: Se vero, utilizzeremo il numero di riga assoluto (relativo al numero di righe nell'intero foglio di calcolo) di ciascuna riga "trovata" in key_rangeper determinare da quale riga estrarre un valore value_range. Se falso, useremo i numeri relativi; ad esempio, se troviamo una corrispondenza nella terza riga di key_range, estrarremo il valore dalla terza riga di value_range. Il valore consigliato è FALSE oppure è possibile ometterlo per impostazione predefinita.

Nota : questa funzione non supporta il caso in cui la chiave e gli intervalli di valori sono in colonne , ma dovrebbe essere abbastanza facile adattarlo a quello.

Inoltre, se si specificano più colonne in key_range o value_range, verrà utilizzata solo la colonna più a sinistra.


Grazie allquixotic. E non ho rinominato la funzione perché il tuo nome è fantastico!
Lewes Dev,

-1

Funzionerebbe per te? Imposta la formula in C2 come

=IF(A2=A3,B2 & ", " & B3,B3)

Presuppone che i tuoi dati siano ordinati su ColA in modo che i numeri di riferimento siano raggruppati insieme.

DOMANDA: Possono esserci più di 2 nomi con lo stesso numero di riferimento in ColA?


Purtroppo, poiché è probabile che il documento cambi, si sposti e cresca, avere riferimenti assoluti alle celle rende un po 'difficile da implementare. Speravo in qualcosa di un po 'più flessibile.
Lewes Dev,

Penso che avrai bisogno di una macro VBA per eseguire il loop delle colonne
Brad Patton

2
Questi non sono riferimenti assoluti; sono riferimenti relativi (offset). Se fossero riferimenti assoluti, avrebbero segni di dollaro ( $) in essi. Come mostrato sopra, puoi estendere (trascinare / riempire) la cella C2a C3e otterrai automaticamente =IF(A3=A4, B3 & ", " & B4, B4).
Scott
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.