Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA code - auswählen welche kolonne und welchen Multiplikationsfaktor nehmen
#1
Hallo an alle,

ich habe einen Makro registriert. Sie ist ein bischen lang, aber er funktioniert.
Musste diese Makro erstellen, weil es eine meiner Aufgaben ist und ich Ihn immer wieder verwenden muss.
Es gibt allerdings einige variablen.
Im VBA code wird immer wieder mit 80 multipliziert und ich beziehe mich auf Kolonne F.
Gibt es die Möglichkeit, dass beim ausführen von meinem Makro mich gefragt wird welche Kolonne ausgewählt werden soll und mit welchen Wert multipliziert werden soll?
Es soll nähmlich nicht immer mit 80 multipliziert werden. Es ist immer unterschiedlich. es könnte sein dass ich mit 100 multiplizieren muss und dann alles geteilt durch 1000 machen muss, weil die Einheit anders ist.

Anbei mein VBA code.
Mein code führt folgende arbeit aus: Er nimmt alle Tageswerte und summiert sie. Es sind insegesamt 96 Werte an einem Tag und ich beziehe mich immer auf einem kompletten Monat. Er summiert aber die tageswerte und die einzelnen summen werden in einer Kolonne von 1-30 oder von 1-31 untereinander aufgelistet und dann mit einem Wert multipliziert.
Genau so bekomme ich den Tageswert den ich benötige. Meine Werte sind kWh. es sind Daten von einem Energie Zähler.

VBA CODE:

Code:
Sub TageswerteMonat()

' Monatsproduktion Tag für Tag. Wenn alle Daten vorhanden sind. also 96 Zellen pro Tag, weil jede 15 minuten daten vorhanden sind

    Range("N6").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[-1]C[-8]:R[94]C[-8])*80"
    Range("N6").Select
    ActiveWindow.SmallScroll Down:=183
    ActiveWindow.ScrollRow = 181
    ActiveWindow.ScrollRow = 177
    ActiveWindow.ScrollRow = 169
    ActiveWindow.ScrollRow = 157
    ActiveWindow.ScrollRow = 148
    ActiveWindow.ScrollRow = 144
    ActiveWindow.ScrollRow = 136
    ActiveWindow.ScrollRow = 107
    ActiveWindow.ScrollRow = 95
    ActiveWindow.ScrollRow = 33
    ActiveWindow.ScrollRow = 1
    Range("N7").Select
    ActiveCell.FormulaR1C1 = "=SUM(f)"
    Range("N7").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[94]C[-8]:R[189]C[-8])"
    Range("N7").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[94]C[-8]:R[189]C[-8])*80"
    Range("N7").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[94]C[-8]:R[189]C[-8])*80"
    Range("N8").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[189]C[-8]:R[285]C[-8])"
    Range("N8").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[189]C[-8]:R[285]C[-8])*80"
    Range("N8").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[189]C[-8]:R[284]C[-8])*80"
    Range("N9").Select
    ActiveWindow.SmallScroll Down:=-9
    Range("N9").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[283]C[-8]:R[379]C[-8])"
    Range("N9").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[283]C[-8]:R[379]C[-8])*80"
    Range("N9").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[284]C[-8]:R[379]C[-8])*80"
    Range("N10").Select
    ActiveWindow.SmallScroll Down:=-9
    Range("N10").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[284]C[-8]:R[379]C[-8])"
    Range("N10").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[284]C[-8]:R[379]C[-8])*80"
    Range("N10").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[283]C[-8]:R[378]C[-8])*80"
    Range("N11").Select
    ActiveWindow.SmallScroll Down:=-12
    Range("N10").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[379]C[-8]:R[474]C[-8])*80"
    Range("N10").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[379]C[-8]:R[474]C[-8])*80"
    Range("N11").Select
    ActiveWindow.SmallScroll Down:=-12
    Range("N11").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[474]C[-8]:R[569]C[-8])*80"
    Range("N11").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[474]C[-8]:R[569]C[-8])*80"
    Range("N12").Select
    ActiveWindow.SmallScroll Down:=-12
    Range("O6").Select
    ActiveCell.FormulaR1C1 = "5"
    Range("P6").Select
    ActiveCell.FormulaR1C1 = "100"
    Range("O7").Select
    ActiveCell.FormulaR1C1 = "101"
    Range("P7").Select
    ActiveCell.FormulaR1C1 = "196"
    Range("O8").Select
    ActiveCell.FormulaR1C1 = "=R[-1]C-R[-2]C"
    Range("O8").Select
    Selection.ClearContents
    ActiveCell.FormulaR1C1 = "=R[-1]C+96"
    Range("P8").Select
    ActiveCell.FormulaR1C1 = "=R[-1]C+96"
    Range("O8").Select
    Selection.AutoFill Destination:=Range("O8:O9"), Type:=xlFillDefault
    Range("O8:O9").Select
    Range("O9").Select
    ActiveCell.FormulaR1C1 = "=R[-1]C+96"
    Range("P8").Select
    Selection.AutoFill Destination:=Range("P8:P36"), Type:=xlFillDefault
    Range("P8:P36").Select
    Range("O9").Select
    Selection.AutoFill Destination:=Range("O9:O36"), Type:=xlFillDefault
    Range("O9:O36").Select
    Range("O38").Select
    ActiveWindow.SmallScroll Down:=-12
    Range("N12").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[569]C[-8]:R[664]C[-8])*80"
    Range("N13").Select
    Columns("N:N").EntireColumn.AutoFit
    Columns("N:N").ColumnWidth = 20.56
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.SmallScroll ToRight:=2
    Columns("O:O").ColumnWidth = 20.67
    Columns("O:O").ColumnWidth = 28.44
    Range("N13").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[664]C[-8]:R[759]C[-8])*80"
    Range("N14").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[759]C[-8]:R[854]C[-8])*80"
    Range("N14").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[759]C[-8]:R[854]C[-8])*80"
    Range("N15").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[854]C[-8]:R[949]C[-8])*80"
    Range("N16").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[949]C[-8]:R[1044]C[-8])*80"
    Range("N17").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[1044]C[-8]:R[1139]C[-8])*80"
    Range("N17").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[1044]C[-8]:R[1139]C[-8])*80"
    Range("N18").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[1139]C[-8]:R[1234]C[-8])*80"
    Range("N19").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[1234]C[-8]:R[1329]C[-8])*80"
    Range("N20").Select
    ActiveWindow.SmallScroll Down:=-3
    Range("N5").Select
    ActiveCell.FormulaR1C1 = "Anlage"
    Range("N20").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[1329]C[-8]:R[1424]C[-8])*80"
    Range("N21").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[1424]C[-8]:R[1519]C[-8])*80"
    Range("N22").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[1519]C[-8]:R[1614]C[-8])*80"
    Range("N23").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[1614]C[-8]:R[1709]C[-8])*80"
    Range("N24").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[1709]C[-8]:R[1804]C[-8])*80"
    Range("N25").Select
    ActiveWindow.SmallScroll Down:=9
    ActiveCell.FormulaR1C1 = "=SUM(R[1804]C[-8]:R[1899]C[-8])*80"
    Range("N26").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[1899]C[-8]:R[1994]C[-8])*80"
    Range("N27").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[1994]C[-8]:R[2089]C[-8])*80"
    Range("N28").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[2089]C[-8]:R[2184]C[-8])*80"
    Range("N28").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[2089]C[-8]:R[2184]C[-8])*80"
    Range("N29").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[2184]C[-8]:R[2279]C[-8])*80"
    Range("N30").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[2279]C[-8]:R[2374]C[-8])*80"
    Range("N31").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[2374]C[-8]:R[2469]C[-8])*80"
    Range("N32").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[2469]C[-8]:R[2564]C[-8])*80"
    Range("N33").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[2564]C[-8]:R[2659]C[-8])*80"
    Range("N34").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[2659]C[-8]:R[2754]C[-8])*80"
    Range("N35").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[2754]C[-8]:R[2849]C[-8])*80"
    Range("N36").Select
    ActiveCell.FormulaR1C1 = "=SUM(R[2849]C[-8]:R[2944]C[-8])*80"
    Range("N37").Select
    ActiveWindow.SmallScroll Down:=-6
    Range("N5").Select
    ActiveCell.FormulaR1C1 = "Anlage k = 80"
    Range("N5").Select
    
End Sub

Anbei Beispiele.


Angehängte Dateien
.xls   Testdatei.xls (Größe: 184,5 KB / Downloads: 4)
Antworten Top
#2
Hallo,

am Anfang des Makros kann man mit einer " inputbox" eine String-Variable eingeben, z.B. mit Komma getrennt den Faktor und die Spallte. Dies kann später in die Formel eingebaut werden.

mfg

(nach einer kurzen Durchsicht war mein Eindruck, dass meine Art zu programmieren so unterschiedlich ist, dass ich nicht mehr beitragen kann)
Antworten Top
#3
Ok, danke. Ich werde mich diesbezüglich genauer informieren. Selbst programmieren muss ich erst noch genauer lernen. Meine Makro wurde aufgenommen.
Als habe eine registration gestartet und die sequenz die ich benötige durchgeführt.
Sicherlich kann mein VBA code irgendwie gekürtzt werden und verbessert.

Könnten sie mir vielleicht bitte den genauen tex mitteilen der eingefügt werden muss. Also den code den ich in meinem Makro integrieren muss?

MFG
Streber
Antworten Top
#4
Hallo an alle,

kann mir vielleicht noch jemand weiterhelefen?
Es würde ein Beispiel genügen. Ich integriere es dan selbst in meinem makro.
Würde mir sehr geholfen sein.

MFG
Streber
Antworten Top
#5
Hallo,

ist Dir nicht bekannt, dass Strebern nicht gerne geholfen wird? :05: 

Spaß bei Seite, unten den Vorschlag von Fennek in Dein Code eingearbeitet.

An den Anfang Deines Codes sind die Zeilen zwischen den Rauten (#) dazugekommen und eine Zeile mit Formel und Rauten am Ende wurde angepasst.
Siehe auch Kommentar in dieser Zeile.


Code:
Sub TageswerteMonat()

' Monatsproduktion Tag für Tag. Wenn alle Daten vorhanden sind. also 96 Zellen pro Tag, weil jede 15 minuten daten vorhanden sind
 '#######################################
 Dim z
 z = Application.InputBox(prompt:="Bitte eine Zahl eingeben.", Title:="Eingabe Zahl", Type:=1)
 If z = "" Then
   MsgBox "Sie haben keine Zahl angegeben. Der Vorgang wird abgebrochen!", vbOKOnly, "HINWEIS"
   Exit Sub
 End If
 '#######################################
   Range("N6").Select
   ActiveCell.FormulaR1C1 = "=SUM(R[-1]C[-8]:R[94]C[-8])*" & z 'untere Formeln wie hier anpassen ###########
   Range("N6").Select
.............restlicher Code wie gehabt nur mit Anpassungen der Formeln
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • Streber
Antworten Top
#6
Auch Hallo,

das ganze mit deinem Code ausgearbeitet (einiges entfernt). Ist aber ungetestet.

Code:
Sub TageswerteMonat()
    'Variablendekleration
    Dim lngWert As Long, lngSpalte As Long
    Dim rngSpalte As Range
    
    'Abfrage nach der Kolonne
    Set rngSpalte = Application.InputBox("Welche Kolonne wollen Sie nehmen?", "Kolonne", , "$F:$F", Type:=8)
    'Berechnung der Spaltendifferenz zur Spalte N
    lngSpalte = rngSpalte.Column - 14
    'Multiplikator
    lngWert = Application.InputBox("Mit welchen Wert wollen Sie multiplizieren?", "Wertabfrage", Type:=1)
' Monatsproduktion Tag für Tag. Wenn alle Daten vorhanden sind. also 96 Zellen pro Tag, weil jede 15 minuten daten vorhanden sind

    Range("N6").FormulaR1C1 = "=SUM(R[-1]C[" & lngSpalte & "]:R[94]C[" & lngSpalte & "])" * lngWert
    Range("N7").FormulaR1C1 = "=SUM(R[94]C[" & lngSpalte & "]:R[189]C[" & lngSpalte & "])" * lngWert
    Range("N8").FormulaR1C1 = "=SUM(R[189]C[" & lngSpalte & "]:R[284]C[" & lngSpalte & "])" * lngWert
    Range("N9").FormulaR1C1 = "=SUM(R[284]C[" & lngSpalte & "]:R[379]C[" & lngSpalte & "])" * lngWert
    Range("N10").FormulaR1C1 = "=SUM(R[379]C[" & lngSpalte & "]:R[474]C[" & lngSpalte & "])" * lngWert
    Range("N11").FormulaR1C1 = "=SUM(R[474]C[" & lngSpalte & "]:R[569]C[" & lngSpalte & "])" * lngWert
    Range("O6").Value = "5"
    Range("P6").Value = "100"
    Range("O7").Value = "101"
    Range("P7").Value = "196"
    Range("O8").FormulaR1C1 = "=R[-1]C+96"
    Range("P8").FormulaR1C1 = "=R[-1]C+96"
    Range("O8").AutoFill Destination:=Range("O8:O9"), Type:=xlFillDefault
    Range("O9").FormulaR1C1 = "=R[-1]C+96"
    Range("P8").AutoFill Destination:=Range("P8Tongue36"), Type:=xlFillDefault 'ob der Rangebereich paßt?
    Range("O9").AutoFill Destination:=Range("O9:O36"), Type:=xlFillDefault
    Range("N12").FormulaR1C1 = "=SUM(R[569]C[" & lngSpalte & "]:R[664]C[" & lngSpalte & "])" * lngWert
    Columns("N:N").ColumnWidth = 20.56
    Columns("O:O").ColumnWidth = 28.44
    Range("N13").FormulaR1C1 = "=SUM(R[664]C[" & lngSpalte & "]:R[759]C[" & lngSpalte & "])" * lngWert
    Range("N14").FormulaR1C1 = "=SUM(R[759]C[" & lngSpalte & "]:R[854]C[" & lngSpalte & "])" * lngWert
    Range("N15").FormulaR1C1 = "=SUM(R[854]C[" & lngSpalte & "]:R[949]C[" & lngSpalte & "])" * lngWert
    Range("N16").FormulaR1C1 = "=SUM(R[949]C[" & lngSpalte & "]:R[1044]C[" & lngSpalte & "])" * lngWert
    Range("N17").FormulaR1C1 = "=SUM(R[1044]C[" & lngSpalte & "]:R[1139]C[" & lngSpalte & "])" * lngWert
    Range("N18").FormulaR1C1 = "=SUM(R[1139]C[" & lngSpalte & "]:R[1234]C[" & lngSpalte & "])" * lngWert
    Range("N19").FormulaR1C1 = "=SUM(R[1234]C[" & lngSpalte & "]:R[1329]C[" & lngSpalte & "])" * lngWert
    Range("N5").Value = "Anlage"
    Range("N20").FormulaR1C1 = "=SUM(R[1329]C[" & lngSpalte & "]:R[1424]C[" & lngSpalte & "])" * lngWert
    Range("N21").FormulaR1C1 = "=SUM(R[1424]C[" & lngSpalte & "]:R[1519]C[" & lngSpalte & "])" * lngWert
    Range("N22").FormulaR1C1 = "=SUM(R[1519]C[" & lngSpalte & "]:R[1614]C[" & lngSpalte & "])" * lngWert
    Range("N23").FormulaR1C1 = "=SUM(R[1614]C[" & lngSpalte & "]:R[1709]C[" & lngSpalte & "])" * lngWert
    Range("N24").FormulaR1C1 = "=SUM(R[1709]C[" & lngSpalte & "]:R[1804]C[" & lngSpalte & "])" * lngWert
    Range("N25").FormulaR1C1 = "=SUM(R[1804]C[" & lngSpalte & "]:R[1899]C[" & lngSpalte & "])" * lngWert
    Range("N26").FormulaR1C1 = "=SUM(R[1899]C[" & lngSpalte & "]:R[1994]C[" & lngSpalte & "])" * lngWert
    Range("N27").FormulaR1C1 = "=SUM(R[1994]C[" & lngSpalte & "]:R[2089]C[" & lngSpalte & "])" * lngWert
    Range("N28").FormulaR1C1 = "=SUM(R[2089]C[" & lngSpalte & "]:R[2184]C[" & lngSpalte & "])" * lngWert
    Range("N28").FormulaR1C1 = "=SUM(R[2089]C[" & lngSpalte & "]:R[2184]C[" & lngSpalte & "])" * lngWert
    Range("N29").FormulaR1C1 = "=SUM(R[2184]C[" & lngSpalte & "]:R[2279]C[" & lngSpalte & "])" * lngWert
    Range("N30").FormulaR1C1 = "=SUM(R[2279]C[" & lngSpalte & "]:R[2374]C[" & lngSpalte & "])" * lngWert
    Range("N31").FormulaR1C1 = "=SUM(R[2374]C[" & lngSpalte & "]:R[2469]C[" & lngSpalte & "])" * lngWert
    Range("N32").FormulaR1C1 = "=SUM(R[2469]C[" & lngSpalte & "]:R[2564]C[" & lngSpalte & "])" * lngWert
    Range("N33").FormulaR1C1 = "=SUM(R[2564]C[" & lngSpalte & "]:R[2659]C[" & lngSpalte & "])" * lngWert
    Range("N34").FormulaR1C1 = "=SUM(R[2659]C[" & lngSpalte & "]:R[2754]C[" & lngSpalte & "])" * lngWert
    Range("N35").FormulaR1C1 = "=SUM(R[2754]C[" & lngSpalte & "]:R[2849]C[" & lngSpalte & "])" * lngWert
    Range("N36").FormulaR1C1 = "=SUM(R[2849]C[" & lngSpalte & "]:R[2944]C[" & lngSpalte & "])" * lngWert
    Range("N5").Value = "Anlage k = 80"
    
End Sub
Gruß Stefan
Win 10 / Office 2016
[-] Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:
  • Streber
Antworten Top
#7
Hallo Stefan,


wusste ich doch, dass ich noch etwas übersehen hatte.
Trifft sich aber Gut, dass wir gerade zur gleichen Zeit an der Lösung saßen. :15:
Gruß Atilla
Antworten Top
#8
Hallo atilla Hallo Steffl,

vielen Dank Ihr konntet mir sehr weiterhelefen.
Ich konnte mittels eurer code mein Makro so ausbessern, dass es jetzt so funktioniert wie ich es wünsche.

Mit freundlichen Grüßen

Streber
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste