Betrifft: Bestimmte Werte ins Negativ setzen
von: Sascha
Geschrieben am: 26.01.2010 13:06:58
Hallo,
kann ich folgendes mit VBA lösen?
Wenn ich in der Spalte B1 eine Belegnummer beginnent mit "GUT" oder "AV" stehen habe, dann soll der Wert in G1 ins negative gesetzt werden (G1*-1).
Hab mal wieder keine Idee wie dies lösen kann.
Vorab vielen Dank für Eure Ideen oder Anregungen.
Gruß
Sascha
Betrifft: Zeile per Autofilter filtern und Werte negieren
von: NoNet
Geschrieben am: 26.01.2010 14:18:55
Hallo Sascha,
hier eine Lösungsmöglichkeit per Autofilter :
Sub ZellenNegierenPerAutofilterAuswahl() Dim rngZelle As Range ActiveSheet.[B1].AutoFilter Field:=2, Criteria1:="=GUT*", Operator:=xlOr, _ Criteria2:="=AV*" For Each rngZelle In Range("G1:G" & Cells(Rows.Count, 7).End(xlUp).Row).SpecialCells( _ xlCellTypeVisible) If IsNumeric(rngZelle.Value) Then rngZelle.Value = rngZelle.Value * -1 Next ActiveSheet.AutoFilterMode = False 'Autofilter wieder löschen End SubGruß, NoNet
Betrifft: AW: Bestimmte Werte ins Negativ setzen
von: fcs
Geschrieben am: 26.01.2010 14:24:27
Hallo Sascha,
zum Beispiel so
Gruß
Franz
Sub InvertSpalteG() Dim Zeile As Long Dim wks As Worksheet Set wks = ActiveSheet Application.ScreenUpdating = False With wks 'Zeilen Spalte B bis letzte Zeile mit Daten bearbeiten For Zeile = 1 To .Cells(.Rows.Count, 2).End(xlUp).Row If Left(.Cells(Zeile, 2), 3) = "GUT" Or Left(.Cells(Zeile, 2), 2) = "AV" Then 'In Spalte G Wert invertieren If IsNumeric(.Cells(Zeile, 7).Value) Then .Cells(Zeile, 7).Value = .Cells(Zeile, 7).Value * (-1) End If End If Next End With Application.ScreenUpdating = True End Sub
Betrifft: AW: Bestimmte Werte ins Negativ setzen
von: Sascha
Geschrieben am: 26.01.2010 16:43:39
Hallo Franz,
genau so hatte ich mir das vorgestellt.
Vielen Dank
Sascha
Betrifft: Problem - Code von Nonet und FCS
von: Beate Schmitz
Geschrieben am: 26.01.2010 20:09:29
Hallo NoNet und fcs,
für beide eure Codes gilt: Wenn man ihn zweimal laufen lässt werden die Werte wieder positiv.
Das kann dann zum Problem werden, wenn in Spalte B nach erstem Makrolauf noch Zeilen mit "GUT" und "AV" angehangen werden. Beim zweiten Makrolauf werden diese dann in G negativ, aber die, die vorher dort (nach dem ersten Lauf) negativ waren, werden wieder positiv.
Es müsste also was in den Code eingebaut werden, der die bereits Negativen auch negativ lässt.
Gruß,
Beate
Betrifft: rngZelle.Value=Abs(rngZelle.Value) * -1
von: NoNet
Geschrieben am: 26.01.2010 20:27:24
Hallihallo Beate :-),
grundsätzlich hast Du Recht, aber in der Aufgabenstellung stand ja ausdrücklich, dass die Werte mit -1 multipliziert werden sollten - unabhängig vom aktuellen Wert. Wenn also zuvor schon negative Werte in der Spalte standen, würden diese zu positiven Werten und vv. Die "Negation der Negation" wurde ja nirgends explizit ausgeschlossen...
Falls es so sein sollte wie von Dir angedeutet, könnte man das z.B. so lösen :
rngZelle.Value=Abs(rngZelle.Value) * -1
oder auch so : rngZelle.Value = rngZelle.Value * Iif(rngZelle.Value<0, 1, -1)
Gruß, NoNet
Betrifft: AW: rngZelle.Value=Abs(rngZelle.Value) * -1
von: Beate Schmitz
Geschrieben am: 26.01.2010 22:07:26
Hallo Nonet,
die erstere Lösung kann ich mir nicht als gewünschtes Ergebnis vorstellen, auch wenn nicht so klar erfragt, weil die Auswirkung vielleicht noch unbedacht war.
Danke für deine Antwort.
Grüße,
Beate