2013-02-28 10 views
30

Ho un paio di centinaia di celle in Excel Vorrei concatenare in una singola stringa. Esiste un metodo più semplice per farlo, piuttosto che analizzarli uno per uno manualmente per poterli digitare in CONCATENATE(A1, A2, ....)?Concatenazione stringa batch in Excel

CONCATENATE(A1:A255) non funziona.

+0

Ci sono probabilmente modi per farlo usando vb. Quello che si desidera cercare è "concatenare una GAMMA in Excel" – loosebazooka

+2

Ci sono modi per farlo anche senza VBA: http://www.get-digital-help.com/2011/02/09/concatenate- a-cell-range-without-vba-in-excel/ –

+0

Split and Join sono due funzioni ovvie che mancano da Excel. Molto frustrante. –

risposta

35

* In una nuova scheda, digitare A1 nella cella A1,

* Tipo A2 nella cella A2

* Uso riempire serie per completare i valori nella colonna Un

* Tipo A1 nella cella B1

  • Utilizzare questo forumal nella cella B2

    = B1 & "" & A2

  • Copiare la formula verso il basso.

Copia e incolla i valori per raccogliere la stringa di valori che hai creato.

A1 A1 
A2 A1,A2 
A3 A1,A2,A3 
A4 A1,A2,A3,A4 
A5 A1,A2,A3,A4,A5 
A6 A1,A2,A3,A4,A5,A6 
A7 A1,A2,A3,A4,A5,A6,A7 
A8 A1,A2,A3,A4,A5,A6,A7,A8 
A9 A1,A2,A3,A4,A5,A6,A7,A8,A9 
A10 A1,A2,A3,A4,A5,A6,A7,A8,A9,A10 
+1

questo è un ottimo metodo stupido che funziona magnificamente, grazie –

+0

Vale la pena notare che le celle ausiliarie non hanno bisogno di essere adiacenti alle celle che si concatenano. Puoi persino metterli su un foglio di lavoro separato, per non ingombrare le cose. – DCShannon

+0

Per separare i valori da virgole, seguire queste istruzioni e utilizzarli come formula in B2: '' '= B1 &", "", "", "& A2''' – cobberboy

3

Questa funzione VBA concatenerà il contenuto delle celle, con un delimitatore opzionale, se necessario. Copiare in un modulo standard:

Option Explicit 

    Function Concat(CellRange As Range, Optional Delimiter As String) As String 
' this function will concatenate a range of cells and return the result as a single string 
' useful when you have a large range of cells that you need to concatenate 
' source: http://chandoo.org/wp/2008/05/28/how-to-add-a-range-of-cells-in-excel-concat/ 

    Dim retVal As String, dlm As String, cell As Range 
    retVal = "" 
    If Delimiter = Null Then 
     dlm = "" 
    Else 
    dlm = Delimiter 
    End If 
    For Each cell In CellRange 
     If CStr(cell.Value) <> "" And CStr(cell.Value) <> " " Then 
      retVal = retVal & CStr(cell.Value) & dlm 
     End If 
    Next 
    If dlm <> "" Then 
     retVal = Left(retVal, Len(retVal) - Len(dlm)) 
    End If 
    Concat = retVal 
End Function 
7

concatenate (a1, a2, a3, a4, a5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20 , a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45 , a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60, a61, a62, a63, a64, a65, a66, a67, a68, a69, a70 , a71, a72, a73, a74, a75, a76, a77, a78, a79, a80, a81, a82, a83, a84, a85, a86, a87, a88, a89, a90, a91, a92, a93, a94, a95 , a96, a97, a98, a99, a100, a101, a102, a103, a104, a105, a106, a107, a108, a109, a110, a111, a112, a113, a114, a115, a116, a117, a118, a119, a120 , a121, a122, a123, a124, a125, a126, a127, a128, a129, a130, a131, a132, a133, a134, a135, a136, a137, a138 , a139, a143, a141, a142, a143, a144, a145, a146, a147, a148, a149, a150, a151, a152, a153, a154, a155, a156, a157, a158, a159, a160, a161, a162, a163 , a164, a165, a166, a167, a168, a169, a170, a171, a172, a173, a174, a175, a176, a177, a178, a179, a180, a181, a182, a183, a184, a185, a186, a187, a188 , a189, a190, a191, a192, a193, a194, a195, a196, a197, a198, a199, a200, a201, a202, a203, a204, a205, a206, a207, a208, a209, a210, a211, a212, a213 , a214, a215, a216, a217, a218, a219, a220, a221, a222, a223, a224, a225, a226, a227, a228, a229, a230, a231, a232, a233, a234, a235, a236, a237, a238 , A239, A240, A241, A242, A243, A244, A245, A246, A247, A248, A249, A250, A251, A252, A253, A254, A255)

PowerShell esso!

"concatenate(a$((1..255) -join ', a'))" | clip 

Aprire la copia di file di testo e incollare

"To quickly select cells you can press CTRL and click on cells you want to be included in the concatenate function. Example, Select a cell Type =concatenate(in formula bar Press and hold CTRL button and click cells to be included. Release CTRL button Type) in formula bar and press Enter"

8

Vedi questo post del blog qui: http://www.dullsharpness.com/2011/11/14/excel-vba-range-to-csv-range2csv-function/

Si può usare in questo modo, ad esempio,con un delimitatore pipe:

=Range2Csv(A1:A255,"|") 

Accesso al tuo editor VBA utilizzando Alt+F11 e rilasciarlo in un modulo.

codice estratto è qui:

Option Explicit 
'********************************************** 
'* PURPOSE: Concatenates range contents into a 
'*   delimited text string 
'* 
'* FUNCTION SIGNATURE: Range2Csv(Range, String) 
'* 
'* PARAMETERS: 
'* Range - the range of cells whose contents 
'*    will be included in the CSV result 
'* String - delimiter used to separate values 
'*    (Optional, defaults to a comma) 
'* 
'* AUTHOR: www.dullsharpness.com 
'* 
'* NOTES: [add'l notes removed for brevity] 
'* 
'********************************************** 
Public Function Range2Csv(inputRange As Range, Optional delimiter As String) 
    Dim concattedList As String 'holder for the concatted CSVs 
    Dim rangeCell As Range  'holder cell used in For-Each loop 
    Dim rangeText As String  'holder for rangeCell's text 

    'default to a comma delimiter if none is provided 
    If delimiter = "" Then delimiter = "," 

    concattedList = ""   'start with an empty string 

    'Loop through each cell in the range to append valid contents 
    For Each rangeCell In inputRange.Cells 

    rangeText = rangeCell.Value 'capture the working value 

    'Only operate on non-blank cells (i.e. Length > 0) 
    If Len(rangeText) > 0 Then 
     'Strip any delimiters contained w/in the value itself 
     rangeText = WorksheetFunction.Substitute(rangeText, delimiter, "") 

     If (Len(concattedList) > 0) Then 
     'prepend a delimiter to the new value if we 
     'already have some list items 
     concattedList = concattedList + delimiter + rangeText 
     Else 
     'else if the list is blank so far, 
     'just set the first value 
     concattedList = rangeText 
     End If 
    End If 

    Next rangeCell 

    'Set the return value 
    Range2Csv = concattedList 

End Function 
2

Se cercate un approccio puro Excel (cioè senza VBA), allora il metodo proposto da James Jenkins è la cosa migliore. Se si è soddisfatti utilizzando VBA quindi aprire l'editor VBA, aggiungere un nuovo modulo e aggiungere questo codice:

Option Explicit 

Public Function JoinText(cells As Variant,Optional delim_str As String) As String 
    If cells.Columns.count < cells.Rows.count Then 
     JoinText = Join(WorksheetFunction.Transpose(cells), delim_str) 
    Else 
     JoinText = Join(WorksheetFunction.Transpose(WorksheetFunction.Transpose(cells)), delim_str) 
    End If 
End Function 

Per aprire l'editor VBA facilmente premere Alt-F11. Per inserire un modulo, fare clic con il tasto destro del mouse sulla cartella di lavoro elencata nella finestra "Progetto".

La funzione viene chiamata da Excel come segue:

=JoinText(A1:C1) 

Se si desidera aggiungere un delimitatore (ad esempio virgola):

=JoinText(A1:C1,",") 

Lo scopo di utilizzare la funzione di trasposizione è quello di trasformare il 2d array, 'cells', in un array 1d. Il rison per questo è che la funzione VBA Join accetta solo un array 1d. Il motivo per utilizzare due di questi è se JoinText sta guardando una riga di celle (che è ancora solo un array 2d) quindi la prima chiamata a trasporre, traspone questo array di righe 2d in un array di colonne 2d, la seconda chiamata lo trasforma in un array 1d.

2

Il mio metodo preferito è quello di tagliare e incollare i valori in un editor che consente espressioni regolari, quindi rimuovo semplicemente le schede (o spazi) con un Trova e sostituisci sulla mia selezione corrente.

Puoi anche usarlo per inserire virgole, spazi bianchi o qualsiasi altra cosa tu voglia.

E 'una tonnellata più veloce della battitura =concatenate(A1,",","A2",",",......)

+0

Mi piace TextPad (freeware). -Con F8 per aprire la finestra di dialogo "Trova/Sostituisci". -controlla la casella 'usa l'espressione regolare' -FIND: \ n SOSTITUISCI:, – bkwdesign

1

E non è puramente Excel, ma c'è un modo semplice per farlo con Word.

  1. Selezionare le celle che si desidera concatenare e copiarle/incollarle in Word. Questo crea una tabella.
  2. Seleziona l'intera tabella.
  3. Converti la tabella in testo. Usa i segni di paragrafo (o qualcos'altro che non appare nel tuo testo) come separatori.
  4. Seleziona tutto il testo.
  5. Utilizzare Sostituisci per rimuovere i segni di paragrafo. (Nel "Trova", immettere^p. Lasciare il "Sostituisci con" scatola vuota.)
0

dove i valori che si desidera concantenate iniziare nella riga 2 colonna 3 del foglio

Sub GOWN() 
roww = 2 
Do While cells(roww, 2) <> "" 
    aa = cells(roww, 3) 
    dd = dd & aa & "," 
    roww = roww + 1 
Loop 
cells(roww + 1, 3) = dd 
End Sub 
13

Premere Alt-F11, inserire il nuovo modulo, incollare il codice qui sotto.

Public Function concatRange(data As Range, Optional sep As String = "") As String 
    Dim ret As String 
    Dim sep2 As String 
    ret = "" 
    sep2 = "" 

    For Each cell In data 
     ret = ret & sep2 & cell.Value 
     sep2 = sep 
    Next cell 

    concatRange = ret 
End Function 

Usage:

=concatRange(A8:D11;", ") 'OS with ; list separator 
=concatRange(A8:D11,", ") 'OS with , list separator or in a macro code 

o

=concatRange(A8:D11) 
0

è sufficiente aggiungere il deliminator in una concatenazione:

=concatenate(A1, ",") 

quindi copiare tutti i concatenazioni, incollarli come valori. Quindi copia questi valori, incollali in una trasposizione. Quindi copia i valori Trasposti e incollali in un editor di parole. Fai una ricerca per il deliminatore E lo spazio che precede i valori e fai una sostituzione per SOLO il deliminatore. Questo dovrebbe darti una stringa concatenata di tutti i valori con un deliminatore. Questo è molto più semplice di altre opzioni.

1

Se si dispone di Excel 2016, è possibile utilizzare una formula di matrice:

Enter

= concat (a1: A255)

nella cella, quindi premere

[ctrl] + [shift] + [enter]

+0

Non c'è bisogno di inserire come una formula di matrice in realtà, 'CONCAT()' accetta un input di array ma restituisce una stringa, quindi devi solo colpire accedere – Greedo

0

spudoratamente copiato da this site:

  1. Selezionare la cella in cui è necessario il risultato.
  2. Passare alla barra della formula e immettere ... "= A1: A5"
  3. Selezionare l'intera formula e premere F9 (questo converte la formula in valori).
  4. Rimuovere le parentesi graffe da entrambe le estremità.
  5. Aggiungi = CONCATENA (all'inizio del testo e terminare con una parentesi rotonda).
  6. Premere Invio.

Ciò che è particolarmente rivelatrice qui è che quando si modifica una formula, premere F9 sostituisce la formula con il risultato di tale formula. Laddove si tratta di un intervallo, lo sostituisce con un elenco dei contenuti di tale intervallo.

Problemi correlati