1.8k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo nochmal,

habe eine kurze Frage zum Auslesen eines Arrays.
Habe nähmlich ein Array mit lauter "x" an bestimmten Positionen. Nun möchte ich, dass wenn in einer Zeile des Arrays eine Kombination aus x auftaucht, ein bestimmter Zellbereich in Excel kopiert wird.

Zur Einfachheit halber nehmen wir mal einfach folgendes 3x5-Array an:
12345
1 x0xxx
2 xxxx0
3 0xx00

Nun sage ich die Spalten 1, 3 & 4 sollen "x" haben, die anderen Spalten nicht. Dann soll mir mein VBA-Code den Zellbereich kopieren.

Hier mal mein kläglicher Anfängerversuch:
If varArray(Produktzeile, 1 & 3 & 4) = "x" Then
Rows(Produktzeile + 9).Copy Worksheets("Output").Rows(53)
End If


Blöderweise sind min. 2 Fehler drin, die Excel nicht akzeptiert. Ich kenne mich mit den Schreibweisen nicht aus.
- Wie schreibt man das am besten um beim 1. Fehler? (Kann man statt 1,3 und 4 im Beispiel auch Variablen verwenden?)
- Und wie kopiert man Zellbereiche, welche nicht miteinander verbunden sind auf ein Tabellenblatt?

Wäre super, wenn ihr mir helfen könntet, denn ich kenn mich leider nicht genug mit VBA aus ...
Ich weiss, dass es hierzu viele Posts gibt, aber ich suchte jetzt schon eine ganze Weile, aber ohne Ergebnis, was mir helfen würde.

Liebe Grüße!

6 Antworten

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

gruss nighty

If varArray(Produktzeile, 1) = "x" And varArray(Produktzeile, 3) = "x" And varArray(Produktzeile, 4) = "x" Then
Rows(Produktzeile + 9).Copy Worksheets("Output").Rows(53)
End If
0 Punkte
Beantwortet von
Du schon wieder! :D
Vielen Dank schonmal! So geht's auf jeden Fall schonmal! :P

Aber kann man die Bedingungen etwas kürzer schreiben, so dass so etwas in der Art herauskommt?

If varArray(Produktzeile, a & b & c & d & e) = "x" Then


Es folgen nähmlich noch einige Bedingungen ...
Liebe Grüße!
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
Hi Nemesis ^^

Bastel dir eine Schleife,wir haben durch das Array eine enorme Geschwindigkeit :-))

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

hier ein beispiel

gruss nighty

Option Explicit
Sub BeispielForNext()
Dim ArrSpaltenBereich As Variant
Dim ZeilenBereich As Long
Dim SpaltenBereich As Long
Dim TrefferAnzahl As Integer
ArrSpaltenBereich = Split("1,3,7,12", ",")
ReDim varArray(100, UBound(ArrSpaltenBereich)) As Variant
For ZeilenBereich = 1 To 100
For SpaltenBereich = LBound(ArrSpaltenBereich) To UBound(ArrSpaltenBereich)
If UCase(varArray(ZeilenBereich, SpaltenBereich)) = "X" Then TrefferAnzahl = TrefferAnzahl + 1
Next SpaltenBereich
If TrefferAnzahl = UBound(ArrSpaltenBereich) Then
Rem erfuellt
Else
Rem nicht erfuellt
End If
TrefferAnzahl = 0
Next ZeilenBereich
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi nemesis ^^

das beispiel bezieht sich aber nur auf nicht aufeinander folgende spalten,fuer durchgehende reicht eine standard for next schleife bzw do loop

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

da war schon wieder ein fehler :-))

gruss nighty

wobei die dimensionierung der spalten einzel zugewiesen werden sollte mit entsprechender reduzierung des array,ich hab es hier auf 12 ausgedehnt

Option Explicit
Sub BeispielForNext()
Dim ArrSpaltenBereich As Variant
Dim ZeilenBereich As Long
Dim SpaltenBereich As Long
Dim TrefferAnzahl As Integer
ArrSpaltenBereich = Split("1,3,7,12", ",")
ReDim varArray(100, 12) As Variant
For ZeilenBereich = 1 To 100
For SpaltenBereich = LBound(ArrSpaltenBereich) To UBound(ArrSpaltenBereich)
If varArray(ZeilenBereich, Val(ArrSpaltenBereich(SpaltenBereich))) = "X" Then TrefferAnzahl = TrefferAnzahl + 1
Next SpaltenBereich
If TrefferAnzahl = UBound(ArrSpaltenBereich) Then
Rem erfuellt
Else
Rem nicht erfuellt
End If
TrefferAnzahl = 0
Next ZeilenBereich
End Sub
...