Excel: combina più colonne in una colonna

Ho più elenchi che sono in colonne separate in Excel. Quello che devo fare è combinare queste colonne di dati in un’unica grande colonna. Non mi interessa se ci sono voci duplicate, tuttavia voglio saltare la riga 1 di ogni colonna.

Inoltre, se ROW1 ha intestazioni da gennaio a dicembre e la lunghezza delle colonne è diversa e deve essere combinata in un’unica colonna?

ROW1| 1 2 3 ROW2| ADG ROW3| BEH ROW4| CFI 

dovrebbe combinare in

 ABCDEFGHI 

La prima riga di ogni colonna deve essere saltata.

Prova questo. Fai clic in qualsiasi punto del tuo intervallo di dati e quindi utilizza questa macro:

 Sub CombineColumns() Dim rng As Range Dim iCol As Integer Dim lastCell As Integer Set rng = ActiveCell.CurrentRegion lastCell = rng.Columns(1).Rows.Count + 1 For iCol = 2 To rng.Columns.Count Range(Cells(1, iCol), Cells(rng.Columns(iCol).Rows.Count, iCol)).Cut ActiveSheet.Paste Destination:=Cells(lastCell, 1) lastCell = lastCell + rng.Columns(iCol).Rows.Count Next iCol End Sub 

È ansible combinare le colonne senza utilizzare macro. Digitare la seguente funzione nella barra della formula:

= SE (ROW () <= CONTA.VALORI (A: A), INDEX (A: A, ROW ()), SE (ROW () <= CONTA.VALORI (A: B), INDEX (B: B, ROW () - COUNTA (A: A)), SE (ROW ()> COUNTA (A: C), “”, INDEX (C: C, ROW () – COUNTA (A: B)))))

L’istruzione usa 3 funzioni IF, perché deve combinare 3 colonne:

  • Per la colonna A , la funzione confronta il numero di riga di una cella con il numero totale di celle in una colonna che non sono vuote. Se il risultato è true, la funzione restituisce il valore della cella dalla colonna A alla riga (). Se il risultato è falso, la funzione passa alla successiva istruzione IF.
  • Per la colonna B , la funzione confronta il numero di riga di una cella con il numero totale di celle nell’intervallo A: B che non sono vuote. Se il risultato è true, la funzione restituisce il valore della prima cella che non è vuota nella colonna B. Se false, la funzione passa alla successiva istruzione IF.
  • Per la colonna C , la funzione confronta il numero di riga di una cella con il numero totale di celle nell’intervallo A: C che non sono vuote. Se il risultato è true, la funzione restituisce una cella vuota e non esegue ulteriori calcoli. Se false, la funzione restituisce il valore della prima cella che non è vuota nella colonna C.

Ho creato un esempio di foglio di calcolo qui di come fare questo con semplici formule di Excel, e senza l’uso di macro (sarà necessario apportare le proprie modifiche per sbarazzarsi della prima riga, ma questo dovrebbe essere facile una volta capito come il mio esempio fogli di calcolo funziona):

https://docs.google.com/a/umich.edu/spreadsheet/ccc?key=0AuSyDFZlcRtHdGJOSnFwREotRzFfM28tWElpZ1FaR2c#gid=0

Non sono sicuro se questo aiuta completamente, ma ho avuto un problema in cui avevo bisogno di un’unione “intelligente”. Avevo due colonne, A e B. Volevo spostare B solo se A era vuoto. Vedi sotto. Si basa su un intervallo di selezione, che è ansible utilizzare per compensare la prima riga, forse.

 Private Sub MergeProjectNameColumns() Dim rngRowCount As Integer Dim i As Integer 'Loop through column C and simply copy the text over to B if it is not blank rngRowCount = Range(dataRange).Rows.Count ActiveCell.Offset(0, 0).Select ActiveCell.Offset(0, 2).Select For i = 1 To rngRowCount If (Len(RTrim(ActiveCell.Value)) > 0) Then Dim currentValue As String currentValue = ActiveCell.Value ActiveCell.Offset(0, -1) = currentValue End If ActiveCell.Offset(1, 0).Select Next i 'Now delete the unused column Columns("C").Select selection.Delete Shift:=xlToLeft End Sub 
 Function Concat(myRange As Range, Optional myDelimiter As String) As String Dim r As Range Application.Volatile For Each r In myRange If Len(r.Text) Then Concat = Concat & IIf(Concat <> "", myDelimiter, "") & r.Text End If Next End Function