Programmfehler bei einer Vergleichsfunktion!

Bild

Betrifft: Programmfehler bei einer Vergleichsfunktion!
von: Jan
Geschrieben am: 15.04.2005 09:36:10
Hallo!
Ich habe ein kleines Problem mit einer VBA Programmierung, jedoch weiß ich leider nicht, wie ich dieses beheben kann. Kann mir vielleicht jemand aus dem Forum dabei helfen?
Es geht um folgendes:
Spalten C - G aus "Tabelle1" sollen mit Spalten A - E aus "Tabelle2" verglichen werden. Anschließend soll die höchste Zahl vom Tabellenkopf aus "Tabelle2" (Zeile 1) in "Tabelle1" Spalte H ausgegeben werden. Mit der bisherigen VBA-Funktion ist dies nicht möglich. Ich kann bisher nur alphabetisch nacheinander sortierte Buchstaben übertrag.
Was muß ich in der VBA Anwendung ändern, um die Beispiele aus "Tabelle2" möglich zu machen?
https://www.herber.de/bbs/user/21177.xls
VBA-Programm:


Sub Jan3()
Dim z, s, c As Integer
With Sheets("Tabelle1")
lz = .Cells(Rows.Count, 3).End(xlUp).Row
    For z = 4 To lz 'Zeile 4 - letzte Zeile in Tabelle1
        For s = 7 To 3 Step -1 'Spalte 7 - 3 in Tabelle1
            If Not .Cells(z, s) = "" Then
            Wert = .Cells(z, s)
                For c = 5 To 1 Step -1 'Spalte 5 - 1 in Tabelle2
                Set w = Sheets("Tabelle2").Columns(c).Find(What:=Wert, LookIn:=xlValues, LookAt:=xlWhole)
                If Not w Is Nothing Then
                If .Cells(z, 8) < Chr(c + 64) Then .Cells(z, 8) = Sheets("Tabelle2").Cells(1, c)
                Exit For
                End If
                Next c
            End If
            Next s
    Next z
End With
End Sub


Vielen Dank für die Hilfe!
Gruß Jan
Bild

Betrifft: AW: Programmfehler bei einer Vergleichsfunktion!
von: Luc
Geschrieben am: 15.04.2005 20:18:50
Hallo Jan,
unter einem Tabellenkopf verstehe ich die Gesamtheit der den Inhalt der Tabellenspalten bezeichnenden Texte einschl evtl Spaltennummerierungen mit Ziffern oder Buchstaben (und natürlich auch den Tabellentitel nebst sonstigen einmaligen Infos). Verstehst du darunter die xl-Spaltenbezeichner A...IU oder noch was anderes?
mfG Luc :-?
Bild

Betrifft: AW: Programmfehler bei einer Vergleichsfunktion!
von: andre
Geschrieben am: 16.04.2005 17:25:16
Hallo Luc,
steht doch im Text was Jan will:
höchste Zahl vom Tabellenkopf aus "Tabelle2" (Zeile 1)
Hallo Jan,
ist relativ einfach:

Sub max_tab2()
sheets("tabelle1").[h1]=WorksheetFunction.Max(Sheets("tabelle2").Range("A1:H1"))
End Sub

Statt A1:H1 Deinen gewünschten Bereich eingeben. Eingetragen wird es auf Tabelle1, Zelle H1.
Bild

Betrifft: @Andre: und warum ist dann Jans Sub so viel...
von: Luc
Geschrieben am: 16.04.2005 20:36:02
...länger als deine, André?
Ich habe weder Zeit noch Lust, Makros daraufhin zu untersuchen, was sie eigentlich machen, wenn ich weder den Sinn der Aufgabe verstehe noch die Begriffswahl anerkannten Normen entspricht. Wenn die Beispiele Tabellenköpfe sein sollen, kann ich nur sagen, meine Tabellen haben andere Köpfe. Sowas hätte mir keiner abgenommen. Also muss es was Anderes sein. Und nichts sonst habe ich mit meiner Frage zum Ausdruck gebracht.
Gruß aus Bln-Bbg
Luc :-?
Bild

Betrifft: AW: @Andre: und warum ist dann Jans Sub so viel...
von: andre
Geschrieben am: 17.04.2005 08:31:20
Hallo Luc,
mein Posting gelesen? Ich habe geschrieben, dass es im Text stand und nicht im Makro.
Warum antwortest Du und vor allem in dieser Art, wenn Du die Frage nicht verstehst? Jan hat beschrieben, dass sein bisheriges Makro - dass ist das gepostete - Buchstaben rausgeholt hat und er jetzt Zahlen - speziell das Maximum - benötigt. Er braucht demzufolge was ganz anderes (oder was kombiniertes).
Und wer hat eigentlich das, was Microsoft da unter die Leute bringt, anerkannt? Gibt's da einen Link, hast Du was schriftliches? Bei der nächsten Umfrage würde ich gern mitmachen. Dafür sind vielleicht auch die Betatester zuständig? Da kenne ich leider keinen. Und die testen wohl mehr, ob das funktioniert was MickySoft uns da vorsetzt.
Ich glaube, wir müssen uns damit abfinden, ob es uns passt oder nicht ... :-(
Wie soll Jan den Oberteil nun eigentlich nennen? Aus Deiner Erklärung kommt man eventuell auf den falschen Weg, denn dass was Du beschreibst sind laut Mickysoft verschiedene Sachen die Du da in einen Topf wirfst und Jan ging es ja um Zeile 1.
Wenn Du Jan belehren willst, dann reicht doch kurz und bündig, dass man das was in Zeile 1 steht z.B. Überschrift nennen kann wie es Excel z.B. beim Sortieren bezeichnet (WEITERLESEN! Aussage stimmt nicht.). Wobei dass beim Sortieren wiederum nicht immer die Zeile 1 sein muss.
Mich und bestimmt auch den Rest des Forums würde allerdings Deine Lösung interessieren, wie Du die Spaltenköpfe - so würdest Du das nennen ? - so wie von Jan gewollt ändern tust. Du meintest doch mit Deinem Kopf auch die feste Excel-Bezeichnung oder Nummer der Spalte? So wie Du Deine Frage gestellt hast könnte man vermuten, dass es da auch eine Lösung gibt - ansonsten hättest Du der Vollständigkeit halber bestimmt geschrieben, dass es keine gibt.
Und wenn wir gerade beim Klugsch... sind, beim Seiteneinrichten werden die Dinger mit den festen Buchstaben oder Zahlen Spaltenüberschriften genannt ... ;-) Da kommen wir fast ins Schleudern mit den Überschriften beim Sortieren - siehe oben - oder? Tabellenkopf ist bei den meisten das, was man z.B. mit der Kopfzeile - siehe wieder Seite einrichten - definieren kann. Das ist zuweilen die Zeile 1. Und siehe da - was hatte Jan geschrieben ? Na gut, er wollte es in einer bestimmten Spalte - also wieder Spaltenkopf, von Tabellenkopf abgeleitet.
Nimms also nicht zu ernst, aber lerne weiter. Ich lerne auch ständig und versuche nicht zu vergessen, dass ich auch mal klein angefangen habe.
Mann hatte ich viel Zei, hoffentlich versteht das einer. ;-)))
Bild

Betrifft: ...ja, letzteres ist das Problem... Übrigens, ...
von: Luc
Geschrieben am: 17.04.2005 23:07:41
...André,
sind Tabellen älter als Excel und auch als MS und damit auch solche Bezeichnungen.
Gruß Luc ;-?
Bild

Betrifft: ....das hier ist ein xl-Forum...
von: andre
Geschrieben am: 18.04.2005 05:43:07
..., Luc, hattest Du glaube auch so ähnlich dieser Tage im Betreff geschrieben, und auch wenn Du es nicht warst - da sollte man sich nicht an irgendwas altes halten, sondern an Excel ;-) Ich denke, der Worte sind genug gewechselt - sorry, ist auch ein alter Spruch der nichts mit Excel zu tun hat.
Grüße, Andre
Bild

Betrifft: AW: Programmfehler bei einer Vergleichsfunktion!
von: Jan
Geschrieben am: 18.04.2005 09:25:06
Hallo Luc, Hallo André,
Danke für eure Hilfe! Durch eure Diskussion habe ich ebenfalls wieder viel dazu gelernt. Werde beim nächsten mal, wenn ich eine Frage haben sollte, mich mit meiner Wortwahl bessern.
An André:
Wo muß ich jetzt Dein Programmteil einfügen,
„Sheets("tabelle1").[h1] = WorksheetFunction.Max(Sheets("tabelle2").Range("A1:H1"))“
so dass nach meinem Vergleich zwischen Tabelle1 und Tabelle2 mir das richtige Ergebnis in Spalte H ausgegeben wird? Hab schon versucht Deinen Teil in das Programm einzusetzen, jedoch funktioniert es irgendwie nicht richtig und ich finde den Fehler nicht.
Ich möchte ja die Spalten aus den Tabellen mit einander vergleichen und dann soll die höchste Zahl der Spalte, in der der höchste Wert ist ausgegeben werden. z.B. in Tab1 Z12 wäre R13 die größte Zahl „5“, welche dann in Spalte H/ Z12 ausgegeben werden soll. Beim Vergleich der Z15 müßte dann in Spalte H/ Z15 „3“ ausgegeben werden, da R26 der größte Wert ist.
Hoffe Du verstehst was ich meine. Es soll immer nur die Zahl ausgegeben werden, die nach dem Vergleich am höchsten ist (s.h. dazu Beispiele Tab1).
Danke für die Hilfe
Gruß Jan
Bild

Betrifft: AW: Programmfehler bei einer Vergleichsfunktion!
von: andre
Geschrieben am: 18.04.2005 16:34:04
Hallo Jan,
dann brauchst Du eine Schleife. Wenn Du eine feste Zeilenzahl hast z.B. so:

Sub max_tab2()
for i=1 to 26
sheets("tabelle1").cells(i,8)=WorksheetFunction.Max(Sheets("tabelle2").Rows(i))
next
End Sub

Das max wird hier wegen rows(i) aus der ganzen Zeile genommen.
Bild

Betrifft: AW: Programmfehler bei einer Vergleichsfunktion!
von: Jan
Geschrieben am: 18.04.2005 17:19:37
Hallo André,
eine schleife habe ich schon in meinem Programm. Ich weiß jedoch nicht wie ich Deinen Teil in mein Programm einbinden kann, so dass es funktioniert.

Sub Jan3()
Dim z, s, c As Integer
With Sheets("Tabelle1")
lz = .Cells(Rows.Count, 3).End(xlUp).Row
For z = 4 To lz 'Zeile 4 - letzte Zeile in Tabelle1
For s = 7 To 3 Step -1 'Spalte 7 - 3 in Tabelle1
If Not .Cells(z, s) = "" Then
Wert = .Cells(z, s)
For c = 5 To 1 Step -1 'Spalte 5 - 1 in Tabelle2
Set w = Sheets("Tabelle2").Columns(c).Find(What:=Wert, LookIn:=xlValues, LookAt:=xlWhole)
If Not w Is Nothing Then
If .Cells(z, 8) < Chr(c + 64) Then .Cells(z, 8) = Sheets("Tabelle2").Cells(1, c)
...

Hab schon robiert es statt "Sheets("Tabelle2").Cells(1, c)" "WorksheetFunction.Max(Sheets("tabelle2").Rows(c)) einzusetzen, aber das funktioniert nicht. Da kommt entweder nur 0 oder 5 heraus und nicht der Richtige Wert. Wo liegt der Fehler?
Gruß Jan
Bild

Betrifft: AW: Programmfehler bei einer Vergleichsfunktion!
von: andre
Geschrieben am: 18.04.2005 19:25:19
Hallo Jan,
ich weiß nicht, was Du noch alles in der Schleife machst. Wenn Du da nur noch die Zahlen rausholen willst kannst Du die gegen meine austauschen. Oder Du tust meine Schleife zusätzlich einbauen. Oder Du willst nur bis zur Zeile lz arbeiten, dann so:
...
For z = 4 To lz 'Zeile 4 - letzte Zeile in Tabelle1
sheets("tabelle1").cells(z,8)=WorksheetFunction.Max(Sheets("tabelle2").Rows(z))
For s = 7 To 3 Step -1 'Spalte 7 - 3 in Tabelle1
If ...
Grüße, Andre
Bild

Betrifft: AW: Programmfehler bei einer Vergleichsfunktion!
von: Jan
Geschrieben am: 19.04.2005 08:53:18
Hallo André,
ich glaube Du hast mein Problem noch nicht ganz verstanden.
Ich habe ein Programm welches einen Vergleich zwischen zwei Spalten durchführt. Bei diesem Vergleich wird überprüft, ob die Werte aus Tab.1 in Tab.2 vorhanden sind. Wenn dies der Fall ist, wird geschaut welcher der Werte am weitesten nach rechts liegt. Von diesem Wert soll dann aus Zeile 1 der Wert in Spalte H geschrieben werden.
Beispiel: Es wird angegeben das R20 und R13 vorhanden sind. R20 liegt in Spalte B (2), aber R13 liegt in Spalte E (5) Wenn dies so ist, soll in diesem Fall Zelle E1 (5) übernommen werden. Wenn aber nur R20 vor liegt, soll Zelle B1 (2) übernommen werden.
Habe die Mappe noch einmal etwas verändert, damit es vielleicht etwas besser zu verstehen ist. Die alte Mappe ist etwas schlecht aufgebaut gebe ich zu.
https://www.herber.de/bbs/user/21337.xls
Hoffe das ist jetzt besser verständlich.
Der Ansatz von Dir ist gut, jedoch bin ich kein Profi und kann Ihn deshalb leider nicht richtig in mein Programm einbinden.
Danke für die Hilfe!
Guß Jan
Bild

Betrifft: AW: Programmfehler bei einer Vergleichsfunktion!
von: andre
Geschrieben am: 19.04.2005 19:22:31
hallo Jan,
ich glaube eher, Du hast Dein Problem nicht richtig beschrieben. Du wolltest die höchste Zahl aus Zeile 1 und nicht die Spaltennummer der letzten belegten Spalte der Zeile. Die Spaltennummer bekommst Du mit
letztespalte=cells(zeile,256).end(xltoleft).column
funktioniert allerdings nur wenn in Spalte 256 nix steht, wenn dort was stehen kann schreibe untendrunter
if cells(zeile,256)<>"" then letztespalte=256
Grüße, Andre
Bild

Betrifft: nun wird's ja glücklich langsam klarer - oder? owT
von: Luc ;-
Geschrieben am: 20.04.2005 00:19:06

Bild

Betrifft: AW: nun wird's ja glücklich langsam klarer - oder? owT
von: Jan
Geschrieben am: 20.04.2005 09:25:45
Hallo André,
ja, ich möchte die höchste Zahl aus Zeile 1 haben, wenn der Vergleich durchgeführt wurde, aber nur die Zahl, welche den höchsten Wert besitzt. Die Spaltennummer ist mir egal. Anstatt der Zahlen, können dort auch anderen Dinge stehen wie z.B. "Stufe1", "Stufe2", "Stufe3", "Stufe4" ...
Hast Du da ne Lösung? Mit dem Was Du geschrieben hast kann ich nichts richtig anfangen bzw. verstehe nicht, wie ich dies einsetzen kann.
Gruß Jan
Bild

Betrifft: AW: nun wird's ja glücklich langsam klarer - oder? owT
von: andre
Geschrieben am: 20.04.2005 17:39:45
... Beschäftigungstherapie? Bevor Du noch drei Versionen Deiner Anfrage schickst - wenn 3abc1def2 drin steht willst Du da die 1, die 2, die 3 oder 312 oder 31 oder 32 oder 12 oder das ganze von hinten? Oder brauchst Du die Zahl nur wenn ein bestimmter Buchstabe davor oder dahinter steht oder vieleicht ein halbes oder ganzes Wort?
Grüße und nimms nicht zu ernst, Andre
 Bild

Beiträge aus den Excel-Beispielen zum Thema "Suchbegriff aus Zelle"