Microsoft Excel

Herbers Excel/VBA-Archiv

VBA Excel Subtraktion in Schleife


Betrifft: VBA Excel Subtraktion in Schleife von: Jan Vogt
Geschrieben am: 18.09.2017 15:24:01

Liebes Forum,
ich arbeite an einer Prozessautomatisierung mit Hilfe von VBA.
Hierfür habe ich den beigefügten Quelltext entwickelt:


Sub test() 
    
  Dim Tab1 As Excel.Worksheet, Tab2 As Excel.Worksheet
  Dim RngU As Range, rngRow As Range
  Dim Wert As String
  Dim Zahl As Variant
  Dim Name As Variant
  Dim FiltIt As Variant
  Set Tab1 = Sheets("Tabelle1")
  Set Tab2 = Sheets("Tabelle 2")
  Dim lang As Integer
  Dim groesse As Integer
  Dim rng As Range
  Dim rngNEW As Range

'
    Sheets("Tabelle2").Activate
        Range("B:Q").Activate
         lang = Range("Q655352").End(xlUp).Row
      
         Set RngU = Range("B2:Q" & lang)
        
         For Each rngRow In RngU.Rows
            Name = rngRow.Cells(1).Value
            Wert = ">" & rngRow.Cells(rngRow.Cells.Count).Value
            Zahl = rngRow.Cells(rngRow.Cells.Count).Value
            
         Sheets("Tabelle1").Activate
         
            If Tab2.AutoFilterMode Then Tab2.AutoFilterMode = False
            
            groesse = Range("Q655352").End(xlUp).Row
            Set rng = Range("C1:Q" & groesse)
                 
                            On Error Resume Next
                            rng.AutoFilter Field:=1, Criteria1:=Name
                            rng.AutoFilter Field:=12, Criteria1:=Wert, Operator:=xlAnd
                            Set rngNEW = rng.Offset(1).Resize(rng.Rows.Count - 1).SpecialCells(  _
 _
_
xlCellTypeVisible)
                                FiltIt = rngNEW.Columns(12).Cells(1).Value
                                FiltIt = FiltIt.Value - Zahl.Value
                            On Error GoTo 0
            Tab1.Select
         Next rngRow


End Sub



Kurz zum Ablauf des Programmteils:

1. Gehe in Tabelle 2 und nehme Wert und Namen
2. Gehe in Tabelle 1
3. Filter nach Namen aus Tabelle 2
4. Nehme Wert aus Tabelle 2 und ziehe ihn von Wert aus Tabelle 1 ab (Überschreibe den alten Wert in Tabelle 1 mit dem Ergebnis
5. Gehe wieder in Tabelle 2 und nehme den nächsten Wert und den nächsten Namen (siehe Schleife)

Ich hoffe, dass mein Quelltext den Großteil der Schritte beherrscht. Ich habe nur Probleme mit der Subtraktion:

Set rngNEW = rng.Offset(1).Resize(rng.Rows.Count - 1).SpecialCells(xlCellTypeVisible)
FiltIt = rngNEW.Columns(12).Cells(1).Value
FiltIt = FiltIt.Value - Zahl.Value
On Error GoTo 0
Tab1.Select
Next rngRow

Das Programm erkennt die Variable Zahl, trotzdem findet die Subtraktion nicht statt.

Hat jemand eine Idee, wie die Subtraktion funktionieren kann?

Über Tipps freue ich mich! Vielen Dank und viele Grüße,Jan

  

Betrifft: AW: VBA Excel Subtraktion in Schleife von: mmat
Geschrieben am: 18.09.2017 17:19:18

Hallo,

das hat doch schon sehr viel Schönes. Und natürlich wird auch abgezogen. Was fehlt ist ein Befehl, der das Ergebnis in die Zelle zurückzuschreibt. Irgendwie sowas:

rngNEW.Columns(12).Cells(1)=FiltIt
Dann funktioniert das vielleicht sogar (wenn das Filtern nach Name zu einem eindeutigen Ergebnis führt ...)

vg, MM


  

Betrifft: AW: VBA Excel Subtraktion in Schleife von: Jan
Geschrieben am: 18.09.2017 19:10:08

Vielen Dank für deine schnelle Rückmeldung!

Ich habe nun Ergänzungen vorgenommen und es funktioniert schon besser, der alte Wert wird ersetzt. Nur leider ist das Ergebnis noch nicht richtig.

If Tab2.AutoFilterMode Then Tab2.AutoFilterMode = False

groesse = Range("Q655352").End(xlUp).Row
Set rng = Range("C1:Q" & groesse)

On Error Resume Next
rng.AutoFilter Field:=1, Criteria1:=Name
rng.AutoFilter Field:=12, Criteria1:=Wert, Operator:=xlAnd
Set rngNEW = rng.Offset(1).Resize(rng.Rows.Count - 1).SpecialCells(xlCellTypeVisible)


FiltIt = rngNEW.Areas(1).Cells(1, 12)
Ergebnis = FiltIt.Value - Zahl.Value
'Range(rngNEW.Columns(12).Cells(1).Value) = Ergebnis

rngNEW.Areas(1).Cells(1, 12).Value = Ergebnis
On Error GoTo 0
Tab1.Select
Next rngRow


Es geht nun denke ich um die Zeile: Ergebnis = FiltIt.Value - Zahl.Value
FiltIt und Zahl entsprichen den richtigen Werten. Nur Ergebnis ist immer 0.

Habr Ihr eine Lösung hierfür?


  

Betrifft: AW: VBA Excel Subtraktion in Schleife von: mmat
Geschrieben am: 20.09.2017 11:36:53

Bist du das mal im Einzelschrittmodus Durchgegangen? Was steht in "Ergebnis"??

Wie ist "Ergebnis" deklariert ??

Sorry, da fällt mir nix ausser allgemeinen Hinweisen ein ...


Beiträge aus den Excel-Beispielen zum Thema "VBA Excel Subtraktion in Schleife"