Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1300to1304
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
Inhaltsverzeichnis

nur die zahlenwerte der matrizen addieren

nur die zahlenwerte der matrizen addieren
01.03.2013 21:51:20
jana
Hey,
ich brauch dringend eure Hilfe!
Ich möchte alle Werten von zwei Matrizen kombinieren und addieren. Bsp:
Matrix 1:
1 2 3 4
Matrix2:
5 6 7 8
Daraus soll eine neue Matrix mit den Summen werden: 1+5;1+6;1+7;1+8;2+5;2+6…
Dafür habe ich folgende Formel, mit der das auch funktioniert:
{=(A1:D1)+MTRANS(A3:D3)}
Wenn ich in den Matrizen aber auch Texte oder Leerzellen habe und will, dass nur die Zahlenwerte addiert warden, welche Formel gibt es hierfür? Bsp.:
M1:
1 FALSCH 2 3
M2:
4 5 FALSCH 6
Daraus soll folgende Matrix werden: 1+4;1+5;1+6;2+4;2+5;2+6;3+4;3+5;3+6
Ist dies möglich mit einer Formel zu lösen?
LG

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Ja, mit Fktt, d.Texte ignorieren! Gruß owT
01.03.2013 22:44:13
Luc:-?
:-?

...oder mit einer Matrixformel wie ...
01.03.2013 23:54:40
Luc:-?
…{=A1:D1+A3:D3}, Jana!
Deine FALSCH-Werte wdn dabei als 0 interpretiert, weil sie Wahrheitswerte sind. WAHR würde als 1 interpretiert → das wird durch die Operatoren veranlasst. MTRANS ist hierbei also gar nicht nötig. Bei echten Texten klappt das natürlich nicht. Hier wäre folgende Formel erforderlich:
{=WENN(ISTZAHL(A1:D1);A1:D1;0)+WENN(ISTZAHL(A3:D3);A3:D3;0)}
Das fktioniert übrigens auch mit Wahrheitswerten statt Texten, falls diese nicht einbezogen wdn sollen.
SchöSo, Gruß Luc :-?

AW: ...oder mit einer Matrixformel wie ...
02.03.2013 09:48:06
jana
hey Luc,
danke für deine antwort!
aber mit der formel funktioniert das nicht. es werden immer nur die werte die untereinander stehen addiert.
LG

Anzeige
Oh, da habe ich deine Wiederholungen glatt ...
02.03.2013 11:59:48
Luc:-?
…übersehen, Jana;
was soll denn das für einen Sinn machen?
Gruß+schöWE (Gott, ist ja erst Sa!), Luc :-?

zwei Matrizen kombinieren und addieren
02.03.2013 01:17:01
Erich
Hi Jana,
mit einer Formel kann das wohl auch gehen, aber hier würde ich VBA bevorzugen.
Die Funktion MatrixAdd kannst du als Matrixfunktion direkt in der Tabelle einsetzen oder aber per
Aufruf eines Makros wie MatrAdd die Ergebnisse in einen Bereich schreiben lassen.
In diesem Beispiel hat MatrAdd die Ergebnismatrix in A4:L4 geschrieben:
 ABCDEFGHIJKLMN
11020dfWAHR40         
2FALSCH246sds8        
3              
4121416182224262842444648 von Sub MatrAdd
5              
6121416182224262842444648#NVFunktion

Formeln der Tabelle
ZelleFormel
A6{=MatrixAdd(A1:E1;A2:H2)}
B6{=MatrixAdd(A1:E1;A2:H2)}
C6{=MatrixAdd(A1:E1;A2:H2)}
D6{=MatrixAdd(A1:E1;A2:H2)}
E6{=MatrixAdd(A1:E1;A2:H2)}
F6{=MatrixAdd(A1:E1;A2:H2)}
G6{=MatrixAdd(A1:E1;A2:H2)}
H6{=MatrixAdd(A1:E1;A2:H2)}
I6{=MatrixAdd(A1:E1;A2:H2)}
J6{=MatrixAdd(A1:E1;A2:H2)}
K6{=MatrixAdd(A1:E1;A2:H2)}
L6{=MatrixAdd(A1:E1;A2:H2)}
M6{=MatrixAdd(A1:E1;A2:H2)}
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
Matrix verstehen


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Und hier die Codes: Option Explicit Sub MatrAdd() Dim arr arr = MatrixAdd(Range("A1:E1"), Range("A2:G2")) Cells(4, 1).Resize(, UBound(arr, 2)) = arr End Sub Function MatrixAdd(rngA As Range, rngB As Range) Dim arrA, arrB, aa As Long, bb As Long, arrE() As Double Dim ii As Long, jj As Long, kk As Long arrA = rngA.Value For ii = 1 To UBound(arrA, 2) If Application.IsNumber(arrA(1, ii)) Then aa = aa + 1 ' Anzahl Zahlen in rngA arrA(1, aa) = arrA(1, ii) End If Next ii arrB = rngB.Value For ii = 1 To UBound(arrB, 2) If Application.IsNumber(arrB(1, ii)) Then bb = bb + 1 ' Anzahl Zahlen in rngB arrB(1, bb) = arrB(1, ii) End If Next ii ReDim arrE(1 To 1, 1 To aa * bb) ' Anzahl Ergebnis For ii = 1 To aa For jj = 1 To bb kk = kk + 1 arrE(1, kk) = arrA(1, ii) + arrB(1, jj) Next jj Next ii MatrixAdd = arrE End Function Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
Warum bevorzugen, ...
02.03.2013 01:31:05
Luc:-?
…Erich?
Rechnest du damit, dass das nur die „Spitze des Eisbergs“ war? ;-)
Übrigens, gerade schrieb ich „alle schlafen“! Nur natürlich wieder mal wir beide nicht! ;-)
Aber jetzt ist Schluss!
SchöSo, Luc :-?
PS: Deine Fkt könnte doch auch im TabBlatt verwendet wdn. Wenn du bei ihren Argg As Range weggelassen hättest, könnte sie auch Ausdrücke verarbeiten (allerdings dann auch ohne .Value)…

AW: Warum bevorzugen, ...
02.03.2013 09:55:09
Erich
Hi Luc :-?,
"Deine Fkt könnte doch auch im TabBlatt verwendet wdn." - meine ich auch! Schau mal in Zeile 6 meines Beispiels. ;-)
Was die Typangabe bei den Argumenten angeht, stimme ich dir auch zu. Allerdings sehe ich da einen Widerstreit
zwischen Variabilität und Typsicherheit. Es kommt einfach darauf an, was man mehr will...
Dir und allen auch ein schönes Wochenende!
Grüße aus Kamp-Lintfort von Erich

Anzeige
Ja, scheint ja sonnig zu wdn, ...
02.03.2013 11:55:49
Luc:-?
…Erich;
ansonsten war ja schon spät…
Typsicherheit, das Stichwort fehlte mir noch zur Erklärung resp Begründung der Einseitigkeit der MS-xlKinder RANG, ZÄHLENWENN, SUMMEWENN ggüber den Fktt des xlKerns. Danke, Erich! ;-)
Na, dann, schau'n wir mal! Luc :-?

AW: zwei Matrizen kombinieren und addieren
02.03.2013 09:44:06
jana
hey Erich,
danke für die antwort!
mit der formel funktioniert es irgendwie nicht da wird dann immer #NAME? angezeigt. woran könnte das liegen?
ich würde das lieber mit einer formle lösen,da ich noch nie mit vba gearbeitet habe,aber ich werde mich jetzt mal daran probieren =)
vielleicht klappt es ja,was ist denn der vorteil,wenn ich es mit vba mache?
LG

Anzeige
BeiSpielMappe
02.03.2013 10:00:47
Erich
Hi Jana,
wo hast du den Code hinkopiert? Er sollte in einenm allg. Modul (z. B. "Modul1") stehen,
dann ist die Fkt. auch im Tabellenblatt bekannt.
Ehe wir lange rätseln, lade ich hier einfach eine BeiSpielMappe hoch und bitte dich,
das mit deiner Mappe zu vergleichen:
https://www.herber.de/bbs/user/84141.xlsm
Mich würde interessieren, was bei dir anders war und damit das #NAME? verursachte.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

AW: BeiSpielMappe
02.03.2013 10:36:48
jana
hey Erich,
ich glaube das problem ist eben, dass ich die formel nicht in ein modul geschreiben habe, habe sie einfach in das tabellenblatt eingefügt.
da ich in excel noch nicht so viel erfahrung hab,weiß ich überhaupt nicht was so ein modul ist =)
kannst du mir vielleicht erklären wie das geht?
LG

Anzeige
AW: BeiSpielMappe
02.03.2013 10:41:26
jana
hey,
kann es auch sein,dass ich diese formel noch freischalten muss?
denn wenn ich diese bei mir eingebe kommt sie nicht automatisch in diesem "auswahlfenster" für formeln.
wenn ich die formel aber bei deinem geschickten bsp. eingebe schon...

AW: BeiSpielMappe
02.03.2013 11:10:09
EtoPHG
Hallo Jana,
Wie musst du den Code in deine Arbeitsmappe kopieren, damit er als Formel aktiv wird?
1. Öffne deine Arbeitsmappe
2. Alt-F11 um VBA zu öffnen
3. Im Projektexplorer irgendwo auf deine Arbeitsmappe Rechtsklick - Einfügen - Modul
4. Den Code in das leere Code-Fenster (von Modul1) kopieren.
Gruess Hansueli

Anzeige
AW: zwei Matrizen kombinieren und addieren
02.03.2013 11:27:43
jana
Viele Dank euch allen!
Es funktioniert, und jetzt hab ich das auch mit dem Code kapiert, die Formel ist freigeschalten!
Schönes Wochenende euch allen!
LG

zwei Matrizen kombinieren und addieren - Formel
02.03.2013 17:49:02
Erich
Hi Jana,
danke für Deine Rückmeldung!
Nachdem du die VBA-Lösung zum Laufen gebracht hast: Es geht auch ohne VBA:
 ABCDEFGHIJKLMN
11020dfWAHR40         
2FALSCH246sds8        
3121416182224262842444648  
4121416182224262842444648  
5              
63             
74             

Formeln der Tabelle
ZelleFormel
A3{=WENN(SPALTE()>$A6*$A7;""; INDEX(1:1;KKLEINSTE(WENN(ISTZAHL($A$1:$IV$1); SPALTE($A$1:$IV$1)); 1+KÜRZEN((SPALTE()-1)/$A7))) +INDEX(2:2;KKLEINSTE(WENN(ISTZAHL($A$2:$IV$2); SPALTE($A$2:$IV$2)); 1+REST(SPALTE()-1;$A7))))}
A4{=WENN(SPALTE()>$A6*$A7;""; INDEX(1:1;KKLEINSTE(WENN(ISTZAHL(1:1); SPALTE(1:1)); 1+KÜRZEN((SPALTE()-1)/$A7))) +INDEX(2:2;KKLEINSTE(WENN(ISTZAHL(2:2); SPALTE(2:2)); 1+REST(SPALTE()-1;$A7))))}
A6=ANZAHL(1:1)
A7=ANZAHL(2:2)
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
Matrix verstehen

A4 ist etwas kürzer als A3, aber evtl. langsamer. Und A4 läuft wohl nicht auf früheren XL-Versionen.
A6 und A7 dienen der Abkürzung - die Anzahlen kommen mehrfach vor, brauchen hier nur einmalig berechnet zu werden.
Schönes Wochenende allerseits!
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
Formel korrigiert
02.03.2013 19:49:38
Erich
Hi Jana,
die Formel in A4 ist ok, aber die in A3 hatte in alten XL-Versionen ein Problem:
A1:IV1 ist dort die gesamte Zeile 1, Excel macht also 1:1 daraus,
möchte dann aber keine ganzen Zeilen oder Spalten in Matrixformeln.
Deshalb habe isch jetzt in A3 die Spalte IU statt IV geschrieben:
 ABCDEFGHIJKLM
11020dfWAHR40        
2FALSCH246sds8       
3121416182224262842444648 
4121416182224262842444648 
5             
63            
74            

Formeln der Tabelle
ZelleFormel
A3{=WENN(SPALTE()>$A6*$A7;""; INDEX(1:1;KKLEINSTE(WENN(ISTZAHL($A$1:$IU$1); SPALTE($A$1:$IU$1)); 1+KÜRZEN((SPALTE()-1)/$A7))) +INDEX(2:2;KKLEINSTE(WENN(ISTZAHL($A$2:$IU$2); SPALTE($A$2:$IU$2)); 1+REST(SPALTE()-1;$A7))))}
A4{=WENN(SPALTE()>$A6*$A7;""; INDEX(1:1;KKLEINSTE(WENN(ISTZAHL(1:1); SPALTE(1:1)); 1+KÜRZEN((SPALTE()-1)/$A7))) +INDEX(2:2;KKLEINSTE(WENN(ISTZAHL(2:2); SPALTE(2:2)); 1+REST(SPALTE()-1;$A7))))}
A6=ANZAHL(1:1)
A7=ANZAHL(2:2)
Enthält Matrixformel:
Umrandende
{ } nicht miteingeben,
sondern Formel mit STRG+SHIFT+RETURN abschließen!
Matrix verstehen

Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: zwei Matrizen kombinieren und addieren - Formel
05.03.2013 16:23:20
jana
Hey,
danke auch noch für diese Lösung!Bin die letzten Tage nicht dazu gekommen es auszuprobieren.
Als ich es vorhin ausprobiert habe, dachte ich bei der Formel aus 4, dass es nicht funktioniert, da erst noch Nullen mit angezeigt wurden,als ich dann aber 10 sec später auf das Blatt gesehen habe waren sie weg! Das dauert ja echt lang!Jetzt verstehe ich auch warum du geraten hast dieses Problem mit vba zu lösen =)
Da ich ziemlich viele Werte miteinander kombinieren möchte ist es auf jden Fall sinnvoll vba zu verwenden! Gibt es denn auch die Möglichkeit die Formel "matradd" in Spalten zu rechen, also wenn z.B die eine Matrix in A1:A5 steht und die andere in B1:B6?
Da ich, wie schon gesagt ziemlich viele Werte kombinieren möchte reicht die Anzahl der Spalten in Excel nicht aus, am Ende habe ich weit aus mehr Kombinationsmöglichkeiten als 16.000 und ca. so viele Spalten gibt es ja nur Excel...
LG Jana

Anzeige
zwei Spalten kombinieren und addieren - VBA
05.03.2013 17:19:57
Erich
Hi Jana,
da braucht es in VBA nur ein paa kleine Änderungen:

Option Explicit
Sub MatrAdd2()
Dim arr
'   arr = MatrixAddZe(Range("A1:E1"), Range("A2:H2"))
'   Cells(9, 1).Resize(, UBound(arr, 2)) = arr
arr = MatrixAddSp(Range("A1:A51"), Range("B1:B8"))
Cells(1, 4).Resize(UBound(arr)) = arr
End Sub
Function MatrixAddSp(rngA As Range, rngB As Range)
Dim arrA, arrB, aa As Long, bb As Long, arrE() ' As Double
Dim ii As Long, jj As Long, kk As Long
arrA = rngA.Value
For ii = 1 To UBound(arrA)
If Application.IsNumber(arrA(ii, 1)) Then
aa = aa + 1                   ' Anzahl Zahlen in rngA
arrA(aa, 1) = arrA(ii, 1)
End If
Next ii
arrB = rngB.Value
For ii = 1 To UBound(arrB)
If Application.IsNumber(arrB(ii, 1)) Then
bb = bb + 1                   ' Anzahl Zahlen in rngB
arrB(bb, 1) = arrB(ii, 1)
End If
Next ii
ReDim arrE(1 To aa * bb, 1 To 1)    ' Anzahl Ergebnis
For ii = 1 To aa
For jj = 1 To bb
kk = kk + 1
arrE(kk, 1) = arrA(ii, 1) + arrB(jj, 1)
'        arrE(kk, 1) = arrA(ii, 1) & "+" & arrB(jj, 1)
Next jj
Next ii
MatrixAddSp = arrE
End Function
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

AW: zwei Spalten kombinieren und addieren - VBA
05.03.2013 17:47:27
jana
Supi, es klappt!Vielen Dank!
Ich wünschte ich hätte auch so viel Ahnung von vba,schon toll was man damit alles machen kann!
LG

315 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige