Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
744to748
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
744to748
744to748
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Übergabe von Zeilenwert der Zelle an eine Funktion

Übergabe von Zeilenwert der Zelle an eine Funktion
17.03.2006 15:59:25
Zeilenwert
Hallo,
irgendwie komme ich nicht weiter.
Ich habe eine Funktion geschrieben, die überprüft ob sich ein Wert zum dem davor ändert und dann mitzählt wie oft der Wert sich zur Vorwoche geändert haz. Diese Funktion klappt auch.
Um Mein Problem zu verstehen, hier der Aufbau der Tabelle:
ID Counter Wert heute Wert KW1 Wert KW2 ... Wert KW12
Name1 1 3 2 2
Name2 1 1 1 1
Name3 0 1 1 1
...
Da wo Counter ist möchte ich meine Funktion Counter aufrufen mit der Formel:
=Counter
In VB habe die "Function Counter()" definiert und fertig geschrieben.
Jetzt mein Problem:
Wie kann ich zum einen den Wert Zeile übergeben, also beim Name1 Zeile=2
Mein zweites Problem:
Wie kann ich das Ergebnis des Counters anzeigen lassen? Wie übergebe ich den Wert zurück? Ich kann zwar ein Makro programmieren, dass das mit Schleifen durchläuft, aber beim öffnen der Datei, sollte möglichst ohne das man das Makro ausführt, alle Daten aktualisieren.
Wäre für jede Hilfe Dankbar.

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Übergabe von Zeilenwert der Zelle an eine Funktion
17.03.2006 16:09:14
Zeilenwert
Hallo Philipp,
mal als Beispiel:
 
 A
11
21
32
42
53
63
74
84
93
Formeln der Tabelle
A9 : =Counter(A1:A8)
 

Und der dazugehörende Funktionscode:

Private Function Counter(Bereich As Range) As Integer
Dim rng As Range
For Each rng In Bereich
If rng.Row > Bereich.Row Then
If rng <> rng.Offset(-1, 0) Then
Counter = Counter + 1
End If
End If
Next 'rng
End Function
Gruß Ingolf
Anzeige
AW: Übergabe von Zeilenwert der Zelle an eine Funktion
Zeilenwert
Danke,
du hast mir schon einmal viel geholfen. Es Funktioniert auch fast. Ich Vergleiche nicht zeilenweise sondern Spaltenweise. Angepasst und es funktioniert. Habe bei einigen Zeilen Probleme, weil in den Spalten #NV Werte stehen.
Gibt es eine Methode (IF Abfrage), die diese Werte ignoriert?

Private Function Counter(Bereich As Range) As Integer
Dim rng As Range
For Each rng In Bereich
If rng.Column > Bereich.Column Then
If rng <> rng.Offset(0, -2) Then
Counter = Counter + 1
End If
End If
Next 'rng
End Function

AW: Übergabe von Zeilenwert der Zelle an eine Funktion
17.03.2006 16:59:01
Zeilenwert
Hallo Philipp,
 
 ABCDE
312#NV#NV3
 

Der Wechsel von Spalte B nach Spalte C soll also nicht berücksichtigt werden. Was ist aber mit dem Wechsel von Spalte D nach Spalte E? Und bedeutet #NV ignorieren, dass dann der Wechsel von Spalte B direkt nach Spalte E berücksichtigt werden soll?
Gruß Ingolf
Anzeige
AW: Übergabe von Zeilenwert der Zelle an eine Funktion
17.03.2006 17:04:02
Zeilenwert
Gibt es nicht. Es stehen immer erst Werte #NV #NV 1 2 4 1
AW: Übergabe von Zeilenwert der Zelle an eine Funktion
17.03.2006 17:32:42
Zeilenwert
Hallo Philipp,
ich verstehe den Aufbau deiner Zellvergleiche nicht richtig. Warum Offset(0,-2)? Daher hab ich, damit ich das Ganze auch testen kann, die Abfrage nach dem Fehler #NV in meinen eigenen Code eingebaut. Mußt du halt nochmal anpassen.

Private Function Counter(Bereich As Range) As Integer
Dim rng As Range
For Each rng In Bereich
If rng.Row > Bereich.Row Then
If CStr(rng.Offset(-1, 0)) <> "Fehler 2042" Then
If rng <> rng.Offset(-1, 0) Then
Counter = Counter + 1
End If
End If
End If
Next 'rng
End Function
Gruß Ingolf
Anzeige
AW: Übergabe von Zeilenwert der Zelle an eine Funktion
17.03.2006 16:15:57
Zeilenwert
Hi,
benutzerdefinierte Funktionen programmiert man nach folgendem Prinzip:

Function Counter(a as Interger) as Double
Counter = a / 2
End Function

Das hat jetzt zunächst mal nix mit Deiner Aufgabenstellung zu tun, sondern soll den prinzipiellen Aufbau verdeutlichen;
a ist ein Wert (in diesem Falle einb Integer-Wert) der der Funktion übergeben wird. Der Rückgabewert ist vom Typ Double. Das Ergebnis wird einfach den Funktionsnamen zugewiesen.
Mit =Counter(3)
rufst Du dann die Funktion auf. Ergbnis sollte 1,5 sein.
Du kannst natürlich auch den Inhalt von Zellen an Deine Funktion übergeben, das sähe dann zB so aus:

Function Counter(a as Range) as Double
Counter = a.Value / 2
End Function

Wenn in A1 der Wert 3 steht, dann sollt mit =Counter(A1) dann das gleiche rauskommen wie oben.
Der Code der Funktion gehört in ein Standardmodul.
Ich hoffe, das hilft Dir weiter.
Schönen Gruß,
Andi
Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige