Excel: VBA Denkanstoss

Althir81

Lieutenant
Registriert
Dez. 2002
Beiträge
537
Hallo Community,

habe folgenden Sachverhalt:

1602234852302.png


• Die Werte Tau und Bi werden vom User im Blauen-Bereich untereinander eingetragen.
• Die Werte müssen dann so oft wie in "Anz Zeilen" oben Rechts im gelben Bereich eingefügt werden
• Dann müssen die Werte, Zylinder- Kern, Mantel, Kal. Mitteltemp, Platte- Kern, Mantel in die jeweilige Zeile kopiert werden bevor er die nächsten Werte kopiert...

Das ganze hinter einem Button...

Ich bräuchte gerade nur mal einen Denkanstoss, hab einfach den Kopf gerade zu voll und finde den Einstieg nicht...

Danke & Gruß
Oliver
Ergänzung ()

Code:
Sub Test2()
'
' Test2 Makro
'

'
    Range("C21").Select
    Selection.Copy
    Range("I8").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("D21").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("I9").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("I10").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("E21").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("I11").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("F21").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("I12").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("G21").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("I13").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("I21").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("I14").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("J21").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A1").Select
End Sub

Dies jetzt dann noch in einer Schleife Anzahl aus Zelle B17...

Wäre echt denkbar, bin dem ganzen eigentlich soweit mächtig heute macht nur mein Kopf dicht...
 
Zuletzt bearbeitet:
Ich verstehe nicht ganz was das ist? Ist das ein iteratives verfahren um Temperaturänderungen zu simulieren?

Wenn ja braucht man kein Makro. Es fehlen einfach die Startwerte.
 
Ja so etwas in die Richtung....

Die Startwerte sollen ja untereinanden (TAU und BI) im blauen Bereich vom Benutzer eingegeben werden....

TAU und BI sollen im blauen Bereich eingetragen werden, inkl. der Anzahl Durchläufe (B17) dann soll er die Werte aus dem blauen Bereich nach oben rechts kopieren und die ergebnisse in die jeweilie Zeile neben dem blauen bereich einfügen....

Sorry, echt nen schlechter Tag und einfach zu viel um die Ohren....
 
Bitte versuch dich einzulesen, wie man das ohne .Select macht. Das ist a) schlecht lesbar und b) fehleranfällig

Das Kopieren von den Werten geht auch einfach nur mit Cells(x,y).value = Cells(x,y).value

Nachdem es so aussieht, als ob du einfach nur die blauen Startwerte nach oben kopierst und die Formelergebnisse wieder runter, würde ich vorschlagen, die Formel einmal in die Zeile 21 zu setzen und dann via Makro auf die letzte genutzte Zeile runterzuziehen.
 
Wurzelsepp29 schrieb:
Bitte versuch dich einzulesen, wie man das ohne .Select macht. Das ist a) schlecht lesbar und b) fehleranfällig

Das Kopieren von den Werten geht auch einfach nur mit Cells(x,y).value = Cells(x,y).value

Nachdem es so aussieht, als ob du einfach nur die blauen Startwerte nach oben kopierst und die Formelergebnisse wieder runter, würde ich vorschlagen, die Formel einmal in die Zeile 21 zu setzen und dann via Makro auf die letzte genutzte Zeile runterzuziehen.

Danke, ja ist mir bewusst... Aufgrund der Eile ist .select in Ordnung... Aber ich schreibs jetzt mal mit Cells(x,y).value = Cells(x,y).value ....

Danke & Gruß

PS: Wenn mir jemand hilft, spendier ich gern ne Pizza ;-)
 
Die Startwerte dürfen aber nur ein mal vorkommen. In Zeile 1. Alle weiteren Zeilen beziehen sich dann auf die jeweils obere Zeile.

Ich nehme an, dass es eine Zeititeration ist? dann wird dT gewählt, zB 0,1 sec.

Beispiel

A1=0s B1=20°C (Startwert)
A2=0.1s. B2= B1 - (Temperaturänderung in dT abhängig von B1 und Umgebungstemperatur)
A3=0.2s B3= B2 - (Temperaturänderung in dT abhängig von B2 und Umgebungstemperatur)
 
Wurzelsepp29 schrieb:
Bitte versuch dich einzulesen, wie man das ohne .Select macht. Das ist a) schlecht lesbar und b) fehleranfällig

Das Kopieren von den Werten geht auch einfach nur mit Cells(x,y).value = Cells(x,y).value

Nachdem es so aussieht, als ob du einfach nur die blauen Startwerte nach oben kopierst und die Formelergebnisse wieder runter, würde ich vorschlagen, die Formel einmal in die Zeile 21 zu setzen und dann via Makro auf die letzte genutzte Zeile runterzuziehen.

Formel Zelle 21 hört sich gut an.... Ich bin froh wenn der Tag heute um ist xD...
 
Ja, bau es erstmal ohne Makro für 2 Zeilen nur mit den entsprechenden Formeln und dann kannst Du es per Range.filldown nach unten ziehen.
Die Range halt entsprechenden begrenzen, in dem du dir vom Makro die letzte beschrieben Zeile in Spalte C ausgeben lässt: Cells(.rows.count,3).end(xlup).row
 
Wurzelsepp29 schrieb:
Ja, bau es erstmal ohne Makro für 2 Zeilen nur mit den entsprechenden Formeln und dann kannst Du es per Range.filldown nach unten ziehen.
Die Range halt entsprechenden begrenzen, in dem du dir vom Makro die letzte beschrieben Zeile in Spalte C ausgeben lässt: Cells(.rows.count,3).end(xlup).row

Sorry, muss nochmal blöd nachfragen.... Wahrscheinlich ist das ganze auch schwer nachzuvollziehen...

I8 und I9 sollen ja aus C21 und D21 kopiert werden, bevor die Werte aus I10-I15 in Zelle E21,F21,G21,I21,J21,K21 kopiert werden....

Wie soll ich das mit einer Formel realisieren, wenn die Werte erst eingetragen werden müssen, damit er das richtige kopiert?!
Ergänzung ()

Ich denke ich brauche doch Makros...

Code:
Sub Makro()
 
Worksheets("Start").Range("I10:I14").Copy _
    Destination:=Worksheets("Start").Range("E23:K23")

 
End Sub

Er kopiert so die Zeilen natürlich untereinander und fügt diese untereinander ein.... Wie kann ich die Werte nicht untereinander sondern nebeneinander einfügen lassen?!
Ergänzung ()

Code:
Sub Makro()
Sub Makro()

Worksheets("Start").Range("C21").Copy _
    Destination:=Worksheets("Start").Range("TauRechnen")
  
Worksheets("Start").Range("D21").Copy _
    Destination:=Worksheets("Start").Range("BiRechnen")
  
Worksheets("Start").Range("ErgZylKern").Copy _
    Destination:=Worksheets("Start").Range("E23")

Worksheets("Start").Range("ErgZylO").Copy _
    Destination:=Worksheets("Start").Range("F23")
  
Worksheets("Start").Range("ErgZylMit").Copy _
    Destination:=Worksheets("Start").Range("G23")
  
Worksheets("Start").Range("ErgPlaK").Copy _
    Destination:=Worksheets("Start").Range("I23")
  
Worksheets("Start").Range("ErgPlaO").Copy _
    Destination:=Worksheets("Start").Range("J23")
  
End Sub

Hab es so gelöst...
Ergänzung ()

Lösung durch Wurzelsepp:


Code:
Option Explicit

Public Sub start()
Dim lastRow As Long
Dim i As Long

With ThisWorkbook.Worksheets("Start")

    lastRow = .Cells(.Rows.Count, 3).End(xlUp).Row  'Berechne letzte benutzte Zeile in Spalte C

    For i = 21 To lastRow 'Für alle Zeilen bis zur letzten aktiven
        .Cells(8, 9).Value = .Cells(i, 3).Value 'Kopiere Tau Input in Berechnung
        .Cells(9, 9).Value = .Cells(i, 4).Value 'Kopiere Bi Input in Berechnung
        
        .Cells(i, 5).Value = .Cells(10, 9).Value    'Kopiere Ergebnis Zyl Kern
        .Cells(i, 6).Value = .Cells(11, 9).Value    'Kopiere Ergebnis Zyl Mantel
        .Cells(i, 7).Value = .Cells(12, 9).Value    'usw.
        .Cells(i, 9).Value = .Cells(13, 9).Value
        .Cells(i, 10).Value = .Cells(14, 9).Value
        .Cells(i, 11).Value = .Cells(15, 9).Value  'Kal.  Mitteltemp (aktuell leer)
        
    Next i

End With
End Sub
 
Zuletzt bearbeitet:
Verweisen die Formeln in I10:I15 auf die Tabelle E21:J...?
Oder besteht anderweitig irgendein Querverweis auf zuvor berechnete Werte?
Rein vom Ablauf her sehe ich gerade keinen Grund VBA ueberhaupt einzusetzen ...
Selbst bei einer Iteration besteht eigentlich kein Grund.


Ansonsten ein paar Hinweise, auch wenn du das schon eigentlich geloest hast:
Du kannst mehrere Zellen kopieren und auch transponiert einfuegen.

Code:
    .Range("i10:i12").Copy
    .Cells(i, 5).PasteSpecial Paste:=xlPasteValues, Transpose:=True
oder
Code:
.Range(.Cells(11, 9), .Cells(15, 9)).Value = .Range(.Cells(11, 8), .Cells(15, 8)).Value

Statt das ueber Worksheets zu referieren, halte ich es persoenlich sinnvoller ein Blatt ueber die VBA-Bezeichnung anzusprechen. Die Bezeichnung kann auch angepasst werden.
Vorteil: In der Excel Ueberflaeche darf der Name geaendert werden, ohne das dadurch Problem entstehen.
 

Anhänge

  • VBA.PNG
    VBA.PNG
    18,1 KB · Aufrufe: 299
Zurück
Oben