Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Wenn Dann
zurück: Log Datei erstellen bei Änderung weiter: Merkwürdiger Absturz durch 'Zeilen ausblenden' verursacht Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Antwort Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Andreas54
Im Profil kannst Du frei den Rang ändern


Verfasst am:
26. Nov 2012, 17:17
Rufname:

Wenn Dann - Wenn Dann

Nach oben
       Version: Office 2010

Hallo Zusammen,

Ich führe Datentabellen mit MS Query zusammen. Die Ergebnistabelle stellt sich beispielhaft wie folgt dar:

A B C D
1 x 10 20
2 n 10 20
3 x 10 20

habe folgendes Problem:
Würde gerne die Werte in den Datenspalten (C+D) abhängig vom Wert in Spalte B überschreiben (x=nichts tun, n=neuer Wert ist 0). Wie kann ich dies in einem Makro umsetzten?

Oder kann ich diese Bedingung gleich in der Sql abfrage integrieren?

Bin leider blutiger Anfänger was Sql/VBA betrifft.

Gruß,

Andi
kurochan
angelesenes Halbwissen


Verfasst am:
26. Nov 2012, 22:24
Rufname:
Wohnort: bei Heidelberg


AW: Wenn Dann - AW: Wenn Dann

Nach oben
       Version: Office 2010

Hallo Andi,

ich gehe davon aus, dass Deine Ergebnisabelle schon in einer Excel-Tabelle steht.
Dann probiers's mal so:
Code:
Sub bei_n_0()
   Dim rngLastCell       As Range
   Dim rngBereich        As Range
   Dim rngZelle          As Range
   Dim ngFund            As Range
   Dim strErstAdresse    As String

   Set rngLastCell = Range("B" & Rows.Count).End(xlUp)
   Set rngBereich = Range(Range("B1"), rngLastCell)

   Set rngfund = rngBereich.Find("n")
   rngfund.Offset(0, 1).Resize(1, 2).Value = 0
   strErstAdresse = rngfund.Address
   Do
      Set rngfund = rngBereich.FindNext(rngfund)
      If rngfund.Address = strErstAdresse Then Exit Sub
      rngfund.Offset(0, 1).Resize(1, 2).Value = 0
   Loop
End Sub

Falls in Spalte B auch mal kein "n" vorkommen kann, dann müsste man noch einen Fehlerabfang einfügen.

_________________
Gruss
Eberhard / XL2000
Andreas54
Im Profil kannst Du frei den Rang ändern


Verfasst am:
27. Nov 2012, 09:52
Rufname:

AW: Wenn Dann - AW: Wenn Dann

Nach oben
       Version: Office 2010

Hallo kurochan,

erstmal danke für die schnelle Antwort.

Wie muss ich denn den Code anpassen, wenn ich mehrere Bedingungen habe bei denen 0 in die Datenspalten geschrieben werden soll?
Kann man das auch mit einer "Negativ"-bedingung machen.
z.b.
wenn nicht (x oder y) dann 0.

Gruß,

Andi
kurochan
angelesenes Halbwissen


Verfasst am:
27. Nov 2012, 12:09
Rufname:
Wohnort: bei Heidelberg

AW: Wenn Dann - AW: Wenn Dann

Nach oben
       Version: Office 2010

Hallo Andi,

dann muss man die Zellen in Spalte B einzeln abklappern:
Code:
Sub Wenn_dann()
   Dim lngLastRow        As Long
   Dim i                 As Long

   Application.ScreenUpdating = False
   lngLastRow = Range("A1").End(xlDown).Row
   For i = 1 To lngLastRow
      If Not (Range("B" & i) <> "x" Xor Range("B" & i) <> "y") Then
         Range(Range("C" & i), Range("D" & i)) = 0
      End If
   Next
   Application.ScreenUpdating = True
End Sub

Wenn der Bereich sehr viele Zeilen umfasst und daher zu langsam ist, dann müsste man das mit einem Array machen.

_________________
Gruss
Eberhard / XL2000
Gast



Verfasst am:
28. Nov 2012, 17:54
Rufname:

AW: Wenn Dann - AW: Wenn Dann

Nach oben
       Version: Office 2010

Hi Eberhard,

habe deinen Code angepasst. Funktioniert einwandfrei an einem kleinen Beispiel. Danke hierfür.

Habs dann auf mein eigentliches Problem angewand und da gabs dann die Problematik, dass das Makro >10min läuft. Hab 2000 Zeilen und einen Bereich zum Uberschreiben von 22 Spalten.

Wie macht man das mit den Arrays? Hab ich bis jetzt nur in der Theorie gehört.

Gruß,

Andi
kurochan
angelesenes Halbwissen


Verfasst am:
29. Nov 2012, 10:56
Rufname:
Wohnort: bei Heidelberg


AW: Wenn Dann - AW: Wenn Dann

Nach oben
       Version: Office 2010

Hallo Andi,

Also Bereich A1:V2000. Die Zellen in Spalten C:V sollen ggf. durch Nullen ersetzt werden.
Code:
Sub Wenn_dann()
   Dim vA                As Variant
   Dim Z                 As Long
   Dim S                 As Long
   Dim lngZeilen         As Long
   Dim lngSpalten        As Long
   Dim T                                         '*****
   T = Timer                                     '*****

   vA = Range("A1:V2000")
   lngZeilen = UBound(vA)
   lngSpalten = UBound(vA, 2)

   For Z = 1 To lngZeilen
      If Not (vA(Z, 2) <> "x" Xor vA(Z, 2) <> "y") Then
         For S = 3 To lngSpalten
            vA(Z, S) = 0
         Next
      End If
   Next
   Range("A1:V2000") = vA
   MsgBox Timer - T                              '*****
End Sub


Läuft bei mir in 0,08 sek durch.
Die mit ***** gekennzeichneten Zeilen kannst Du löschen. Sie dienen nur der Anzeige, wie lange der Code braucht.

_________________
Gruss
Eberhard / XL2000
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Excel Tipps