Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen

Werte aus Matrix in andere Datei und Ergebn zurück | Herbers Excel-Forum


Betrifft: Werte aus Matrix in andere Datei und Ergebn zurück von: Stef@n
Geschrieben am: 18.11.2009 11:56:33

Hallo Herber-Freunde,
ich stehe vor folgender Fragestellung:
Ich habe eine Datei, in der relativ komplexe Berechnungen durchgeführt werden.
Dabei werden in dieser "Quell-Datei" in 2 Zellen (M1 und M5) zahlenwerte erfasst,
und (nach ca 1-2 sekunden) in Zelle M10 ein Wert angezeigt.

Jetzt möchte ich diesen Berechnungsprozess "automatisieren" in dem ich aus einer
weiteren Datei (Matrix-Datei) die Werte für die Zelle M1 und M5 auslese, in die Quelldatei
jeweils eintrage, dann das errechnete Ergebnis in die Matrix-Datei entsprechend eintragen lasse.
Die Matrix-Datei ist wie folgt aufgebaut

Spalte A (A2 bis A1000) Datumswerte - die sollen die die Zelle M1 eingetragen werden
in Zeile 1 (B2 bis AY1) Zahlenwerte von 1 bis 50

Das Makro soll nun z.B. den Wert aus A2 in M1 und B1 in M5 eintragen
und dann das Ergebnis aus Zelle M10 in Zelle B2 eintragen usw
Es sollen halt alle Kombinationen aus dieser Matrix errechnet werden.

Gibts dafür eine Makro-Lösung ?

Freu mich sehr auf eine Antwort :)
Besten Gruß
Stef@n

  

Betrifft: AW: Werte aus Matrix in andere Datei und Ergebn zurück von: fcs
Geschrieben am: 18.11.2009 15:58:10

Hallo Stef@an,


ein entsprechendes Makro sieht dann etwa wie folgt aus, wobei beide Dateien geöffnet sein müssen, bevor das Makro gestartet wird. Die Namen von Dateien und tabellen im Code muss du natürlich anpassen.

Gruß
Franz

Sub MatrixAusfuellen()
  Dim wksMatrix As Worksheet, wksQuelle As Worksheet
  Dim Zeile As Long, Spalte As Long, StatusCalc As Long
  On Error GoTo Fehler
  
  Set wksMatrix = Workbooks("Matrix.xls").Worksheets("Matrix")
  Set wksQuelle = Workbooks("Berechnung.xls").Worksheets("Calculation")
  
  With Application
    StatusCalc = .Calculation
    .Calculation = xlCalculationManual
    .EnableEvents = False
    .ScreenUpdating = False
  End With
  With wksMatrix
    For Zeile = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
      For Spalte = 2 To 51 '(B bis AY)
        Application.StatusBar = "Zeile " & Zeile & " / Spalte " & Spalte & " wird bearbeitet."
        wksQuelle.Range("M1").Value = .Cells(Zeile, 1).Value
        wksQuelle.Range("M5").Value = .Cells(1, Spalte).Value
        wksQuelle.Range("M10").Calculate
        .Cells(Zeile, Spalte).Value = wksQuelle.Range("M10").Value
      Next
    Next
  End With
Fehler:
  With Application
    .StatusBar = False
    StatusCalc = .Calculation
    .Calculation = StatusCalc
    .EnableEvents = True
    .ScreenUpdating = True
  End With
  With Err
    Select Case .Number
      Case 0 'kein fehler
      Case Else
        MsgBox "Fehler-Nr. " & .Number & vbLf & .Description
    End Select
  End With
  MsgBox "Fertig!"
End Sub



  

Betrifft: AW: Werte aus Matrix in andere Datei und Ergebn zurück von: Stef@n
Geschrieben am: 18.11.2009 19:06:54

Hallo Franz
vielen Dank für die schnelle Antwort.
Das Makro läuft (und füllt sämtliche Werte in der Datei Matrix.xls) - jedoch zu schnell :O
Es werden in alle Zellen EIN Wert eingetragen :|
Nachdem die Werte in M1 und M5 in der Datei "Berechnung.xls" eingetragen wurde
sollte das Makro warten, bis der Wert in Zelle M10 ausgerechnet wurde.
Dieses dauert ca 1-2 Sekunden.
Kann man in dem Code eine kleine "Pause" einbauen, die solange wartet
bis die Zelle M10 berechnet wurde ?
Besten Gruß
Stef@n


  

Betrifft: AW: Werte aus Matrix in andere Datei und Ergebn zurück von: Stef@n
Geschrieben am: 18.11.2009 21:17:08

Hallo Franz
irgendwie funktioniert es bei mir leider nicht so wie gewollt
... es werden in der Matrix-Datei in den zu befüllenden zellen ab B2 immer der gleiche Wert eingetragen
Zur Verdeutlichung habe ich mal beide Dateien hochgeladen - die Nomenklatur entsprechend angepasst -

Würd mich sehr freuen, wenn Du dich des Themas nochmal annehmen kannst
Besten Gruß
Stef@n

hier die beiden Dateien als zip
https://www.herber.de/bbs/user/66038.zip


  

Betrifft: AW: Werte aus Matrix in andere Datei und Ergebn zurück von: fcs
Geschrieben am: 19.11.2009 08:19:12

Hallo Stefan,

die Berechnungen in deinem Blatt sind so komplex, dass es nicht ausreicht, nur die Zelle neu zu berechnen. Es muss nach jeder Werteingabe das komplette Blatt neu berechnet werden, was dann auch entsprechend lange dauert.

Du muss nur eine Zeile anpassen.

'        wksQuelle.Range("M10").Calculate                     '### alt
        wksQuelle.Calculate                                   '### neu
Dir ist aber schon klar, dass
2500 Zeilen x 50 Spalten ~f~-->~f ~125000 Berechnungen ergibt und somit die Makrolaufzeit bei ca. 1 s pro Berechnung etwa 125000 2 /3600 s/h = 34,7 h betragen würde.

ggf. solltest du den berechenten Wert noch auf 3 Stellen Runden.
Es werden bedingt durch die Rechengenauigkeit von Excel sonst auch Werte wie
1,4499999999999 statt 1,450
1,23E-12 statt 0
0,3250000000001 statt 0,325
eingetragen.
       .Cells(Zeile, Spalte).Value = _
                Application.WorksheetFunction.Round(wksQuelle.Range("M10").Value, 3) 'neu
'        .Cells(Zeile, Spalte).Value = wksQuelle.Range("M10").Value '### alt

Gruß
Franz


  

Betrifft: AW: Werte aus Matrix in andere Datei und Ergebn zurück von: Stef@n
Geschrieben am: 19.11.2009 19:16:09

Hey Franz
ganz grosse Klasse ! Funktioniert perfekt !
Und auch Danke w des Hinweises "besser abrunden" ... man lernt immer dazu !

Zu den Anzahl der Werte:
Ich werde die Zeilen / Spalten eh noch reduzieren , so dass "nur" ca 10.000 Berechnungen (vermutlich sogar noch weniger) durchgeführt werden müssen.
So kann ich abends vor dem "ins Bett gehen" das Makro in aller Ruhe laufen lassen ;)

Dank Dir sehr für Deine große Hilfe !
Allerbesten Gruß
Stef@n


Beiträge aus den Excel-Beispielen zum Thema "Werte aus Matrix in andere Datei und Ergebn zurück"