Live-Forum - Die aktuellen Beiträge
Datum
Titel
15.07.2024 16:00:57
15.07.2024 15:41:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Werte in Matrix verändern

Werte in Matrix verändern
25.04.2013 13:15:07
Sebastian
Hallo zusammen,
ich habe folgendes Problem, vielleicht kann mir ja dabei jemand helfen:
Ich habe eine 412*412 Matrix, die mit 169744 Werten gefüllt ist.
Jetzt möchte ich mit den Zahlen folgendes machen: Ab einer gewissen Größe einer Zahl, soll ein entsprechender Wert zu der Zahl hinzuaddiert werden. Die einzelnen Unterteilungen sollen dabei wie folgt aussehen, wobei das x halt die jeweilige Zahl in der Matrix ist.
810 kleiner gleich x :135 addieren
540 kleiner gleich x und größer als 810 : 90 addieren
270 kleiner gleich x und größer als 540 : 45 addieren
Hab ihr eine Idee, wie ich das am Besten anstellen könnte?
Vielen Dank euch schonmal!
Gruß, Sebastian

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Werte in Matrix verändern
25.04.2013 13:24:17
Klaus
Hi Sebastian,
in Pseudocode: For MHorizontal = 1 to 412 For MVertikal = 1 to 412 Wert = Matrix(MHorizontal,MVertikal) IF Wert > 270 then IF Wert > 540 then IF Wert > 810 then Wert = Wert + 135 ELSE Wert = Wert + 90 End If ELSE Wert = Wert + 45 End If Matrix(MHorizontal,MVertikal) = Wert Next Next Hilfts?
Grüße,
Klaus M.vdT.

AW: Werte in Matrix verändern
25.04.2013 15:29:53
Sebastian
Hallo Klaus,
zunächst danke für deine Antwort.
Jetzt hab ich nur die Frage, wo ich den Code einfügen muss. Muss dazu ein Makro erstellt werden? Du hast ja jetzt auch nur die "größer als" Fälle betrachtet und nicht die "kleiner als". Somit würde Excel ja in deinem Fall zunächst erstmal bei allen Wert größer 270 die 45 addieren, oder? Ich will aber halt gezielt, dass die 45 nur bei Werten zwischen 270 und 540 addiert wird.

Anzeige
AW: Werte in Matrix verändern
25.04.2013 15:38:06
Klaus
Hi,
den Code kannst du nicht einfügen, das ist nur "Pseudocode". Da du nur mangelhafte Informationen in dem Ursprungspost hattest, bin ich davon ausgegangen du willst nur einen Gedankenanstoss und das ganze dann selbst programmieren.
Was ist denn deine "Matrix"? Ein Matrix-Rückgabewert, ein 2-Dimensionales Array oder einfach nur ein paar Excelzellen gefüllt? Wenn letzteres, lad doch mal eben eine Mappe hoch. Müssen ja nicht 412x412 Zellen gefüllt sein, so 3x3 reichen zum testen.
Ich will aber halt gezielt, dass die 45 nur bei Werten zwischen 270 und 540 addiert wird.
Ist ja auch so. Sagen wir mal, wir lassen die IFs für den Wert 275 laufen.

  IF Wert > 270 then ja, 275 ist größer als 270. Mache weiter
   IF Wert > 540 then Nein, 270 ist kleiner als 540. Ignoriere diesen IF-Block und mache  _
weiter bei ELSE
    IF Wert > 810 then ignoriert
     Wert = Wert + 135 ignoriert
    ELSE ignoriert
     Wert = Wert + 90 ignoriert
    End If ignoriert
   ELSE hier gehts weiter
    Wert = Wert + 45 Addiere 45
   End If Fertig
Das war es doch, was du wolltest?
Grüße,
Klaus M.vdT.

Anzeige
AW: Werte in Matrix verändern
25.04.2013 17:29:39
Sebastian
Hallo Klaus,
ich will, besser gesagt kann gar nichts selber programmieren, deswegen bin ich ja auf Leute angewiesen, die sich damit auskennen :)
Also die "Matrix" sind einfach nur knapp 170000 gefüllte Excel-Zellen. Ich hab dir mal einen kleinen Auszug aus der Matrix in die Mappe gepackt
https://www.herber.de/bbs/user/85069.xlsx
Prinzipiell leuchtet mir ja dein If Then Code ein, aber wie macht Excel das dann?
Beispielsweise ich habe jetzt einen Wert 500, dann werden ja 45 addiert. Fragt aber Excel erst danach alle Werte größer 540 ab, steckt der erste Wert mit insgesamt 545 ja dann dort mit drin. Dann würde ja da wieder was hinzuaddiert werden, falls Excel so arbeitet. Verstehst du was ich meine? Deswegen hatte ich die Bedingungen so konkret aufgestellt und mit den größten Werten gestartet (größer gleich 810).
Vielen Dank für deine Hilfe!
Gruß,
Sebastian

Anzeige
AW: Werte in Matrix verändern
25.04.2013 19:20:47
Klaus
Hi,
die IF-Schleifen musst du als einzelne Blöcke verstehen.
IF tritt ein
THEN mache dies
ELSE mache das

für jedes IF passiert entweder etwas (then) oder etwas anderes (else).
Innerhalb der THEN oder der ELSE Anweisung kann jetzt ein weiterer Block folgen, der wieder in sich mit THEN und ELSE geschlossen ist. Um das besser zu überblicken werden diese Blöcke beim programmieren gerne "eingerückt" --- das Programm selbst brauch das in der Regel nicht!
Ich stell das von oben mal übertrieben dar, mit "Hausnummern"

A     IF Wert > 270 then
B        IF Wert > 540 then
C           IF Wert > 810 then
D               Wert = Wert + 135
E           ELSE
F               Wert = Wert + 90
G           End If
H        ELSE
I          Wert = Wert + 45
J        End If
K     ELSE (zur vollständigkeit)
L        hier passiert nichts
M     End If

Gehen wir mal für vier Werte durch, 100 / 500 / 600 / 900
Erstmal 100. An Stelle A wird gefragt "Ist 100 größer als 270?" Die Antwort ist nein. Es geht also weiter mit der ELSE-Anweisung DIESES If-Blocks, das ist in K. Und es passiert in L: nichts. Darum habe ich mir oben auch die Anweisung dazu gespart, die habe ich hier der Vollständigkeit halber mit dazu geschrieben.
Ergebnis: 100 und nix, immer noch 100
Zweiter Versuch mit 500.
Stelle A, 500 ist größer als 270. Es geht direkt weiter in B
Stelle B, 500 ist NICHT größer als 540. Es geht zur ELSE-Anweisung DIESES If-Blocks, die steht in H. In I werden +45 addiert, in J endet der gerade aktive IF-Block. In K steht das ELSE des IF-Blocks aus A, der bereits mit JA beantwortet wurde. Darum wird dieser Teile NICHT ausgeführt, es geht weiter zu M und Ende. 500 +45 = 545
Nächster Versuch mit 600.
Stelle A, 600 ist größer als 270. Weiter in B
Stelle B, 600 ist größer als 540. Weiter in C
Stelle C, 600 ist NICHT größer als 810. Weiter mit ELSE, das ist in E. Von da weiter in F
Stelle F, es werden 90 addiert.
Stelle G, IF-Block aus C abgeschlossen
Stelle H, ELSE aus IF-Block angefangen in B. Dieser wurde bereits mit ja beantwortet, darum wird der Else-Teil nicht ausgeführt. Weiter in J.
Stelle J, IF-Block aus B abgeschlossen.
Stelle K, ELSE aus IF-Block angefangen in A. Dieser wurde bereits mit ja beantwortet, darum wird der Else-Teil nicht ausgeführt. Weiter in M.
Stelle M, IF-Block aus A abgeschlossen.
Ergebnis: 690
So, den 1000er spielst du dann selbst durch!
Ich hab grad kein Excel zur Hand, aber ich bastel dir das gleich morgen früh in deine Muster Tabelle rein!
Grüße,
Klaus M.vdT.
Lösung für den 1000er: ABCDM

Anzeige
Werte in Matrix verändern - ohne VBA
26.04.2013 00:55:21
Erich
Hi Sebastian,
den Thread habe ich auf offen gestellt, nicht weil ich die Frage noch für offen halte,
sondern um dir zu zeigen, dass man auch einen älteren Thread als "offen" anzeigen kann.
Hier mal zwei Möglichkeiten, die Aufgabe ohne VBA (wg. "VBA nein") zu erledigen,
was bei "Excel gut" kein Problem sein sollte:
Quelle

 ABC
1-10001
2269270271
3539540541
48098101000


Tabelle2

 ABC
1-10001
2269315316
3584630631
48999451135

Formeln der Tabelle
ZelleFormel
A1=Quelle!A1+45*(Quelle!A1>=270)+45*(Quelle!A1>=540)+45*(Quelle!A1>=810)
B1=Quelle!B1+45*(Quelle!B1>=270)+45*(Quelle!B1>=540)+45*(Quelle!B1>=810)


Tabelle2

 EFG
1-10001
2269315316
3584630631
48999451135

Formeln der Tabelle
ZelleFormel
E1=Quelle!A1+45*MIN(3;KÜRZEN(Quelle!A1/270))
F1=Quelle!B1+45*MIN(3;KÜRZEN(Quelle!B1/270))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Nebenbei: Auch dein Beispiel hättest du hier einfach z. B. mit der Jeanie darstellen können, ohne File-Upload.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Werte in Matrix verändern - ohne VBA
26.04.2013 08:16:58
Klaus
Hallo Erich,
ich hab mir grad deine Formeln angeschaut und zunächst nichts begriffen. Dann hab ich gesehen, dass Sebastians variablen Vielfache von 270 bzw 45 sind ... was deine zweite Formelverkürzung ziemlich gut macht! Gut gesehen, respekt.
Grüße,
Klaus M.vdT.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge