Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
948to952
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
948to952
948to952
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Arrays ohne Doppler zusammenfassen

Arrays ohne Doppler zusammenfassen
12.02.2008 21:35:00
Norbert
Hallo Leute,
Sepp Ehrensberger hat mir eine tolle Lösung gepostet, die ich aber nicht anpassen kann.
Lese aus einer bestehenden Textdatei texte(jede Zeile ein Wort) in ein Array, klappt.
Lese aus einer Tabelle alle Zellen mit roter Schrift als Text in ein Array, klappt.
Nun müssen beide Arrays ohne Doppler in einem Array zusammengeführt und aufsteigend sortiert
werden und das bekomme ich nicht hin.
Leider muss es eine reine VBA-Losung, also ohne Umweg über in Tabelle kopieren, Spezialfilter
usw. sein, das würde ich schaffen.
Am Schluss müssen die Wörter wieder in die ursprünglich Textdatei zurückgeschrieben werden,
das klappt, dank Sepps Hilfe, auch.
Bitte um Hilfe.
Grüße Norbert

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Arrays ohne Doppler zusammenfassen
12.02.2008 22:01:00
ransi
Hallo Norbert
Ich weiss nicht wie Sepp das gemacht hat, aber wenn es um "Doppelte und Arrays und Sortieren" geht ist eigentlich das Scripting.Dictionary mit anschließender Sortierung mit einem Quicksort allererste Wahl.
Lies beide Arrays nacheinander in ein Dictionary ein.
Die Keys sortierst du anschließend mit einem Quicksort.
ransi

AW: Arrays ohne Doppler zusammenfassen
12.02.2008 22:09:00
Norbert
Hi,
ja, so hat Sepp das gemacht, aber ich kenn mich damit gar nicht aus und weiß
nun nicht, wie ich das anpassen soll, weil er das mit einer Listbox gemacht hat,
die aber gar nicht gebraucht wird auch nicht die Userform.
Hast du ein Beispiel?
Grüße Norbert

Anzeige
AW: Arrays ohne Doppler zusammenfassen
12.02.2008 22:24:00
Josef
Hallo Norbert,
vom Prinzip her so.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Sub TextArray()
Dim strFile As String
Dim tmp() As Variant, arrTxt() As Variant, l As Long
Dim strTmp As String
Dim WerteListe
Dim SCRDIC

strFile = "F:\test.txt" 'Textdatei - anpassen!

arrTxt = Range("A1:A15") 'heir dein Code für das zweite Array - anpassen!

Set SCRDIC = CreateObject("Scripting.dictionary")

Open strFile For Input As #1

Do While Not EOF(1)
    
    Input #1, strTmp
    
    On Error Resume Next
    SCRDIC.Add strTmp, 0
    On Error GoTo 0
    
Loop

Close #1

For l = 0 To UBound(arrTxt)
    On Error Resume Next
    SCRDIC.Add arrTxt(l, 1), 0
    On Error GoTo 0
Next

tmp = SCRDIC.keys
QuickSort tmp

Open strFile For Output As #1

For l = 0 To UBound(tmp)
    strTmp = tmp(l)
    Print #1, strTmp
Next

Close #1



Set SCRDIC = Nothing
End Sub

Private Sub QuickSort(data() As Variant, Optional UG, Optional OG)
Dim P1&, P2&, T1 As Variant, T2 As Variant

UG = IIf(IsMissing(UG), LBound(data), UG)
OG = IIf(IsMissing(OG), UBound(data), OG)

P1 = UG
P2 = OG
T1 = data((P1 + P2) / 2)

Do
    
    Do While (data(P1) < T1)
        P1 = P1 + 1
    Loop
    
    Do While (data(P2) > T1)
        P2 = P2 - 1
    Loop
    
    If P1 <= P2 Then
        T2 = data(P1)
        data(P1) = data(P2)
        data(P2) = T2
        P1 = P1 + 1
        P2 = P2 - 1
    End If
    
Loop Until (P1 > P2)

If UG < P2 Then QuickSort data, UG, P2
If P1 < OG Then QuickSort data, P1, OG

End Sub


Gruß Sepp



Anzeige
AW: Arrays ohne Doppler zusammenfassen
12.02.2008 22:35:49
Norbert
Hallo Sepp,
juchu, hat sofort nach Anpassung geklappt.
Dank & Grüße Norbert

AW: Arrays ohne Doppler zusammenfassen
12.02.2008 22:38:00
ransi
Hallo Norbert
Dann sieht der Code bestimmt so ähnlich aus.
' Modul: Tabelle1 Typ: Element der Mappe(Sheet, Workbook, ...) Option Explicit Public Sub test() Dim MyDic Dim Bereich As Range Dim FSO Dim Datei Dim Spl Dim Ausgabe Dim L As Long Dim Zelle As Range Set MyDic = CreateObject("Scripting.Dictionary") Set FSO = CreateObject("Scripting.Filesystemobject") Set Bereich = Sheets("Tabelle1").Range("A1:D20") 'anpassen Set Datei = FSO.opentextfile("C:/Neu Textdokument.txt") 'anpassen 'Textdatei einlesen Spl = Split(Datei.readall, vbCrLf) For L = 0 To UBound(Spl) - 1 MyDic(Spl(L)) = MyDic(Spl(L)) Next 'Zellen einlesen For Each Zelle In Bereich If Zelle.Font.ColorIndex = 3 Then MyDic(Zelle.Value) = MyDic(Zelle.Value) Next Ausgabe = QuickSort(MyDic.keys) End Sub Public Function QuickSort(vSort As Variant, _ Optional ByVal lngStart As Variant, _ Optional ByVal lngEnd As Variant) If IsMissing(lngStart) Then lngStart = LBound(vSort) If IsMissing(lngEnd) Then lngEnd = UBound(vSort) Dim i As Long Dim J As Long Dim h As Variant Dim X As Variant i = lngStart: J = lngEnd X = vSort((lngStart + lngEnd) / 2) Do While (vSort(i) X): J = J - 1: Wend If (i J) If (lngStart
Die sortierten Unikate befinden sich im Array "Ausgabe".
das musst du in die Textdatei zurückschreiben.
ransi

Anzeige
AW: @ransi
13.02.2008 11:30:15
Peter
Hallo ransi,
ich war (bin) an deinem Makro interessiert und habe es mir kopiert.
Ich bekomme aber beim Statement
Ausgabe = QuickSort(MyDic.keys)
den Hinweis: Fehler beim Kompilieren
Unverträglicher Typ: Datenfeld oder benutzerdefinierter Typ erwartet
und keys ist blau markiert.
Hast du bitte eine Erklärung dafür?
Gruß Peter

AW: @ransi
13.02.2008 18:03:00
ransi
Hallo Peter
Ich weiss nicht was da klemmt.
Folgende Daten in der Textdatei:
EPU
6XR
E7U
42U
B1V
RXI
HFV
9B4
SW5
CW4
JEI
SGV
988
871
C12
UA7
316
O48
0J4
Z14
286
BJS
KZ9
485
GOU
QXA
CFB
7ZV
Und das Hier in der Tabelle:
Tabelle1

 ABC
1LM1AZTQWR63ADU0
2PNSX2Q6PQNKB12J
38CUXZVE6WEA5CYF
4BX8L147PK6598XK
5F1ERZW2UE6599SO
620CE4BQ79L5D6W5
76B0VPT2IL6DU7FS
8T4HQJJI6OJ47GLN
9UEI24N71IFBACDR
10J2VKD2JVTPKI7D7
119P83P23F0HRN5SF


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Ergibt diese Ausgabe:
Tabelle1

 E
103G
20J4
3286
4316
542U
647PK6
7485
8598XK
9599SO
105D6W5
116XR
127ZV
13871
14988
159B4
16B1V
17BJS
18BQ79L
19C12
20CFB
21CW4
22DU7FS
23E7U
24EPU
25GOU
26HFV
27JEI
28KZ9
29O48
30QXA
31RXI
32SGV
33SW5
34T2IL6
35U0P
36UA7
37W2UE6
38Z14


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
ransi

Anzeige
AW: @ransi
14.02.2008 15:06:00
Peter
Hallo ransi,
danke für deine Antwort.
Ich habe den Fehler gefunden.
Ich hatte eine andere QuickSort-Function als du und die mochte den Ausgabe = QuickSort(MyDic.keys) nicht.
Mit deinem QuickSort geht es - auch wenn du im Ergebnis deiner Antwort Werte hast, die du weder in der TextDatei, noch in der Tabelle einliest ;-)
das sind die Werte 03G und U0P
Gruß Peter

AW: @ransi
14.02.2008 17:59:00
ransi
HAllo Peter
Die überschüssigen WERTE sind schnell erklärt.
Hatte die Textdatei beim Werte "rauskopieren" nur durch "runterziehen" markiert und kopiert.
Da die Datei nicht maximiert war sind mir die letzte 2 Werte durch die Lappen gegangen....
Hatte ich garnicht bemerkt.
ransi
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige