Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1204to1208
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Daten in anderes sheet kopieren ohne doppelte

Daten in anderes sheet kopieren ohne doppelte
Stefan
Hallo,
ich habe folgendes Problem:
GSZ_OP_TA_BSP
 ABCDEFGHIJ
1Zähler (Beispiel)GSZ-Ketten NrGSZ NameFunktionstest (F)
Integrationstest (I)
Schnittstellentest(SST)
Prozess /GeschäftsvorfallTransaktionLandErstellerOP (X)Bemerkungen
2BSP:GSZ erstellt mit OPGSZ_6000_K001DE_light_FT_GS_an_Mitglied_V1_RAMSSTin ArbeitFB50DERAMXTA nicht bekannt
3BSP:GSZ erstellt ohne OP = fertigGSZ_5000_K101DE_light_FT_InA anlegen und ändern_V1_VSHFInnenauftrag anlegen, anzeigen, ändern, löschenFB75 / F-32DEVSH  spätere Pflege in CO
4          FB75 /oder/ FB01       
5          FBL5N       
6          FBL1N       
7          FB60 + FBL1N       
8          FB60       
9          FB75 /oder/ FB01       
10          FB60 +?+ F-44       
11          FBD1 / FBD2 / FBD3       
12          FB60 ?( FB50 )       

Tabellendarstellung in Foren Version 5.39


TA_Liste
 ABCD
1verarbeitete Transaktionen     
2FB50     
3FB75     
4F-32     
5FBL5N     
6       
7       

Tabellendarstellung in Foren Version 5.39


ich habe zwei Beispieltabellen eingefügt, dabei ist die obige Tabelle (GSZ_OP_TA_BSP) die Quelltabelle
und die untere (TA_Liste) ist die Zieltabelle.
Ich möchte die Daten von Spalte F "Transaktionen" der Quelltabelle in Spalte A
"verarbeitete Transaktionen" der Zieltabelle "TA_Liste" kopieren (z.Bsp. per markieren der Zelle
und klicken auf einen Button). Vor dem kopieren soll in der Zieltabelle überprüft werden,
ob das zu kopierende schon vorhanden ist und dann nicht eingefügt werden, sodaß in der Zieltabelle
keine Duplikate existieren. In der Quellzelle können unter Umständen zwei Transaktionen stehen
(z.Bsp Zelle F3), die in der Zieltabelle getrennt sein sollen (Spalte A3 und A4). Das Problem ist,
daß die Transaktionsbezeichnungen unterschiedliche Länge haben.
Aber vor und nach jeder Transaktionsbezeichnung steht ein blank. Sonst sind keine blanks vorhanden.
Also meine Idee war folgende: Nimm das erste Zeichen in der Zelle, nimm die Folgezeichen bis zum
ersten blank, kopiere die Zeichen in Zieltabelle (z.Bsp. a4), gehe bis zum nächsten blank, nimm
hier die Zeichen bis zum darauffolgenden blank, kopiere in Zieltabelle (jetzt a5) usw.
Ich hoffe das Problem ist verständlich dargestellt.
Kann mir hiermit jemand weiterhelfen?
Viele Grüße
Stefan

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Sammeln ohne Doppelte (VBA)
09.03.2011 13:43:52
Erich
Hi Stefan,
probier mal:

Option Explicit
Sub TransaktListe()
Dim MyDic, Kys, arrNot, lngA As Long
Dim arrW, arrT, zz As Long, tt As Long
arrNot = Split("+?+ + ?( /oder/ / ) ", " ")
lngA = UBound(arrNot)
Set MyDic = CreateObject("Scripting.Dictionary")
With Sheets("GSZ_OP_TA_BSP")
zz = .Cells(.Rows.Count, 6).End(xlUp).Row
arrW = .Cells(2, 6).Resize(zz - 1)
For zz = 1 To UBound(arrW)
arrT = Split(arrW(zz, 1), " ")
For tt = 0 To UBound(arrT)
For ii = 0 To lngA
If arrT(tt) = arrNot(ii) Then Exit For
Next ii
If ii > lngA Then
On Error Resume Next
MyDic.Add arrT(tt), 1
On Error GoTo 0
End If
Next tt
Next zz
End With
Kys = MyDic.Keys
Sheets("TA_Liste").Cells(2, 1).Resize(MyDic.Count) = _
Application.Transpose(Kys)
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Sammeln ohne Doppelte (VBA)
09.03.2011 14:13:26
Stefan
Hallo,
zunächst mal Vielen Dank.
Die Spalte "Transaktion" in "GSZ_OP_TA_BSP" (Quelle) wird dynamisch befüllt, d.h. es kommen immer wieder Einträge hinzu. Bei dem Test des Codes hat es beim ersten mal funktioniert, als ich dann weitere Beispieldaten hinzugefügt und kopiert habe wurde die ganze Zelle kopiert ohne zu splitten.
Eine Frage noch: Kann man den Code so gestalten, daß man auch einzelne zellen markieren und kopieren kann?
Viele Grüße
Stefan
neuer Codevorschlag
09.03.2011 17:51:55
Erich
Hi Stefan,
deine Antwort habe ich nicht wirklich verstanden.
Dass es beim 1. Mal mal richtig läuft, beim 2. Mal nicht, verwundert mich.
Die Ergebnisse des bisherigen Makros sollten immer gleich sein, egal wie oft es läuft.
Das Makro weiß doch gar nicht, ob es zum 1. Mal oder zum 5. Mal läuft.
"wurde die ganze Zelle kopiert ohne zu splitten" verstehe ich auch nicht.
Kopiert wird eigentlich überhaupt nichts.
Welches ist die "ganze Zelle"?
Was wird nicht gesplittet?
Hier zwei neue Versionen - der Zweck steht jeweils in der ersten Zeile
Jetzt werden die bereits als Ergebnis vorhandenen TAs zunächst eingelesen und dann
aus Quellspalte F ergänzt.

Option Explicit
Sub TransaktListeSpF()               ' bearbeitet komplette Spalte F
Dim MyDic, Kys, arrNot, lngA As Long, ii As Long
Dim arrW, arrT, zz As Long, tt As Long
arrNot = Split("+?+ + ?( /oder/ / ) ", " ")
lngA = UBound(arrNot)
Set MyDic = CreateObject("Scripting.Dictionary")
With Sheets("TA_Liste")                ' bisherige Transakt.
zz = .Cells(.Rows.Count, 1).End(xlUp).Row
If zz > 1 Then
arrW = .Cells(2, 1).Resize(zz - 1)
For zz = 1 To UBound(arrW)
On Error Resume Next
MyDic.Add arrW(zz, 1), 1
On Error GoTo 0
Next zz
End If
End With
With Sheets("GSZ_OP_TA_BSP")           ' neue Transakt.
zz = .Cells(.Rows.Count, 6).End(xlUp).Row
arrW = .Cells(2, 6).Resize(zz - 1)
For zz = 1 To UBound(arrW)
arrT = Split(arrW(zz, 1), " ")
For tt = 0 To UBound(arrT)
For ii = 0 To lngA
If arrT(tt) = arrNot(ii) Then Exit For
Next ii
If ii > lngA Then
On Error Resume Next
MyDic.Add arrT(tt), 1
On Error GoTo 0
End If
Next tt
Next zz
End With
Kys = MyDic.Keys                       ' Ausgabe Transakt.
Sheets("TA_Liste").Cells(2, 1).Resize(MyDic.Count) = _
Application.Transpose(Kys)
Set MyDic = Nothing
End Sub
Sub TransaktListeMark() ' bearbeitet markierte Zellen in Spalte F
Dim MyDic, Kys, arrNot, lngA As Long, ii As Long
Dim arrW, arrT, zz As Long, tt As Long
arrNot = Split("+?+ + ?( /oder/ / ) ", " ")
lngA = UBound(arrNot)
Set MyDic = CreateObject("Scripting.Dictionary")
With Sheets("TA_Liste")                ' bisherige Transakt.
zz = .Cells(.Rows.Count, 1).End(xlUp).Row
If zz > 1 Then
arrW = .Cells(2, 1).Resize(zz - 1)
For zz = 1 To UBound(arrW)
On Error Resume Next
MyDic.Add arrW(zz, 1), 1
On Error GoTo 0
Next zz
End If
End With
With Sheets("GSZ_OP_TA_BSP")           ' neue Transakt.
.Activate
arrW = Intersect(.Columns(6), Selection)
For zz = 1 To UBound(arrW)
arrT = Split(arrW(zz, 1), " ")
For tt = 0 To UBound(arrT)
For ii = 0 To lngA
If arrT(tt) = arrNot(ii) Then Exit For
Next ii
If ii > lngA Then
On Error Resume Next
MyDic.Add arrT(tt), 1
On Error GoTo 0
End If
Next tt
Next zz
End With
Kys = MyDic.Keys                       ' Ausgabe Transakt.
Sheets("TA_Liste").Cells(2, 1).Resize(MyDic.Count) = _
Application.Transpose(Kys)
Set MyDic = Nothing
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: neuer Codevorschlag
09.03.2011 20:26:58
Stefan
Hallo,
leider habe ich deine Antwort erst jetzt gelesen und hatte bisher noch keine Gelegenheit den neuen Code zu testen. Vor allem aber muß ich mich entschuldigen. Ich habe den ursprünglichen Code, den du mir geschickt hast noch mehrmals getestet und er funktioniert hervorragend. Ich weiß nicht was für einen Fehler ich gemacht habe beim ersten Test. Also nochmals Entschuldigung.
Ich habe aber noch eine Frage :
Die Arbeitsmappe in der die Quelltabelle steht besteht aus mehreren Tabellen, die immer die gleiche Struktur aufweisen (sozusagen mehrere Quelltabellen). Kann man den Code so modifizieren, daß er aus dem jeweils aktiven Arbeitsblatt heraus die Daten der Spalte F "Transaktionen" kopiert? An der Zieltabelle ändert sich nichts (sie ist immer dieselbe).
Vielen Dank auch noch für die Hilfe
Viele Grüße
Stefan
Anzeige
und die dritte Variante
10.03.2011 12:44:34
Erich
Hi Stefan,
jetzt soll also wieder die ganze Spalte F verarbeitet werrden - nicht nur selektierte Zellen.
Dazu kannst du TransaktListeSpF() verwenden. Damiot immer das gerade aktive Blatt verarbeitet wird,
brauchst du nur die Zeile
With Sheets("GSZ_OP_TA_BSP") ' neue Transakt.
zu ersetzen durch
With ActiveSheet
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: und die dritte Variante
10.03.2011 13:26:31
Stefan
Hallo Erich,
Funktioniert hervorragend. Du hast mir sehr geholfen. Herzlichen Dank.
Viele Grüße
Stefan

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige