Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1396to1400
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

Zellenvergleich läuft aus Bereich

Zellenvergleich läuft aus Bereich
26.12.2014 19:40:34
Blaumann
Hi,
habe einen benannten Bereich Test(A1:A25;E1:E25), dieser soll jetzt durchlaufen und geprüft werden ob der Wert der Zelle mit der übernächsten Zelle gleich ist.
Das funtioniert auch mit zelle.Value = zelle.Offset(2,0).Value solange ich mich in einer Spalte befinde.
Wenn ich aber ans Ende komme,nimmt er nicht die erste Zelle in Spalte E sondern macht einfach außerhalb des Bereichs in Spalte A weiter.
Erst wenn ich ganz unten angekommen bin springt er in Spalte E.
Das Durchlaufen ist demnach richtig, nur das Offset funktioniert nicht.
Wie kann ich sagen, das Offset die übernächste Zelle im Bereich ist.
Gruß Peter

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
das ist aber so korrekt!
26.12.2014 20:49:12
Matthias
Hallo
zelle.Offset(2,0)

ist die Zelle deren Zelladresse 2 Zellen unterhalb der zu prüfenden Zelle liegt
Prüfst Du also die letzte im Bereich der Spalte A liegende Zelle wird
A25 mit A27 verglichen. Das ist auch korrekt so!
Gruß Matthias

AW: das ist aber so korrekt!
26.12.2014 21:55:13
Blaumann
Hi,
das dies das normale Verhalten ist, ist mir schon klar.
Nur wie kann ich jetzt sagen, das er zwei Zellen weiter im Bereich nachsehen soll.
Gruß Peter

AW: das ist aber so korrekt!
26.12.2014 22:19:18
Gerold
Hallo Peter
Vielleicht auf so einer Art?

Sub test()
Dim Zelle As Range, Spalte(), Bereich(2) As Range, zz, i
Set Bereich(1) = Range("A1:A25")
Set Bereich(2) = Range("E1:E25")
ReDim Spalte(1 To Bereich(1).Cells.Count + Bereich(2).Cells.Count)
zz = 0
For i = 1 To 2
For Each Zelle In Bereich(i)
zz = zz + 1
Spalte(zz) = Zelle.Value
Next
Next
For i = 1 To UBound(Spalte) - 2
If Spalte(i) = Spalte(i + 2) Then
'        Debug.Print "OK"
Else
'        Debug.Print "nicht gleich"
End If
Next
End Sub
________________
Gruß Gerold
Ein kurzes Feedback tut nicht weh!

Anzeige
Ja, so das klappt das auch ;-) owT
26.12.2014 22:56:37
Matthias

kleine Korrektur ...
26.12.2014 22:51:21
Matthias
Hallo
Da war noch einen kleinen Fehler drin.
Einfach den Code in der Datei ersetzen:
Option Explicit
Sub Lauf()
Dim Zelle, x&
x = 1
For Each Zelle In Range("Test1")
If Range("Test1")(x + 2) = Range("Test1")(x) Then
MsgBox Range("Test1")(x + 2).Address & " - " & Range("Test1")(x).Address
End If
x = x + 1
Next
x = 1
If Range("Test1")(Range("Test1").Count - 1) = Range("Test2")(1) Then
MsgBox Range("Test1")(Range("Test1").Count - 1).Address & " - " & Range("Test2")(1). _
Address
End If
If Range("Test1")(Range("Test1").Count) = Range("Test2")(2) Then
MsgBox Range("Test1")(Range("Test1").Count).Address & " - " & Range("Test2")(2).Address
End If
For Each Zelle In Range("Test2")
If Range("Test2")(x + 2) = Range("Test2")(x) Then
MsgBox Range("Test2")(x + 2).Address & " - " & Range("Test2")(x).Address
End If
x = x + 1
Next
End Sub
Gruß Matthias

Anzeige
Das wird mit einem derart simplen 'Offset' nie ...
26.12.2014 23:39:19
Luc:-?
…was, Peter,
da es sich beim benannten um einen unzu­sammen­hängenden Bereich handelt. Das kann mit Worksheet­Function.Index direkt (4.Argument), aber nicht oW mit Offset berücksichtigt wdn, wenn man nicht die Bereichsgrenzen und den Abstand der TeilBereiche berücksichtigt. Es geht hier aber auch wie folgt:
Sub VglMfachAw()
Dim ix As Long, iz As Long, zAnz As Long, zelle As Range
With Range("Test")
ix = 1: iz = 3: zAnz = .Rows.Count
For Each zelle In .Cells
If ix > .Areas.Count Then Exit For
If zelle.Value = .Areas(ix).Cells(iz) Then _
MsgBox zelle.Address(0, 0) & "=" & .Areas(ix).Cells(iz).Address(0, 0)
iz = iz Mod zAnz + 1: ix = ix - CInt(iz = 1)
Next zelle
End With
End Sub
Gruß, Luc :-?

Anzeige
AW: Das wird mit einem derart simplen 'Offset' nie ...
27.12.2014 13:15:47
Blaumann
Hi,
ein herzliches Dankeschön an alle, das ihr auch über Weihnachten Hilfe gibt.
Die Vorschläge funktionieren, nur bekomme ich das auf mein Projekt nicht angewendet.
In der Annahme das es eine einfache Lösung gibt, habe ich auch die Frage an einem einfachen Beispiel aufgehangen. Das war wohl ein Fehler.
Es handelt sich um eine Art Kalender mit 12 Monaten. Jeder Bereich ist ein Monat.
Jeder Bereich besteht aus vier Spalten in der ersten steht das jeweilige Datum und in Spalte 4 wird dann die PKnr.(Putzkolonne) eingetragen. Anhand des Datums wird eingetragen wann die PK anfängt und wann sie aufhört. ZB. vom 12.1. bis zum 14.1, Einträge dann am 12.1 und am 14.1. Es gibt aber auch Einträge für einen Tag oder zwei Tage, diese spielen aber keine Rolle.
Es gibt 25 verschuedene PK und keine darf länger als 3 Tage hintereinander Dienst haben.
Dies möchte ich jetzt aus dem Kalender auslesen, in zwei Varianten.
zum einen wann die PK drei Tage Dienst haben ( PK1 12.1 14.1)
zum anderen Zählen wie oft eine PK drei Tage Dienst hatte (PK1 5)
Habe auch schon versucht die Monate in ein Array einzulesen, aber das gelingt mir nur für einen Monat.
Die anderen erscheinen immer als eigenes Areas. Es gelingt mir nicht ein Gesamtarray zu bilden.
Komme da einfach nicht dahinter.
Vielleicht könnt ihr trotz meines Fehlers noch etwas Hilfe geben.
Gruss Peter

Anzeige
Na, da hast du dir ja schön selbst ein Bein ...
27.12.2014 13:44:25
Luc:-?
…gestellt, Peter… ;-]
Ich hatte mich nämlich schon gefragt, was ein solcher Vgl soll! Damit hast du uns nur unnötige Arbeit verursacht!
Merke! Es ist stets kontraproduktiv, nicht das eigentliche Problem zu beschreiben, sondern stattdessen Fragen zu Details und Problemen eines selbst überlegten, vermeintlichen Lösungswegs zu stellen. Damit bekommt man auch nur dazu AWen und riskiert, das eigentliche Problem trotzdem nicht lösen zu können wie du es jetzt ja mal wieder „sehr schön“ demonstriert hast… :-|
Dieses falsche Vorgehen ist übrigens leider nicht gerade selten, weshalb es auch Gegenstand von Schulungen für Lehrkräfte und EDV-/IT-Trainer ist!
Ganz klar wird die Problematik durch deine ausführlichere Beschreibung nun auch nicht. Ich empfehle dir deshalb, ein sinnvoll vereinfachtes DateiBsp auf den herber-Server hochzuladen.
Gruß, Luc :-?

Anzeige
AW: merke es mir
28.12.2014 00:21:01
Blaumann
Hi,
habe mittlerweile einen Weg gefunden, wie ich alles in ein Gesamtarray bekomme(Beispiel 2 Monate)
Vielleicht gibt es ja noch eine bessere Lösung da ich ja 12 Monate in das Array bekomme.
Sub Testarray()
Dim i As Integer
Dim j As Integer
Dim x1 As Integer
Dim x2 As Integer
Dim arr1() As Variant
Dim arr2() As Variant
Dim arr13() As Variant
arr1() = Sheets("Tabelle1").Range("Januar").Value
x1 = UBound(arr1)
arr2() = Sheets("Tabelle1").Range("Februar").Value
x2 = UBound(arr2)
ReDim arr13((x1 + x2), 4)
For i = 1 To x1
For j = 1 To 4
arr13(i, j) = arr1(i, j)
Next
Next i
For i = x1 + 1 To (x1 + x2)
For j = 1 To 4
arr13(i, j) = arr2(i - x1, j)
Next
Next
MsgBox UBound(arr13)
MsgBox arr13(57, 4)
End Sub
Im Moment ist mir aber auch noch unklar wie ich dann das Array durchlaufen kann, um zu überprüfen ob die Zeile und die übernächste Zeile in Spalte 4 gleich ist.
Wenn ja soll der Wert aus Zeile/Spalte4 der Wert aus Zeile/Spalte1 und der Wert aus übernächste Zeile/Spalte1 ausgegeben werden.
Gruss Peter

Anzeige
Es soll sich dabei wohl um eine Kontrolle ...
28.12.2014 18:01:59
Luc:-?
…auf vorgabegerechte Erstellung des Putzplans handeln, Peter,
wenn ich dich richtig verstehe. Ich hätte dazu aber noch eine Frage:
Wie sieht's denn an Sonn- und Feiertagen aus? Wird da durchgeputzt? Deine TabEintragungen scheinen darauf hinzudeuten! Aber ist das immer der Fall oder wie ist Eintragung von PKn am Fr und am darauffolgenden Mo zu verstehen - als Putzen am Fr+Sa+So+Mo? Oder ist Mo nur AbschlussKennzeichnung und der Tag eigentlich frei? Was wäre dann mit AbschlussEintragungen am Sonntag? Oder sind die Fr…Mo-Fälle schon alle Fehler?
Deine Feiertagsliste scheint mir übrigens auch sehr spezifisch zu sein…
Gruß, Luc :-?

Anzeige
AW: Es soll sich dabei wohl um eine Kontrolle ...
29.12.2014 00:31:01
Blaumann
Hi,
es ist eine Kontrolle für mich das ich die PK möglichst gleichmäßig einsetze.
Es wird natürlich jeden Tag geputzt, die WE hatte ich noch aus einem anderen Grund freigelassen, dieser hat sich jedoch erledigt.
Mittlerweise habe ich es geschafft alle Monatsarray in ein Gesamtarray zu schreiben und dieses dann abzufragen. Damit hat sich das Problem erledigt.
Nochmals Danke für eure Hilfe.
Gruss Peter

Na, auch gut! Ahoi! owT
29.12.2014 02:04:31
Luc:-?
:-?

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige