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
640to644
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
640to644
640to644
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Arraydimension variabel

Arraydimension variabel
27.07.2005 12:44:13
GothicFiction
Hallo liebe Leute,
hier noch ein Problem: In einer Excelliste stehen in der Spalte A Daten (also nicht jetzt irgendwelche, sonder die Pluralform von Datum). Per Suchabfrage (diese läuft problemfrei) sollen die Reihen herausgegriffen werden, die über das Datum identifiziert wurden. Nun sollen Zellwerte aus dieser Reihe addiert werden, Zeit für ein Beispiel:
Seien die Reihe 2, 7, 112 identifiziert: Der Wert, den ich nun haben möchte, um ihn in eine andere Excelliste einzufügen ergibt sich aus B2 + B7 + B112.
meine Idee war, ein Array zu verwenden, in welches ich die gefundenen Reihennummern einfüge. Da ich vorher nicht weiss, wie viele es sein werden, kann ich vorher nicht definieren, wie groß das Array sein wird, bei PHP z.B. kein Problem, man kann einfach werte zum array adden, der index läuft automatisch hoch, gibt es in VBS etwas äquivalentes?
Danach könnte ich bequem per For Each schleife jeweils eine der gefundenen Zeilen herauspicken, die gewünschten werte zu einer variable hinzuaddieren und glücklich sein. Leider ist das aber nicht so, hier, was ich bisher gemacht habe:
Option Explicit
'Funktion sucht Zeile mit betreffendem Datum

Function suche_datum(ByVal col As Range, ByVal datum As String) As Variant
Dim cell As Variant, values As Variant, varZeilen As Variant
For Each cell In col
If cell.Value = datum Then
cell.Activate
varZeilen = Array(ActiveCell.row) 'hier würde, wenns PHP Code wäre, bei jedem durchgang einfach ein wert ans array angehängt
End If
Next
suche_datum = varZeilen
End Function

'Funktion erstellt Range-Objekt, das durchsucht werden soll

Function bestimme_bereich(ByVal row As Variant, ByVal col As Variant)
Dim last_row As Variant
last_row = Cells(Rows.Count, col).End(xlUp).row
Set bestimme_bereich = ActiveSheet.Range(Cells(row, col), Cells(last_row, col))
End Function


Sub datumssuche()
Dim rngBereich As Range, varZeilen As Variant, strDatum As String, i As Variant
'Alle Zeilen mit entsprechendem Datum finden
strDatum = "01.01.2005"
Set rngBereich = bestimme_bereich(2, 1)
varZeilen = suche_datum(rngBereich, strDatum)
'Hier würd ich dann die Zusammenzählung der gefundenen Werte zum Endwert vornehmen
For Each i In varZeilen
MsgBox i
Next i
End Sub

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Arraydimension variabel
27.07.2005 12:47:49
MichaV
Hallo,
variable Arrays kannst Du in VB nur so machen:
'1 Element an Array anfügen
Redim Preserve DeinArray(Ubound(DeinArray)+1)
DeinArray(Ubound(DeinArray))=DeinAnzufügenderWert
Gruss- Micha
PS: Rückmeldung wäre nett.
AW: Arraydimension variabel
27.07.2005 13:11:43
GothicFiction
Hmmm, dein Konstrukt meckert er nicht an, das ist schon einmal gut, dafür hängts jetzt weiter unten. In der letzten -5 ten Zeile bekomme ich ein Typen unverträglich
Option Explicit
'Funktion sucht Zeile mit betreffendem Datum

Function suche_datum(ByVal col As Range, ByVal datum As String) As Variant
Dim cell As Variant, values As Variant, varZeilen As Variant, bool As Boolean
bool = False
For Each cell In col
If cell.Value = datum Then
cell.Activate
If bool Then
ReDim Preserve varZeilen(UBound(varZeilen) + 1)
varZeilen(UBound(varZeilen)) = ActiveCell.row
Else
varZeilen = Array(ActiveCell.row)
bool = True
End If
End If
Next
suche_datum = varZeilen
End Function

'Funktion erstellt Range-Objekt, das durchsucht werden soll

Function bestimme_bereich(ByVal row As Variant, ByVal col As Variant)
Dim last_row As Variant
last_row = Cells(Rows.Count, col).End(xlUp).row
Set bestimme_bereich = ActiveSheet.Range(Cells(row, col), Cells(last_row, col))
End Function


Sub datumssuche()
Dim rngBereich As Range, varZeilen2 As Variant, strDatum As String, wert As Variant
'Alle Zeilen mit entsprechendem Datum finden
strDatum = "01.01.2005"
Set rngBereich = bestimme_bereich(2, 1)
varZeilen2 = suche_datum(rngBereich, strDatum)
For Each wert In varZeilen2 'Hier kommt Fehler 13, Typen unverträglich
MsgBox wert
Next wert
End Sub

Anzeige
AW: Arraydimension variabel
27.07.2005 13:16:27
MichaV
Hallo,
meist Du cell.Activate?
Das geht nicht, wenn es sich um eine UDF handelt, Du die Funktion also über die Excelzelle aufrufst.
Wozu das Activate? Schreib doch etwas tiefer varZeilen(UBound(varZeilen)) = Cell.row
Gruss- Micha
PS: Rückmeldung wäre nett.
AW: Arraydimension variabel
27.07.2005 14:16:37
GothicFiction
Habs geändert, der Debugger mault aber über:
For Each wert In varZeilen2 'Hier kommt Fehler 13, Typen unverträglich
MsgBox wert
Next wert
Weisst du wieso?
AW: Arraydimension variabel
27.07.2005 14:31:24
MichaV
Hallo,
versuch mal:

varZeilen2 = suche_datum(rngBereich, strDatum)
If IsArray(varZeilen2) Then
For Each wert In varZeilen2 'Hier kommt Fehler 13, Typen unverträglich, wenn nix gefunden wurde
MsgBox wert
Next wert
Else
MsgBox "Nix gefunden"
End If

Gruss- Micha
PS: Rückmeldung wäre nett.
Anzeige
AW: Arraydimension variabel
27.07.2005 14:50:08
GothicFiction
Danke Micha,
das ist`s wohl gewesen, die Tabelle iss nämlich für ne Statistik und ich wurde hier die ganze Zeit zugedröhnt mit "wir brauchen die Zahlen, am besten vorgestern", dabei habsch meinen Testwert überschrieben... Ich stell das Script online, wenn`s fertig ist.
AW: Arraydimension variabel
27.07.2005 16:04:50
GothicFiction
mit folgendem Code funktioniert, was ich wollte:
Option Explicit
'Funktion sucht Zeile mit betreffendem Datum

Function suche_datum(ByVal col As Range, ByVal datum As String) As Variant
Dim cell As Variant, values As Variant, varZeilen As Variant, bool As Boolean
bool = False
For Each cell In col
If cell.Value = datum Then
If bool Then
ReDim Preserve varZeilen(UBound(varZeilen) + 1)
varZeilen(UBound(varZeilen)) = cell.row
Else
varZeilen = Array(cell.row)
bool = True
End If
End If
Next
suche_datum = varZeilen
End Function

'Funktion erstellt Range-Objekt, das durchsucht werden soll

Function bestimme_bereich(ByVal row As Variant, ByVal col As Variant)
Dim last_row As Variant
last_row = Cells(Rows.Count, col).End(xlUp).row
Set bestimme_bereich = ActiveSheet.Range(Cells(row, col), Cells(last_row, col))
End Function


Sub datumssuche()
Dim rngBereich As Range, varZeilen As Variant, strDatum As String, wert As Variant
'Alle Zeilen mit entsprechendem Datum finden
strDatum = "01.01.2005"
Set rngBereich = bestimme_bereich(2, 1)
varZeilen = suche_datum(rngBereich, strDatum)
If IsArray(varZeilen) Then
For Each wert In varZeilen
MsgBox wert
Next wert
Else
MsgBox "Datum nicht gefunden"
End If
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige