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

verborgene Spalte auswerten

verborgene Spalte auswerten
22.06.2007 14:29:13
Peter
Guten Tag
In einem meiner Files habe habe ich der ausgeblendeten Spalte A (Zeilen 8 - 250) eine Kontrollzahl eingebaut. Korrekt ist, wenn diese ein (1) ist. Aus verschiedenen Gründen darf diese Spalte nicht eingeblendet werden. Es ist kann davon ausgegangen werden, dass pro File höchstens 2-6 abweichende Einträge vorhanden sind (z.B. anstelle 1 die Zahl 2 oder 3.
Nun möchte ich in der Statuszeile die Zeilennummern ausgeben, bei denen in Spalte A eine abweichende Kontrollzahl steht. Idealer wäre, wenn zudem auch noch die Zahl hinten angefügt wird.
Wenn also auf Zeile 17 die Kontrollzahl 2 steht und in Zeile 111 die Kontrollzahl 3, sollte in der Statuszeile
folgendes ausgegeben werden:
Entweder: "17 -11"
oder besser: 17:2 - 111:3
Mein Problem: ich habe keine Ahnung, wie das anzupacken ist und wäre für eine Hilfestellung dankbar.
Vielen Dank und Gruss, Peter

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

Betreff
Datum
Anwender
Anzeige
AW: verborgene Spalte auswerten
22.06.2007 21:29:00
Daniel
Hallo
als als normale Excel-Funkion kann ich mir nur schwer ne Lösung vorstellen, daß müsste dann ja sowas wie ne Matrix-Funktion mit String-Ergebnis sein.
Aber bei Matrix-Funktionen bin ich nicht so zu Hause, um sagen zu können, obs mögich ist oder nicht.
als UDF (selbst geschriebene Funtkion) ist es eigentlich ganz einfach:

Public Function Prüfung(Prüfbereich As Range, iO_Wert As Variant) As String
Dim Zelle
For Each Zelle In Prüfbereich
If Not Zelle.Value = iO_Wert Then Prüfung = Prüfung & Zelle.Row & ":" & Zelle.Text & " - "
Next
If Len(Prüfung) > 3 Then Prüfung = Left(Prüfung, Len(Prüfung) - 3)
End Function


1. Parameter ist dein Zellbereich (als A8:A250), der 2. Paramter ist der "iO-Wert", dh. im Ergebnisstring werden alle Zeilen-Nummern gezeigt, deren Zellwert nicht dem iO-Wert entspricht.
Auf geschwindigkeit ist das ganze noch nicht optimert, falls die Funktion noch zu langsam ist, könnte man aber noch was machen.
Gruß, Daniel

Anzeige
AW: verborgene Spalte auswerten
22.06.2007 22:27:14
Peter
Hallo Daniel
Deine Lösung ist sehr interessant. Die Geschwindigkeit ist im Moment kein Problem. Ich habe versucht sie noch etwas auszubauen. Der Bereich C3:C250 (bisher war es Spalte A, aufgrund Umstellungen Spalte C) nicht immer ganz ausgefüllt ist, hat es unten mehr oder weniger NULL-Werte, die nicht weiter relevant ist. Deshalb habe ich in der Codezeile mit If noch eine zusätzliche Bedingung eingebaut, was soweit auch funktioniert hat. Damit ich immer eine aktuelle Auswertung habe, steht im Code zusätzlich „Application.Volatile“.
Da ich die Auswertung eigentlich gerne in der Statuszeile hätte, habe ich mir überlegt, ich könnte eine Ereignisprozedur bei der entsprechenden Tabelle einfügen, die dann ein Makro aufruft, das seinerseits mit Evaluate die Funktion Prüfung auswertet.
Wenn sich im Moment im Bereich C3:C250 etwas ändert, erhalte ich eine Fehlermeldung beim Modul Sub Check() und zwar bei Cbereich = .Range(.cells(8,3), .Cells(250,3). Weiss jemand woran das liegt? Vielleicht ist diese Kombination (Auswerten eine eigenen Funktion) nicht möglich? Falls diese Vorgehensweise grundsätzlich geht: kann ich hier application.volatile weglassen?
Ich bin auf Rückmeldungen gespannt.
Vielen Dank, Peter

Public Function Prüfung(Prüfbereich As Range, iO_Wert As Variant) As String
Application.Volatile
Dim Zelle
For Each Zelle In Prüfbereich
If Not Zelle.Value = iO_Wert And Not Zelle.Value = 0 Then Prüfung = Prüfung & Zelle.Row & ": _
" & Zelle.Text & " - "
Next
If Len(Prüfung) > 3 Then Prüfung = Left(Prüfung, Len(Prüfung) - 3)
End Function


Sub Worksheet_Change(ByVal Target As Range)
Target = Range(Cells(8, 3), Cells(1000, 3))
Call check
End Sub


Sub check()
Dim Cbereich As Range
With ActiveSheet
Cbereich = .Range(.Cells(8, 3), .Cells(250, 3))
Application.StatusBar = Evaluate ("=Prüfung(Cbereich,1)")
End With
End Sub


Anzeige
AW: verborgene Spalte auswerten
22.06.2007 22:54:25
Daniel
hi
yo, volatile kannst du komplett weglassen (wird ja jetzt über das Change-Event gesteuert.
dein Fehler ist folgender:
wenn du einer Objekt-Variablen (das wären u.A. Worksheet, Workbook und Range) einen Wert zuweist, dann muß die Zuweisung immer mit SET erfolgen. (also SET CBereich = Range(...))
Wenn sich eine Range sicher auf das gerade aktive Sheet beziehen soll, kann man die Angabe des Sheets auch weglassen
des weiteren kannst du die UDF auch aus Makros heraus ganz normal aufrufen, das EVALUATE ist nicht notwendig:
Dashier sollte genausso funtkionieren:

Sub check()
Application.StatusBar = Prüfung(Range(Cells(8, 3), Cells(250, 3)),1)
End Sub


(und weils nur eine Zeile ist, schreibt man es gleich ins Change-Event, wenn es nicht von anderen Sheets auch noch benötigt wird)
Gruß, Daniel

Anzeige
AW: verborgene Spalte auswerten
22.06.2007 23:13:42
Peter
Hallo Daniel - vielen Dank für deine Rückmeldung.
Ich habe ein weiteres Problem wo mit meinem Worksheet_Change. Ich nehme an, dass die Zeile
"Target = Range(cells(8,3), Cells(1000,3))" nicht richtig ist, denn jedesmal, wenn ich nun in der Tabelle eine Zelle bearbeite, wird diese Zelle gelöscht.
Wahrscheinlich für einen Profi gleich ersichtlich - doch leider gehöre ich nicht zu dieser Kategorie.
Danke für ein Feedback, Peter

Sub Worksheet_Change(ByVal Target As Range)
Target = Range(Cells(8, 3), Cells(1000, 3))
Application.StatusBar = Prüfung(Range(Cells(8, 3), Cells(250, 3)), 1)
End Sub


Anzeige
AW: verborgene Spalte auswerten
23.06.2007 01:06:00
Daniel
Hi
Target ist die Objekt-Variable, die den Zellbereich beschriebt, der gerade geändert wurde.
dh. Target wird normalerweise nur benutzt, um festzustellen, welcher Bereich geändert wurde, um im Makro ggf. darauf angepasst zu reagieren.
Hab mich schon gewundert, warum du Target überaupt Werte zuweisen willst.
Was willst du damit eigentlich erreichen?
Ein weitere Punkt ist, wenn man in einem SheetChange-Makro einer Zelle einen Wert zuweist, wird ja was verändert und das SheetChange-Markro ruft sich selbst rekursiv auf. Das ist im normalfall aber nicht erwünscht und muß über die Anweisung APPLICATION.ENABLEEVENTS = FALSE unterbunden werden.
allerdings darf man nicht vergessen, bei Makro-Ende APPLICATION.ENABLEEVENTS wieder auf TRUE zu setzen.
Gruß, Daniel

Anzeige
AW: verborgene Spalte auswerten
23.06.2007 08:44:43
Peter
Hallo Daniel
Mit nachvolgendem Event habe ich nun die Lösung gefunden.
Nochmals besten Dank und Gruss, Peter

Sub Worksheet_Change(ByVal Target As Range)
Dim Bereich As Range
Set Bereich = Range(Cells(8, 3), Cells(1000, 3))
If Intersect(Target, Bereich) Is Nothing Then Exit Sub
Application.StatusBar = Prüfung(Range(Cells(8, 3), Cells(250, 3)), 1)
End Sub


AW: verborgene Spalte auswerten
23.06.2007 10:07:00
Peter
Hallo
Kleiner Nachtrag
Gruss, Peter
hatte doch noch kleinen, jedoch verhängnisvollen Fehler
es muss "anscheinend" heissen: If Not Intersect ... (hatte Not ausgelassen)
Mir ist allerdings die Syntax nicht ganz klar, doch es funktioniert ... muss mich da nochmal schlau machen.

Sub Worksheet_Change(ByVal Target As Range)
Dim Bereich As Range
Set Bereich = Range(Cells(8, 3), Cells(1000, 3))
If Not Intersect(Target, Bereich) Is Nothing Then Exit Sub
Application.StatusBar = Prüfung(Range(Cells(8, 3), Cells(250, 3)), 1)
End Sub


Anzeige
AW: verborgene Spalte auswerten
23.06.2007 15:30:29
Daniel
HI
naja die Bedingung ist ja "Intersect (Target, Bereich) is Nothing", dh. IS NOTHING ist WAHR, wenn Target und Bereich KEINE übereinstimmung haben.
Wenn die folgenden Befehle dagegen ausgeführt werden sollen, wenn eine Übereinstimmung vorliegt, muß eben noch ein NOT davor, was was True in False und False in True umwandelt.
Gruß, Daniel

AW: verborgene Spalte auswerten
23.06.2007 18:15:11
Peter
Vielen Dank!, Daniel

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige