Microsoft Excel

Herbers Excel/VBA-Archiv

Bestimmte Werte ins Negativ setzen | Herbers Excel-Forum


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 Sub
Gruß, 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


Beiträge aus den Excel-Beispielen zum Thema "Bestimmte Werte ins Negativ setzen"