4.3k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo zusammen,

bin totaler VBA-Anfänger, aber nachdem ich hier schon viele sehr hilfreiche Einträge fand, hätte ich eine Frage zu der ich leider noch kein genaues Post gefunden hab.

Ausgangssituation:
Ich habe eine Tabelle mit Artikeln, in welcher jede Zeile einen Artikel und jede Spalte der Tabelle eine von vielen Eigenschaft des Artikels (z. B. "Neu" o. "Gebraucht") zugeweist. An der entsprechenden Stelle hab ich ein "x" als Markierung gemacht, z. B. ein neuer Artikel mit einem "x" in der jeweiligen Zelle.

Fragestellung:
Nun versuche ich gerade einen VBA-Code zu schreiben, der mir nach einer Auswahl verschiedener Eigenschaften die Tabelle nach Artikeln untersucht, welche all diese Eigenschaften besitzen. Anschließend sollen mir nur diese Artikel auf einem neuen Tabellenblatt angezeigt werden. (Über Auto-Filtern habe ich schon nachgedacht, kommt aber leider nicht in Frage.)

Einige potentielle Teile des Codes konnte ich mir selber zusammen suchen, aber leider weiss ich nicht, wie ich beginnen soll. Ich fand einige ähnliche Posts (z. B. http://www.ms-office-forum.net/forum/showthread.php?p=1105284 und andere auf die ich leider nicht zugreifen konnte), aber da meine VBA-Kenntnisse sehr gering sind, versuche ich mich nun schon seit Stunden an dem Problem.

Kann mir jemand helfen?
Danke im voraus! Liebe Grüße! :P

10 Antworten

0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi nemesis ^^

bitte um schrittweise erklaerung des wunsches :-)

gruss nighty
0 Punkte
Beantwortet von
Hi Nighty,

ich habe mir das ganze so vorgestellt, dass ich ich mir ein variantes Array erstelle mit den Eigenschaften der Produkte. Dazu habe ich schon folgendes zusammengeschrieben:

Private Sub CommandButton1_Click()

' Array für Eigenschaften definieren
Sheets("Step I & II").Select
Dim varArray As Variant
Dim lngEnde As Long
lngEnde = Range("E65536").End(xlUp).Row
varArray = Range("H10:AE" & lngEnde)
End Sub


In diesem Array entspricht jede Position eines "x" einer Eigenschaft eines Artikels (wie in meiner Excel-Tabelle). Jetzt versuche ich die meine Einträge (also die "x" in meiner Tabelle) in das Array einzulesen. Jedoch hab ich keine Ahnung wie, denn bin hab wirklich erst Anfang der Woche zum ersten Mal etwas von VBA gehört ... :Z

Liebe Grüße!
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi nemesis ^^

ein ansatz vielleicht :-))

gruss nighty

Sub Beispiel()
Dim lngEnde As Long
Sheets("Step I & II").Select
lngEnde = Range("E" & Rows.Count).End(xlUp).Row
ReDim varArray(lngEnde, 24) As Variant
'beachte das bei einer eventuellen rueckschreibung der bereich nicht von der groesse abweichen darf
varArray() = Range("H1:AE" & lngEnde)
For y = 10 To lngEnde
For x = 1 To 24
' beachte das x+7(spalte h waere die 8) dein spaltenindex ist
If varArray(y, x) = "bla" Then
'blabla
'bei weiterer suche kein exit for
Exit For
End If
Next x
Next y
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi nemesis ^^

x als long y als integer sollten noch deklariert werden :-))

gruss nighty
0 Punkte
Beantwortet von
Hab nach deinem Vorbild mal hier was probiert (mti meinen Variablen), aber das Array das herauskommt enthält keine Daten aus meiner Tabelle. Wie kann das kommen?

Private Sub CommandButton1_Click()


' Array definieren
Sheets("Step I & II").Select
Dim varArray As Variant
Dim lngEnde As Long
lngEnde = Range("E65536").End(xlUp).Row
varArray = Range("H10:AE" & lngEnde)
Signaturarray = varArray

' Signaturen einlesen
Dim Signatur As String 'Markierung in Form von "x"
Dim n As Long 'Zeilenindex in Excel-Sheet
Dim i As Long 'Spaltenindex in Excel-Sheet
Dim m As Long 'Zeilenindex in Array
Dim l As Long 'Spaltenindex in Array

n = 10 'Startzeile in Excel-Sheet
i = 8 'Startspalte in Excel-Sheet
m = n - 9 'Startzeile in Array
l = i - 7 'Startzeile in Excel-Sheet


For n = 10 To lngEnde
For i = 8 To 31

Signatur = Sheets("Step I & II").Cells(n, i).Value

If Signatur = "x" Then
varArray(m, l) = "x"
Else
varArray(m, l) = ""
End If

Next i
Next n

End Sub


Was hab ich hier falsch gemacht?
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi nemesis ^^

gruss nighty

' Array definieren
Dim lngEnde As Long
Sheets("Step I & II").Select
lngEnde = Range("E" & Rows.Count).End(xlUp).Row
ReDim varArray(lngEnde,24) As Variant
ReDim Signaturarray(lngEnde,24) As Variant
varArray = Range("H10:AE" & lngEnde)
Signaturarray() = varArray()
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi nemesis ^^

gruss nighty

ups da war noch was :-)

' Array definieren
Dim lngEnde As Long
Sheets("Step I & II").Select
lngEnde = Range("E" & Rows.Count).End(xlUp).Row
ReDim varArray(lngEnde, 24) As Variant
ReDim Signaturarray(lngEnde, 24) As Variant
varArray() = Range("H10:AE" & lngEnde)
Signaturarray() = varArray()
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi nemesis ^^

bei der zuweisung bleib ruhig bei 1 statt 10,dann bleibst du parallel zur tabelle bei der y achse oder du musst spaeter 9 addieren bei gebrauchten werten,bei der for next schleife dann bei 10 beginnen

gruss nighty
0 Punkte
Beantwortet von
Hey, vielen Dank nochmal für die Hilfe!
jetzt läuft's irgendwie wie ich's wollte! :P
danke nochmal!
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi nemesis ^^

was die fehlersuche ungemein erleichtert ist der schrittweise modus ueber f8 im vb editor,dort kannst du auch den aktuellen wert der variablen kontrollieren

eine oberflaechliche einarbeitung des vbed erleichtert ungemein :-))

noch als tip

setze vor jedem makro
Option Explicit
zwingt dich variablen zu deklarieren

viele fehler entstehen durch fehlenden oder falsche deklaration,erstere erzeugt immer einen variant,andere erzeugt falsche oder gar keine werte

gruss nighty
...