Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
732to736
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
732to736
732to736
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Matrixspeicherung

Matrixspeicherung
20.02.2006 11:17:52
petra
Hallo,
habe folgenden Makro (der so natürlich noch nicht funktioniert und auch noch nicht das macht was er machen soll):

Sub kopieren()
Dim rngfind As Range
With Sheets("Speicher")
Set rngfind = .Rows("3").Find _
(what:=Sheets("Input").Range("B1"), after:=.Range("A1"), LookIn:=xlValues)
End With
If rngfind Is Nothing Then
MsgBox "nichts gefunden"
Exit Sub
Else
Range("E5:E318").Copy rngfind.Offset(0, 1)
End If
End Sub

Was ich suche ist ein Makro der mir in Abhängigkeit von verschiedenen Parametern Werte in einem Speicher an der entsprechenden Stelle abspeichert.
und zwar findet ihr unter https://www.herber.de/bbs/user/31230.xls eine beispieldatei, die eine bessere vorstellung geben soll, was das Makro können soll.
im grunde möchte ich per schaltfläche die Werte im orangen bereich in den Speicher an der richtigen Stelle abspeichern. Beeinflusst wird der Zellenbereich durch die Zellen A5:A35 und B1 im Tabellenblatt Input. A5:A35 können sich je nach abfrage verändern. manchmal stehen auch nur Werte von A5 bis A32 drin. also nicht immer bis A35. das muss irgendwie auch berücksichtigt werden, da ansonsten die gefahr besteht, daten zu überschreiben.
Der Speicher ist in einer Matrix aufgebaut. Der Makro muss also im Speicher die entsprechenden Werte in Spalte A finden und die entsprechende Zeile in 5.
Insgesamt hat der Speicher einen Umfang von A5:AM318.
Zur info: es müssen nicht überall Werte im orangen Bereich stehen.
kann mir jemand helfen?
lg petra

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Matrixspeicherung
20.02.2006 14:24:30
Martin Bolleter
Hallo Petra
ich habe mir deine Beispieldatei angesehen, aber so ganz verstehe ich es noch nicht. Insbesondere kann ich nicht recht nachvollziehen, was dein Beispielmakro tut.
Ich könnte mir folgendes vorstellen:
Im Sheet "Input", Zelle B1 steht jeweils die Spalte (als Buchstabe), in der im Sheet "Speicher" zu schreiben ist.
Zu jeder Zelle im Bereich G5 bis G35 steht in jeweils in Spalte A die zugehörige Zeilen-Nr für den Speicherort in "Speicher", womit die genaue Adresse gegeben wäre.
Eine For..To Schleife könnte nun den Bereich G5 bis G35 durchlaufen und wenn eine Zelle nicht leer ist, den Inhalt nach "Speicher" kopieren. Bsp: in Zelle B1 steht "B", und Zelle G 10 ist nicht leer, dann wird der Inhalt nach Blatt "Speicher", Spalte "B", Zeile 36 geschrieben.
Ein solches Makro liesse sich durch eienen Button aufrufen.
Stimmt das so?
Gruss
Martin
Anzeige
AW: Matrixspeicherung
20.02.2006 14:32:38
Martin Bolleter
Ergänzung/Korrektur:
ich habe gerade gesehen, dass in Zelle B1 nicht direkt der Spaltenbuchstabe steht, sondern nur die Spaltenüberschrift aus Zeile 3 im Sheet "Speicher". Das müsste natürlich entspr. berücksichtigt werden.
Wenn das so ok ist, versuch ichs mit einem kleinen Makro.
Gruss
Martin
AW: Matrixspeicherung
20.02.2006 14:53:49
petra
Hallo Martin,
also, die Überschriften in B entsprechen nicht den Spalten. Mein Beispiel war vielleicht nicht optimal gewählt.
Also sowohl die Spalte B1 im Input kann sich ändern in A, B, C, D, E
als auch die Spalten A5-A35 können sich ebenfalls ändern.
aber die werte sowohl in B1 als auch in A5-A35 sind eineindeutig, so dass dein Ansatz sich ganz gut anhört.
hoffe, ich konnte deine unklarheiten beseitigen.
lg
petra
Anzeige
AW: Matrixspeicherung
20.02.2006 15:01:39
Martin Bolleter
Hallo Petra
ja, beim Programmieren habe ich auch bemerkt, dass meine erste Beschreibung nicht so ganz korrekt war :-).
Versuch es mal mit folgendem Makro, das du in ein Modul kopieren musst, und am besten über einen Button in deiner Tabelle startest (du weisst, wie das geht?):

Sub Speichern()
Dim i%, j%, Sp$, Zl%, Splt%, Zeile%
Sp = Cells(1, 2)     'Spalte
If Sp = "" Then Exit Sub
For i = 3 To 7
If Sheets("Speicher").Cells(3, i) = Sp Then Splt = i
Next i
If Splt = 0 Then Exit Sub
For i = 5 To 35
If Cells(i, 7) <> "" Then
Zl = Cells(i, 1)
For j = 5 To 400
If Sheets("Speicher").Cells(j, 1) = Zl Then
Zeile = j
Exit For
End If
Next j
If Zeile = 0 Then Exit Sub
Sheets("Speicher").Cells(Zeile, Splt) = Cells(i, 7)
End If
Next i
End Sub

Dabei gehe ich davon aus, dass die zu speichernden Werte IMMER im Bereich G5 bis G35 stehen! Ok?
Natürlich lässt sich dieses Makro noch optimieren und mögliche Fehler abfangen; aber schau mal erst, ob es das tut was es soll.
Gruss
Martin
Anzeige
AW: Matrixspeicherung
20.02.2006 15:41:44
petra
Hallo Martin,
also das mit der schaltfläche krieg ich hin.
aber mich wundert ein wenig, dass das tabellenblatt "input" gar nicht im makro erwähnt wird. müßte das nicht noch irgendwo definiert werden. ansonsten weiß das makro doch nicht, woher es 5 To 35 nehmen soll, oder?
habs jetzt auch schon mal probiert. funktioniert aber noch nicht.
lg
petra
AW: Matrixspeicherung
20.02.2006 15:59:56
Martin Bolleter
Hallo Petra
im Prinzip hast du recht, aber bei mir habe ich das Makro immer mit einem Button im Blatt Input gestartet. Das stellt sicher, dass dieses Blatt immer das aktive ist. Wenn im Makro einfach Cells(x,y) angegeben ist, bezieht er das auf das aktive Blatt.
Offensichtlich siccherer wäre es aber wohl, wenn dies im Makro so spezifiziert wäre, zB indem am Anfang dieses Blatt per Code aktiviert würde, oder indem jede Zellreferenz explizit auch die Tabelle enthalten würde.
Zum Testen: Gehe auf dein Blatt "Input", mache die Eingaben in Zelle B1 etc, dann rufe über Extra/Makros das Makro Speichern auf. Dann sollte es funktionieren.
Dann sag mir, was du geändert haben möchtest.
Gruss
Martin
Anzeige
AW: Matrixspeicherung
20.02.2006 16:40:56
moerlen
Hallo Petra
ich bin für eine Weile nicht am Rechner, daher mal die leicht ergänzte Version des Makro:

Sub Speichern()
Dim i%, j%, Sp$, Zl%, Splt%, Zeile%
Dim WS As Worksheet
Set WS = Worksheets("Input")
Sp = WS.Cells(1, 2)     'Spalte
If Sp = "" Then
MsgBox "Bitte Spaltenbuchstaben in Zelle B1 eingeben!"
Exit Sub
End If
For i = 3 To 7
If Sheets("Speicher").Cells(3, i) = Sp Then Splt = i
Next i
If Splt = 0 Then
MsgBox "Spaltenbuchstaben " & Sp & " in Tabelle Speicher, Zeile 3 nicht gefunden!"
Exit Sub
End If
For i = 5 To 35
If WS.Cells(i, 7) <> "" Then
Zl = WS.Cells(i, 1)
For j = 5 To 400
If Sheets("Speicher").Cells(j, 1) = Zl Then
Zeile = j
Exit For
End If
Next j
If Zeile = 0 Then
MsgBox "ZeilenNummer " & Zl & " in Tabelle Speicher, Spalte A nicht gefunden!"
Exit Sub
End If
Sheets("Speicher").Cells(Zeile, Splt) = WS.Cells(i, 7)
End If
Next i
Set WS = Nothing
End Sub

Ich melde mich heute später am Abend wieder oder sonst Morgen.
Gruss
Martin
Anzeige
AW: Matrixspeicherung
20.02.2006 16:44:36
petra
Hallo Martin,
hab verstanden. Also ich hab sowohl deinen beschriebenen Weg über extra etc als auch über einen Schaltfläche auf dem Sheet input versucht den makro auszuführen.
Das ausführen ist anscheinend auch nicht das problem, allerdings werden die werte nicht gespeichert.
was mach ich falsch?
hier nochmal mit meinen anpassungen denn mein Umfang für die Spaltensuche ist etwas größer als in der beispielversion:

Sub Matrixspeichern()
Dim i%, j%, Sp$, Zl%, Splt%, Zeile%
Sp = Cells(1, 2)     'Spalte
If Sp = "" Then Exit Sub
For i = 5 To 39
If Sheets("Anpassung").Cells(3, i) = Sp Then Splt = i
Next i
If Splt = 0 Then Exit Sub
For i = 5 To 35
If Cells(i, 39) <> "" Then
Zl = Cells(i, 1)
For j = 5 To 400
If Sheets("Anpassung").Cells(j, 1) = Zl Then
Zeile = j
Exit For
End If
Next j
If Zeile = 0 Then Exit Sub
Sheets("Anpassung").Cells(Zeile, Splt) = Cells(i, 39)
End If
Next i
End Sub

lg
petra
Anzeige
AW: Matrixspeicherung
20.02.2006 16:52:57
Martin Bolleter
Hallo Petra
wenn er nicht speichert, dann heisst das wohl, dass er etwas nicht gefunden hat und abbricht. Versuch es mal mit meiner letzten Version, die meldet zurück, wenn/was er nicht gefunden hat.
Stimmen die Zeilen und Spalten in deinem sheet Anpassung mit dem sheet Speichern im Beispiel überein? Also zu findende Spalten-Titel in Zeile 3, Zeilen in Spalte 1?
Achtung: Gross/kleinschreibung beachten beim Spalten-Titel (Zelle B1 resp. Zeile 3).
Bis heute abend.
Gruss
Martin
AW: Matrixspeicherung
20.02.2006 17:02:48
petra
ich glaube, wir haben ein kleines missverständnis. zumindest entnehme ich das deiner letzten Mail.
also B1 in "input" ist kein Spaltenwert A, B, C etc.
ich habe das nur in dem Beispiel so benutzt. Tatsächlich sind das Zahlenwerte, die sich aus einem anderen Tabellenblatt ergeben.
also der Wert in B1 in "Input" findet sich auf jedenfall in "Speicher" bzw. bei mir "Anpassung" wieder.
vielleicht ist das ja das problem.
lg
petra
Anzeige
AW: Matrixspeicherung
20.02.2006 21:25:49
Martin Bolleter
Hallo Petra
eigentlich sollte das nicht das Problem sein, da das Makro einfach den Wert aus B1 in "Input" nimmt und dann in "Speicher" (oder eben "Anpassung") in Zeile 3 wieder sucht. Das müsste auch mit Zahlen gehen. Ich werde das gleich mal versuchen.
Was genau passiert wenn du das Makro startest? Kommt eine Fehlermeldung mit meiner letzten Version?
Gruss
Martin
AW: Matrixspeicherung
20.02.2006 21:39:58
Martin Bolleter
Hallo Petra
ich habe es auch mit Zahlen versucht: es geht problemlos.
Ich lade dir mal meine Version mit leicht angepasstem Makro hoch:
https://www.herber.de/bbs/user/31259.xls
Gruss
Martin
Anzeige
AW: Matrixspeicherung
21.02.2006 14:33:16
petra
Hallo Martin,
also bei dir in der datei funktioniert das einwandfrei, wie ich gesehen habe.
jetzt wollte ich das in meine original datei übernehmen, aber da klappt es nicht
hab dir noch mal die veränderte version hochgeladen, in der es auch nicht klappt.
kannst du es dir mal anschauen?

Die Datei https://www.herber.de/bbs/user/31283.xls wurde aus Datenschutzgründen gelöscht

lg
petra
AW: Matrixspeicherung
21.02.2006 14:43:32
Martin Bolleter
Hallo Petra
da war einfach eine Variable zu klein dimensioniert; mein Fehler :-)
(Im ersten Beispiel waren viel kleinere Werte).
Jetzt sollte es gehen:
https://www.herber.de/bbs/user/31284.xls
Gruss
Martin
Anzeige
Jetzt funktioniert es. Tausend Dank. o.T.
21.02.2006 14:58:51
petra
Freut mich! Danke für die Rückmeldung
21.02.2006 15:01:37
Martin Bolleter
Hallo Petra
melde dich einfach, wenn du eine Anpassung/Ergänzung brauchst.
Gruss
Martin

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige