online 1
gast (50)

/ Forum / Tabellenkalkulation

TabellenkalkulationTabellenkalkulation

Fragevon Nemesis123 vom 05.02.2021, 16:13 Options

Einfache If-Anweisung & Kopierfunktion von Zellbereichen

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, [u]1 & 3 & 4[/u]) = "x" Then
            [u]Rows(Produktzeile + 9).Copy Worksheets("Output").Rows(53)[/u]
            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!


Antwort schreiben

Antwort 1 von nighty vom 05.02.2021, 16:35 Options

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

Antwort 2 von Nemesis123 vom 06.02.2021, 10:38 Options

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!

Antwort 3 von nighty vom 06.02.2021, 20:12 Options

Hi Nemesis ^^

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

Gruß Nighty

Antwort 4 von nighty vom 07.02.2021, 11:47 Options

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

Antwort 5 von nighty vom 07.02.2021, 11:52 Options

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

Antwort 6 von nighty vom 07.02.2021, 12:17 Options

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

Ähnliche Themen

Makro Anweisung
Nasic  13.08.2007 - 68 Hits - 4 Antworten

Variable in Rows anweisung
morpheus__85  25.10.2007 - 77 Hits - 5 Antworten

Einfache Skizze in eine Zelle zeichnen mit der Maus
Mondlicht  30.01.2008 - 42 Hits - 6 Antworten

Text & aber wie Minus?
korfuweb  18.11.2008 - 10 Hits - 8 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 11:26:25 2026