Live-Forum - Die aktuellen Beiträge
Datum
Titel
19.04.2024 12:23:24
19.04.2024 11:45:34
Anzeige
Archiv - Navigation
872to876
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
872to876
872to876
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Schleife erstellen

Schleife erstellen
02.06.2007 07:52:35
Erich
Hallo EXCEL-Freunde,
folgende Schleife soll laufen:
Sub vergleichen() Dim i As Integer, j As Integer, k As Integer, l As Integer i = 2 j = 2 k = 16 l = 30 For i = 2 To 10 For j = 2 To 14 For k = 16 To 28 If Cells(i, j + 1) = Cells(i, k + 1) Then Cells(i, l + 1).Value = "J" End If Next k Next j Next i End Sub


Dabei geht es darum, dass zwei Zellen verglichen werden und wenn die Inhalte übereinstimmen
soll ein J in eine Spalte eingetragen werden. In der ersten Schleife wird die Spalte B (=2) mit der Spalte
P (=16) verglichen und die Spalte AD (=30) befüllt.
Dann sollen mit der Schleife die nächsten drei Spalten bearbeitet werden.
Nachstehend das Muster nur mit dem Ergebnis der Spalte AD:

 ABCDEFGHIJKLMNOPQRSTUVWXYZAAABACAD
1Nr12345678910111213 12345678910111213 1
211010012100002 1010012100002 J
321120012200002 1120012200002 J
431201012000002 0201012000002  
541011012102102 1011012102102 J
651121012202102 0121012202102  
761220012002102 1220012002102 J
871010012102112 0010012102112  
981120012200112 1120012200112 J
1091201012001212 1120012200112 J


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Besten Dank!
mfg

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schleife erstellen
02.06.2007 08:07:00
Hajo_Zi
Hallo Erich,
ich habe jetzt die Datei nicht nachgebaut.
Option Explicit

Sub vergleichen()
Dim Loi As Long
Dim LoJ As Long
Dim LoLetzte As Long
For Loi = 2 To 14
LoLetzte = IIf(IsEmpty(Cells(Rows.Count, Loi)), Cells(Rows.Count, Loi).End(xlUp).Row,  _
Rows.Count)
For LoJ = 2 To LoLetzte
' Spalte B=2 und P = 16, Ad =30
If Cells(LoJ, Loi) = Cells(LoJ, Loi + 14) Then Cells(LoJ, Loi + 28) = "J"
Next LoJ
Next Loi
End Sub



Super-Perfekt!! Danke Hajo; o.T.
02.06.2007 08:23:58
Erich
.

Ergänzung / Änderung
02.06.2007 16:19:50
Erich
Hallo EXCEL-Freunde,
könnte der Code wie folgt abgeändert werden:
1. es werden zunächst die Spalten von links nach rechts miteinander verglichen, also
B mit P
C mit Q
D mit R
...bis...
N mit AB
2. EXCEL merkt sich wie oft die Zellen identisch waren (also "J"): diese Zahl wird in Spalte AD eingetragen
Das hat den Vorteil dass ich sofort das Ergebnis habe und nicht zusätzlich noch pro Spalte die "J" ermitteln muss.
Besten Dank!

Anzeige
AW: Ergänzung / Änderung
02.06.2007 16:57:18
Hajo_Zi
Hallo Erich,
das mag erlaubt sein. Ich interpretiere es mal so das Du mit meiner Lösung nicht zufrieden warst. Ich bin absolut gegen Crossposting. Ich Stelle die Beantwortung solcher Fragen ein.
Gruß Hajo

Anzeige
AW: Ergänzung / Änderung
02.06.2007 17:07:38
Erich
Hallo Hajo,
ich habe doch bei der ersten Antwort klargestellt, dass die Lösung optimal war. Jetzt geht es doch nur um eine Ergänzung / Anpassung. Auf das Crossposting wegen Dringlichkeit habe ich ja explicit hingewiesen.
mfg

AW: Ergänzung / Änderung
02.06.2007 16:53:48
Hajo_Zi
Hallo Erich,
Dir ist es vielleicht schon aufgefallen falls Du auf den Link in der Mailbenachrichtigung klcks. Das Du die Antwort und den Beitrag davor siehst. Ich wurde benachrichtigt, also muß ich hier mal einen Beitrag geschrieben haben. Ich sehe aber keinen Code, kann also nichts zu deinem Problem sagen.
Ich vermute mal das erste Problem ist gelöst?
Zu 2 Also Du möchtest die J pro Gruppe zählen und beim ersten Vergleich die Anzahl in AD bis AD65536 eintragen, was das soll ist mir nicht klar. Beim zweiten Vergleich sollen die Werte in Spalte Ad überschrieben werden. Ich vermute mal der Code macht keine Pause nach jeder Gruppe, dann reicht es doch die Zahl für den letzten Vergleich in AD1:Ad65536 einzutragen.
Gruß Hajo

Anzeige
AW: Ergänzung / Änderung
02.06.2007 17:04:00
Erich
Hallo Hajo,
stimmt soweit zu 2 suche ich ein Lösung; klarstellend:
Es sollen immer pro Zeile die 13 Spalten B - N mit den jeweiligen Spalten P - AB verglichen werden und
dann festgehalten werden, wieviele Übereinstimmungen es gegeben hat. Diese Anzahl der Übereinstimmung soll
dann in der gleichen Zeile in der Spalte AD eingetragen werden. Dann kommt die nächste Zeile dran usw.
Insofern eine Änderung zum ersten Problem, dass nun zeilen weise statt spalten weise abgearbeitet wird.
Hoffe das ist jetzt verständlicher.
mfg
Erich

AW: Ergänzung / Änderung
02.06.2007 17:21:00
Josef
Hallo Erich,
warum per VBA?
Tabelle1

 ABCDEFGHIJKLMNOPQRSTUVWXYZAAABACADAEAFAGAHAIAJAKAL
1Nr12345678910111213 12345678910111213 gleich in Zeile Vergleich als Matrix      
211010012100002 1010012100002 13 1111111
321120012200002 1120012200002 13 1111111
431201012000002 0201012000002 12 0111111
541011012102102 1011012102102 13 1111111
651121012202102 0121012202102 12 0111111
761220012002102 1220012002102 13 1111111
871010012102112 0010012102112 12 0111111
981120012200112 1120012200112 13 1111111
1091201012001212 1120012200112 7 1000111
11                                      
12gleich in Spalte6888999898899                        

Formeln der Tabelle
ZelleFormel
AD2=SUMMENPRODUKT(--($B2:$N2=$P2:$AB2))
AF2=(B2=P2)*1
B12=SUMMENPRODUKT(--(B$2:B$10=P$2:P$10))
Excel Tabellen im Web darstellen  Excel Jeanie HTML
Gruß Sepp

Anzeige
AW: Ergänzung / Änderung
02.06.2007 17:32:09
Erich
Hallo Sepp,
danke; per VBA deswegen weil es in der Spitze um bis zu ca. 19.000 Zeilen geht; das dauert zwar in VBA
auch etwas; aber mit Formeln ist das zu kmoplex.
mfg

AW: Ergänzung / Änderung
02.06.2007 17:46:00
Josef
Hallo Erich,
probier mal.
Sub erich()
Dim v1 As Variant, v2 As Variant, v3 As Variant
Dim lngR As Long, lngM As Long, intC As Integer

lngM = Application.Max(2, Cells(Rows.Count, 2).End(xlUp).Row)

v1 = Range("B2:N" & lngM)
v2 = Range("P2:AB" & lngM)

Redim v3(1 To lngM, 1 To 1)

For intC = 1 To UBound(v1, 2)
    For lngR = 1 To UBound(v1, 1)
        If v1(lngR, intC) = v2(lngR, intC) Then v3(lngR, 1) = v3(lngR, 1) + 1
    Next
Next

Range("AD2:AD" & lngM) = v3

End Sub

Gruß Sepp

Anzeige
AW: Ergänzung / Änderung
02.06.2007 18:37:00
Erich
Hallo Sepp,
danke der Code läuft. Er ist aber im Ergebnis nicht in allen Zeilen richtig.
Die ersten 3 Zeilen stimmen; dann kommen immer falsche Berechnungen, aber quasi immer
im 3er-Rhythmus. Also der Fehler kommt in 3 Zeilen untereinander gleich, dann wieder dreimal
falsch; zwischendurch auch dreimal wieder richtig.
Aber da komme ich nicht drauf an was das liegen könnte!
Besten Dank nochmal.
mfg
Erich

Beschreibung?
02.06.2007 18:45:00
Erich
Hallo Sepp,
evtl. ist die Beschreibung noch nicht ganz klar: der Vergleich mit P bis AB soll immer nur in der
Zeile 2 stattfinden.
Also nur in den Spalten B bis N stehen die Zahlen untereinander;
bei P bis AB ist nur die Zeile 2 befüllt.
mfg
Erich

Anzeige
AW: Beschreibung?
02.06.2007 18:57:00
Josef
Hallo Erich,
na dann halt so.
Sub erich()
Dim v1 As Variant, v2 As Variant, v3 As Variant
Dim lngR As Long, lngM As Long, intC As Integer

lngM = Application.Max(2, Cells(Rows.Count, 2).End(xlUp).Row)

v1 = Range("B2:N" & lngM)
v2 = Range("P2:AB2")

Redim v3(1 To lngM, 1 To 1)

For intC = 1 To UBound(v1, 2)
    For lngR = 1 To UBound(v1, 1)
        If v1(lngR, intC) = v2(1, intC) Then v3(lngR, 1) = v3(lngR, 1) + 1
    Next
Next

Range("AD2:AD" & lngM) = v3

End Sub

PS: Dein Argument gegen eine Formellösung verstehe ich nicht ganz, hab jetzt die SUMMENPRODUKT() Lösung mal bei 30.000 Zeilen getestet und das läuft ratz fatz.
Gruß Sepp

Anzeige
AW: Beschreibung?
02.06.2007 19:10:00
Erich
Hallo Sepp,
danke - muss Dir recht geben: die Formel geht ratz fatz!!
Kannst Du den Code noch so erweitern, dass drei weitere Zeilen in P bis AB (also 3,4 und 5) gefüllt
sind und anschließend jeweils nach der Zeile 2 abgeglichen werden, wobei dann die Ergebnisse
bei Zeile 3 in AE
bei Zeile 4 in AF und
bei Zeile 5 in AG
eingetragen werden?
Zur Formel: was bedeutet denn "--" in der Formel?
Besten Dank!
mfg
Erich

AW: Beschreibung?
02.06.2007 19:16:57
Erich
Den Code konnte ich bereits anpassen!!
Die Frage mit der Formel ist mir weiterhin unklar!
mfg

AW: Beschreibung?
02.06.2007 20:08:13
Josef
Hallo Erich,
SUMMENPRODUKT() liefert ja beim Vergleich (A1:A10=B1:B10) nur Wahrheitswerte zurück. Mit -- werden diese in 0 oder 1 umgewandelt und können so zusammengezählt werden. Statt --(A1:A10=B1:B10) kannst du auch (A1:A10=B1:B10)*1 oder (A1:A10=B1:B10)+0 schreiben
Gruß Sepp

Anzeige
AW: Beschreibung?
02.06.2007 21:26:00
Erich
alles klar Sepp, danke für die Erläuterungen!
mfg

AW: Ergänzung / Änderung
02.06.2007 18:50:37
Josef
Hallo Erich,
ich hab den Code getestet und er ermittelt bei mir die korrekten Ergebnisse.
Vieleicht sind deine Eintragungen nicht identisch.
Gruß Sepp

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige