2017-02-27 7 views
1

Ich habe eine zweispaltige Liste von Schlüssel-Wert-Paaren. Zum Beispiel:Wie transformiert man eine Excel-Liste in ein Array?

71 Archaebacteria 
71 Mendosicutes 
71 Metabacteria 
72 blue green algae 
72 blue-green algae 
72 Cyanochloronta 
72 Cyanophyta 
73 CFB group 
73 Chloroflecales 
73 Chloroflexaceae/Deinococcaceae group 
73 Chloroflexus/Deinococcaceae group 
73 Chloroflexus/Deinococcus group 
73 Cytophaga-Flexibacter-Bacteroides group 
73 Fibrobacter-Acidobacteria group 
73 Flexistipes group 
73 GNS bacteria 
73 Green non-sulfur bacteria 
73 true bacteria 

Ich muss ‚abzuflachen‘ die zwei Spaltenliste in eine Matrix, wo die key in Spalte 1 bleibt und alle für die valueskey werden, um neue Zellen in derselben Zeile bewegt.

Einige keys haben 20 values. In diesem Fall wären 21 Spalten vorhanden (1 für den Schlüssel, 20 für die Schlüsselwerte).

Ich habe diese question studiert, aber war nicht in der Lage, erfolgreich zu modifizieren, um die gewünschten Ergebnisse zu produzieren.

Wie wandelt man eine Excel-Liste in ein Array um?

Hinweise: eine Lösung mit einer value in Spalte hinterlassen können 2 und ‚Kopie‘ wird dieser Wert auf die entsprechende Zeile in dem Array. Alternativ kann eine Lösung die value an die richtige Position im Array "verschieben" und einen Schlüssel mit einem NULL-Wert belassen. Diese "Bereinigungs" -Bedingungen sind in Ordnung, da ich sortieren/löschen werde, um Detritus aus dem neuen Array zu entfernen.

Entweder eine Formel oder VBA-Lösung ist gut.

+1

Haben Sie Pivot-Tabellen versucht? Sie machen genau das, was Sie brauchen. – Vityata

+0

Ich habe aber gescheitert (oder habe es nicht richtig gemacht). Ich habe auch COPY/PASTE/TRANSFORM versucht - was das korrekte Ergebnis liefert, aber manuell für jede Taste gemacht werden muss. Würden Sie mich auf ein Beispiel für eine Pivot-Tabelle verweisen, die ich installieren und testen kann? –

+0

Verwenden Sie ein Wörterbuch, es gibt viele ähnliche Beispiele hier auf SO –

Antwort

1

Der folgende Code verwendet Dictionary, um alle eindeutigen Schlüssel (71, 72, 73) und ihre Werte aus Spalte A: B zu organisieren.

Danach fügt es die Werte zu Spalten C: D.

-Code

Option Explicit 

Sub TestDict() 

Dim Dic As Object 
Dim C As Range, C2 As Range, lRow As Long 
Dim Names As String, ID$, Key As Variant, KeyVal As Variant, IDVal As Variant 

Set Dic = CreateObject("Scripting.Dictionary") 

With Sheets("Sheet2") '<-- modify "Sheet2" with your sheet's name 
    lRow = .Cells(.Rows.Count, "A").End(xlUp).Row 

    For Each C In .Range("A1:A" & lRow).Cells 
     If Not Dic.exists(CStr(C.Value)) Then 
      ID = C.Value 

      For Each C2 In .Range("A1:A" & lRow).Cells 
       If C2.Value = ID Then 
        If Names = "" Then ' first key value 
         Names = C2.Offset(, 1).Value 
        Else ' second and up key value 
         Names = Names & "," & C2.Offset(, 1).Value 
        End If 
       End If 
      Next C2 
      Dic.Add ID, Names 
     End If 

     ID = Empty: Names = Empty 
    Next C 
End With 

lRow = 1 
With Sheets("Sheet2") ' <-- paste the organized dictionary key anv values the columns C:D 
    For Each Key In Dic.Keys 
     .Range("C" & lRow).Value = Key 

     ' splitting values from "Merged" string Key to array 
     KeyVal = Split(Dic(Key), ",") 
     .Range("D" & lRow).Resize(1, UBound(KeyVal) + 1).Value = KeyVal 
     lRow = lRow + 1 
    Next Key 
End With 

End Sub 

> Blockquote 
+0

Vielen Dank für die Inline-Erklärungen. –

+0

@JayGray Sie sind willkommen :) Sie sollten sich die Zeit nehmen zu lernen, wie man das 'Dictionary' verwendet, es ist ein handliches und leistungsfähiges Werkzeug –

+0

Bis jetzt wusste ich nichts über' Dictionary', also danke noch einmal @Shai Rado –

Verwandte Themen