Kombinieren Sie Zeilen in Excel

0

Ich habe Daten in Spalte 1 und Daten in Spalte 2 wie folgt:

1234      eggs
1234      bacon
1234      toast
4321      Orange Juice

Ich möchte, dass es wie folgt aussieht:

1234      eggs-bacon-toast
4321      orange juice

Ich möchte auch, dass die doppelten Zeilen automatisch gelöscht werden, sodass ich in Spalte 1 eindeutige Nummern nur mit den kombinierten Daten habe.

Laua
quelle
Du brauchst VBA. Was hast du schon probiert
Raystafarian
Nein, ich habe Visual Basic noch nie verwendet. Ist das schwierig?
Laua

Antworten:

0

Sie müssen ein Programm oder ein Skript schreiben, um die Zeilen mit dem allgemeinen Schlüssel (Spalte 1) zu verbinden.

Wenn Sie VBA nicht kennen, können Sie ein einfaches Ruby-Skript verwenden, um die Daten aus einem CSV-Export des Arbeitsblatts zusammenzufügen.

Folge diesen Schritten:

  1. Exportieren Sie Ihr Arbeitsblatt im CSV-Format.
  2. Führen Sie dann das folgende Skript für die Daten aus und erstellen Sie eine neue, CSV-formatierte Ausgabedatei.
  3. Importieren Sie die CSV-Ausgabedatei in Excel.

Die Daten sollten ungefähr so ​​aussehen:

$ cat joiner-data.csv
Key,Data
"1234",eggs
"1234",bacon
"1234",toast
"4321","Orange Juice"

Unten sehen Sie das Ruby-Skript zum Verknüpfen der Daten mit dem Schlüssel in Spalte 1.

Übrigens ist es diesem Code egal, ob die Schlüsseldaten numerisch sind oder nicht - er verknüpft Daten basierend auf einem beliebigen Schlüsselwert.

#!/usr/bin/env ruby
# joiner.rb input >output
# read CSV data, with key in column one
# output each key once, with all associated data joined by '-'

require 'csv'

records = {}

input = ARGV.shift

CSV.foreach(input, :headers => true, :return_headers => false) do |row|
  data = row.fields
  key = data.shift
  records[key] ||= []       # ensure new keys start with an empty array
  records[key] += [data]    # append the record data
end

# output the record keys in ascending order, with the data associated with each key
CSV { |csv| records.keys.sort.each{|k| csv << [k,records[k].join('-')]}}

exit

Hier ist der Beispiellauf unter Verwendung der oben genannten CSV-formatierten Daten:

$ ./joiner.rb joiner-data.csv
1234,eggs-bacon-toast
4321,Orange Juice

Diese Ausgabe sollte in eine Datei gestellt werden, die wieder in Excel importiert werden kann. So was:

$ ./joiner.rb joiner-data.csv >joined-data.csv

Importieren Sie nun die Datei joined-data.csv.

Hoffe das hilft.

aks
quelle
0

Die Verwendung von vba ist wahrscheinlich die am besten geeignete Lösung für dieses Problem. Wenn Sie jedoch noch keine Programmiersprache verwendet haben, treten möglicherweise einige Fehler auf und Sie wissen nicht, was Sie tun sollen. Das Gleiche gilt für die Lösung, die aks gibt, und diese Lösung erfordert auch das Beenden von Excel. Davon abgesehen ist es gut zu wissen, wie man CSV-Dateien außerhalb von Excel manipuliert, und Sie sollten in der Lage sein, das zu bekommen, was Sie wollen, wenn Sie die Schritte befolgen, die aks vorgibt.

Wenn Sie nur eine Plug-In-Play - Lösung wollen, habe ich eine Tabelle mit allen einigen Formeln für Sie hier . Fügen Sie dazu Ihre Daten in die Spalten A und B unter den Bezeichnungen ein, ziehen Sie die Formeln in C2-F2 herunter und filtern Sie Spalte F nach Nicht-Leerzeichen. Die Ergebnisse werden in "FINAL A" und "FINAL B" angezeigt.

LMNOP
quelle
0

Okay, das ist nicht sehr schwierig. Das Wichtigste zuerst, zeigen die Entwickler Registerkarte durch die Office - Schaltfläche klicken, geht auf Excel - Optionen und der Auswahl Entwicklerregisterkarte . Auf diese Weise können Sie Makros bearbeiten und ausführen.

Auf dem Menüband befindet sich jetzt eine Entwicklerregisterkarte. Klicken Sie darauf und gehen Sie zu "Visual Basic". Klicken Sie oben im VBA-Editor auf Einfügen - Modul . Fügen Sie im Modul den folgenden Code ein:

Sub Macro1()
Application.ScreenUpdating = False
'sort columns
    Columns("A:B").Select
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:B150440")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Dim c As Range
Dim strValue As String

'only non-blank cells
For Each c In Range("A:A")
    If c <> "" Then
Again:
        'check for matches and combine
        If c.Value = c.Offset(1).Value Then
           strValue = c.Offset(, 1).Value & "-" & c.Offset(1, 1).Value
           c.Offset(, 1) = strValue
           c.Offset(1).EntireRow.Delete
           GoTo Again
        End If
    End If
Next c


Application.ScreenUpdating = True
End Sub

Führen Sie es aus und Sie können loslegen.

Ich würde empfehlen, eine Kopie Ihrer Daten zu erstellen, bevor Sie das Makro ausführen, und das Makro auf der Kopie auszuführen, falls es nicht das tut, was Sie wollen

Raystafarian
quelle