Microsoft Excel

Herbers Excel/VBA-Archiv

Excel VBA - primary key zum Kopieren von Spalten

Betrifft: Excel VBA - primary key zum Kopieren von Spalten von: Monika
Geschrieben am: 22.10.2014 14:26:28

Hallo zusammen,

ich habe schon wieder eine Frage an euch... Ich hoffe, ihr könnt mir helfen :)

Ich habe eine Ausgangstabelle, aus der ich die verschiedenen Spalten kopieren muss. Ausgangspunkt hierfür ist eine Kombination aus 2 verschiedenen Nummern, die ich gerne verbunden als primary key nutzen würde. Gibt es da eine einfache Möglichkeit oder muss ich die beiden aneinander hängen und als String (oder so) auslesen, um es als Verbindung zu nutzen?
Das Problem ist nämlich, dass nicht pro Auftragsnummer eine Zeile genutzt wird, sondern gesplittet nach den verschiedenen Unterkategorien...

Wäre super, wenn ihr mir damit helfen könntet! :) In den verschiedenen Online-Foren habe ich immer nur Antworten gefunden, die sich auf das Kopieren in eine Access bezogen haben. Meine Daten sollen allerdings wieder in Excel landen...

Vielen Dank schon mal und viele Grüße
Monika

  

Betrifft: AW: Excel VBA - primary key zum Kopieren von Spalten von: fcs
Geschrieben am: 22.10.2014 15:57:40

Hallo Monika,

deine Fragestellung ist noch etwas verwirrend.

Falls noch kein eindeutiger Key in einer Spalte vorhanden ist, dann kann man sich ggf. durch zusammenfügen/vergleichen des Inhalts von 2 oder mehr Spalten einen eindeutigen Key kreieren.
Bei Nummern funktioniert dies jedoch nur zu 100% wenn die Zahlen in den Spalten jeweils gleichviele Ziffern haben (ggf. mit führenden Nullen aufüllen). Alternativ kann man zwischen den Inhalten der Key-Spalten auch ein Sonderzeichen einfügen.

Beispiel:

Key 1	Key 2	P-Key	P-Key1	P-Key2	P-Key 3
9	10	910	00910	9|10	910
9	11	911	00911	9|11	911
91	1	911	09101	91|1	9101
2	1	21	00201	2|1	201


Formeln:
P-Key:	=A4&B4
P-Key1:	=TEXT(A4;"000")&TEXT(B4;"00")
P-Key2:	=A4 &"|" & B4
P-Key3:	=A4*100+B4

Die Formeln für Key (einfache String-Verkettung) liefern hier nicht immer eindeutige Keys.
P-Key1 und P-Key3 sind eindeutig für 3-Stellige Zahlen im 1. Teil-Key und 2-stellige Zahlen im 2. Teil-Key, wobei man mit dem Zahlen-Format bzw. dem Multiplikator für den 1. Teil-Key auch andere Zahlenbereiche abdecken kann.

Gruß
Franz


  

Betrifft: AW: Excel VBA - primary key zum Kopieren von Spalten von: Monika
Geschrieben am: 23.10.2014 08:18:38

Hallo noch mal,

ja, die Nummern in einer Spalte haben jeweils immer gleich viele Ziffern.
Ich hatte auch schon überlegt, zu verketten, allerdings müsste ich ja dann eine neue Spalte anlegen - das wollte ich eigentlich vermeiden (oder kann ich das auch ohne Anlegen einer neuen Spalte?).
Ich versuche mich gerade daran, ein Makro zum kopieren der gewünschten Spalten zu schreiben und dachte, es gibt da vielleicht eine Möglichkeit, ohne die kombinierte Version der Nummern zwischenzuspeichern?

Danke und viele Grüße
Monika


  

Betrifft: AW: Excel VBA - primary key zum Kopieren von Spalten von: fcs
Geschrieben am: 23.10.2014 12:21:15

Hallo Monika,

um Daten der Form

Key1	Key2	Wert1	Wert2	Wert3
1000	100	C001	D001	E001
1000	100	C002	D002	E002
1000	100	C003	D003	E003
1000	101	C004	D004	E004
1000	101	C005	D005	E005
1000	101	C006	D006	E006
1002	100	C007	D007	E007
1002	100	C008	D008	E008
1002	100	C009	D009	E009

umzusetzen in
P-Key	Key1	Key2	Wert11	Wert12	Wert13	Wert21	Wert22	Wert23	Wert31	Wert32	Wert33
1000100	1000	100	C001	D001	E001	C002	D002	E002	C003	D003	E003
1000101	1000	101	C004	D004	E004	C005	D005	E005	C006	D006	E006
1002100	1002	100	C007	D007	E007	C008	D008	E008	C009	D009	E009

funktioniert z.B. folgendes Makro.

Gruß
Franz
Sub aaTest()
  Dim wksQuelle As Worksheet, Zeile_Q As Long
  Dim strKey As String, ZeileSatz As Integer
  Dim wksZiel As Worksheet, Zeile_Z As Long
  
  Set wksQuelle = ActiveWorkbook.Worksheets(1)
  Set wksZiel = ActiveWorkbook.Worksheets(2)
  Zeile_Z = 1
  With wksQuelle
    For Zeile_Q = 2 To .Cells(.Rows.Count, 1).End(xlUp) + 1
      If strKey <> .Cells(Zeile_Q, 1).Text & .Cells(Zeile_Q, 2).Text Then
        Zeile_Z = Zeile_Z + 1
        strKey = .Cells(Zeile_Q, 1).Text & .Cells(Zeile_Q, 2).Text
        ZeileSatz = 0
      End If
      ZeileSatz = ZeileSatz + 1
      Select Case ZeileSatz
        Case 1
          .Range(.Cells(Zeile_Q, 1), .Cells(Zeile_Q, 5)).Copy wksZiel.Cells(Zeile_Z, 1)
        Case 2
          .Range(.Cells(Zeile_Q, 3), .Cells(Zeile_Q, 5)).Copy wksZiel.Cells(Zeile_Z, 6)
        Case 3
          .Range(.Cells(Zeile_Q, 3), .Cells(Zeile_Q, 5)).Copy wksZiel.Cells(Zeile_Z, 9)
        Case 4
          .Range(.Cells(Zeile_Q, 3), .Cells(Zeile_Q, 5)).Copy wksZiel.Cells(Zeile_Z, 12)
      End Select
    Next
  End With
End Sub



 

Beiträge aus den Excel-Beispielen zum Thema "Excel VBA - primary key zum Kopieren von Spalten"