Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1268to1272
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Verbessterte Makro anpassen

Verbessterte Makro anpassen
mehmet
Hallo Forum,
das folgende Makro soll erweitert werden - ein herzlichen Dank noch mal an Franc:
Sub Uebertragen_Apfel_neu()
Set c = Range("W:W").Find("Apfel", LookIn:=xlValues)
If Not c Is Nothing Then
If Cells(c.Row, 4) = "3HBK1" And Cells(c.Row, 5) = "3HBK2" Then
For i = c.Row + 1 To Cells(65000, 23).End(xlUp).Row
If Cells(i, 23)  "" And IsNumeric(Cells(i, 23)) = True Then
Cells(i, 4) = Cells(i, 4) + WorksheetFunction.RoundUp(Cells(i, 23) / 2, 0)
Cells(i, 5) = Cells(i, 5) + WorksheetFunction.RoundDown(Cells(i, 23) / 2, 0)
If Cells(i, 5) = "0" Then Cells(i, 5) = ""
End If
Next
Else
MsgBox """3HBK1"" und/oder ""3HBK2"" nicht gefunden."
End If
Else
MsgBox """Apfel"" wurde nicht gefunden."
End If
End Sub

Meine Erweiterung sollte jetzt von 2 auf 6 Spalten sein:
Sub Uebertragen_Any_Meal()
Set c = Range("ah:ah").Find("Any Meal", LookIn:=xlValues)
If Not c Is Nothing Then
If Cells(c.Row, 6) = "3HM1" And Cells(c.Row, 7) = "3HM2" Then
For i = c.Row + 1 To Cells(65000, 34).End(xlUp).Row
If Cells(i, 34)  "" And IsNumeric(Cells(i, 34)) = True Then
Cells(i, 6) = Cells(i, 6).Formula = "=" & Cells(i, 34).Value / 6
Cells(i, 7) = Cells(i, 7).Formula = "=" & Cells(i, 34).Value / 6
Cells(i, 8) = Cells(i, 8).Formula = "=" & Cells(i, 34).Value / 6
Cells(i, 9) = Cells(i, 9).Formula = "=" & Cells(i, 34).Value / 6
Cells(i, 10) = Cells(i, 10).Formula = "=" & Cells(i, 34).Value / 6
Cells(i, 11) = Cells(i, 11).Formula = "=" & Cells(i, 34).Value / 6
If Cells(i, 5) = "0" Then Cells(i, 5) = "" 'wofür steht das
End If
Next
Else
MsgBox """3HM1"" und/oder ""3HM2"" nicht gefunden."
End If
Else
MsgBox """Any Meal"" wurde nicht gefunden."
End If
End Sub

Leider kriege ich es nicht hin bzw. bekomme eine Fehlermeldung
Ferner sollte in den Lösungszellen die vorheriege Zahl stehen, und wenn
eine Zahl hinzukommt, soll man es nachvoll ziehen können, z.B.:
vorher Stand 2, hinzu kommt 1, dann soll in der Zelle "=2+1" mit Value 3 stehen.
Dank im Voraus
Gruss
https://www.herber.de/bbs/user/80938.xls

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Verbessterte Makro anpassen
11.07.2012 23:57:55
fcs
Hallo Mehmet,
probiere es mal mit folgender Lösung.
Gruß
Franz
Sub Uebertragen_Any_Meal()
Set c = Range("ah:ah").Find("Any Meal", LookIn:=xlValues)
If Not c Is Nothing Then
If Cells(c.Row, 6) = "3HM1" And Cells(c.Row, 7) = "3HM2" Then
For i = c.Row + 1 To Cells(65000, 34).End(xlUp).Row
If Cells(i, 34)  "" And IsNumeric(Cells(i, 34)) = True Then
For Spalte = 6 To 11
With Cells(i, Spalte)
If .HasFormula = True Then
.FormulaLocal = .FormulaLocal & " + " & Cells(i, 34).Value / 6
Else
.FormulaLocal = "=" & .Value & " + " & Cells(i, 34).Value / 6
End If
End With
Next
If Cells(i, 5) = "0" Then Cells(i, 5) = "" 'wofür steht das
End If
Next
Else
MsgBox """3HM1"" und/oder ""3HM2"" nicht gefunden."
End If
Else
MsgBox """Any Meal"" wurde nicht gefunden."
End If
End Sub

Anzeige
AW: Verbessterte Makro anpassen
12.07.2012 08:12:39
mehmet
Hallo Franz,
herzlichen Dank.
Es funktioniert. Aber wenn ich die Summe von F6:F8 nehme, sollte es 8 sein.
Wenn ich aber das Makro laufen lasse und anschliessend summiere (Bsp) F6:F8 bekomme ich 9.
Ich denke, das Problem liegt im Auf-/Abruden.
Es sollen immer ganze Zahlen genommen werden.
Dank Dir
Gruss
AW: Verbessterte Makro anpassen
13.07.2012 07:40:37
fcs
Hallo Mehmet,
wenn man runden will, dann muss man es eben auch machen.
Gruß
Franz
anzupassende Zeilen:
                  If .HasFormula = True Then
.FormulaLocal = .FormulaLocal & " + " & VBA.Round(Cells(i, 34).Value / 6, 0) _
Else
.FormulaLocal = "=" & .Value & " + " & VBA.Round(Cells(i, 34).Value / 6, 0)
End If

Anzeige
AW: Verbessterte Makro anpassen
13.07.2012 09:31:40
mehmet
Hallo Franz,
ergebnis klappt nicht so ganz wenn ich Makro laufen lassen.
Wenn der Wert in AnyMeal Spalte kleiner gleich 3 ist, dann werden diese Werte nicht übertragen.
Wenn der Wert in AnyMeal Splalte 4 ist, dann bekommt jede Spalte (F:K) ein Wert von 1 statt,
aber es sollte ja 4 sein, was zu verteilen ist. Oder wenn 9 steht, dann werden 2 verteilt, was
in der Summe 12 macht statt 9.
Musterlösung (Zeile 21:31): https://www.herber.de/bbs/user/80963.xls
Dank Dir
Gruss
AW: Verbessterte Makro anpassen
13.07.2012 22:09:17
fcs
Hallo Mehmet,
ich hab den Ansatzt für die Berechnung nochmals angepasst.
In jedem Schleifendurchlauf wird jetzt der verbleibende Rest durch die Anzahl der noch nicht ausgefüllten Spalten dividiert und aufgerundet.
Das Ergebnis wird dann als Plus in die Formel eingebaut.
Zumindest mit deinen Beispielzahlen funktioniert es.
Gruß
Franz
Sub Uebertragen_Any_Meal3()
Dim c As Range
Dim v3HM As Double, vAnyMeal As Double, vRest As Double
Set c = Range("ah:ah").Find("Any Meal", LookIn:=xlValues)
If Not c Is Nothing Then
If Cells(c.Row, 6) = "3HM1" And Cells(c.Row, 7) = "3HM2" Then
For i = c.Row + 1 To Cells(65000, 34).End(xlUp).Row
If Cells(i, 34)  "" And IsNumeric(Cells(i, 34)) = True Then
vAnyMeal = Cells(i, 34).Value
vRest = vAnyMeal
For Spalte = 6 To 11
v3HM = Application.WorksheetFunction.RoundUp(vRest / (11 - Spalte + 1), 0)
With Cells(i, Spalte)
If .HasFormula = True Then
.FormulaLocal = .FormulaLocal & " + " & v3HM
Else
.FormulaLocal = "=" & IIf(IsEmpty(.Value), 0, .Value) & " + " & v3HM
End If
End With
vRest = VBA.Round(vRest - v3HM, 0)
If vRest = 0 Then Exit For
Next
If Cells(i, 5) = "0" Then Cells(i, 5) = "" 'wofür steht das
End If
Next
Else
MsgBox """3HM1"" und/oder ""3HM2"" nicht gefunden."
End If
Else
MsgBox """Any Meal"" wurde nicht gefunden."
End If
End Sub

Anzeige
funktioniert Perfekt, Dank Dir. Gruss oT.
14.07.2012 02:36:32
mehmet
.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige