Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Kann man dieses Makro mit WorksheetFunction vereinfachen?

Forumthread: Kann man dieses Makro mit WorksheetFunction vereinfachen?

Kann man dieses Makro mit WorksheetFunction vereinfachen?
23.09.2024 10:12:54
Florian
Hallo

Kann man folgende Function "KehrwertBerechnen(Rechteck)" vereinfachen?
Kann man das vielleicht mit einer WorksheetFunction machen?
Kann man das vielleicht mit einer for each-Schleife machen?

Gergeben ein Code zur Berechnung des Kehrwertes von jedem Eintrag einer 2-dim Matrix. Die Matrix steht nicht in einem Tabellenblatt, sondern ist das Ergebis eines Makros. Das ist hier im Makro "Grundeinstellung" dargestellt.

Sub Grundeinstellung()

Dim Matrix(1 To 3, 1 To 2) As Double
Dim Kehrwert

Matrix(1, 1) = 2: Matrix(1, 2) = 4
Matrix(2, 1) = 16: Matrix(2, 2) = 32
Matrix(3, 1) = 1: Matrix(3, 2) = 7

Kehrwert = KehrwertBerechnen(Matrix)
Stop
End Sub

Function KehrwertBerechnen(Rechteck)
Dim Zeile As Integer, Spalte As Integer, a
a = Rechteck
For Zeile = LBound(a, 1) To UBound(a, 1)
For Spalte = LBound(a, 2) To UBound(a, 2)
a(Zeile, Spalte) = 1 / a(Zeile, Spalte)
Next Spalte
Next Zeile
KehrwertBerechnen = a
End Function



LG, Flo
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kann man dieses Makro mit WorksheetFunction vereinfachen?
23.09.2024 12:27:05
Yal
Hallo Florian,

zweifaches nein:
- in Fall einer Verarbeitung von einem "Matrix" müssten die Werte zuerst in einem Bereich der Arbeitsmappe abgelegt werden.
- es gibt keine Excel-Formel für 1/x, die man als Worksheetfunction ausrufen kann

Davon abgesehen eine Vereinfachung in der Schreibeweise ist oft mit eine Verkomplizierung in der Handlung, was meist Performance-Einbuss bedeutet.
Dein Code ist bereits optimal.

Einzige "ich würde so machen":
- die Schleifen-Laufvariable 1-buchstabig (ist nur Usus, kein Pflicht)
- Parameter in "ByVal" übergeben: es wird auf eine Kopie gearbeitet, man braucht keine separate lokale Variable
- Transformation auf sich selbst: was gerade gelesen wurde, wird durch Ergebnis überschrieben

Function KehrwertBerechnen(ByVal Rechteck)

Dim Z As Integer
Dim S As Integer
For Z = LBound(Rechteck, 1) To UBound(Rechteck, 1)
For S = LBound(Rechteck, 2) To UBound(Rechteck, 2)
Rechteck(Z, S) = 1 / Rechteck(Z, S)
Next S
Next Z
KehrwertBerechnen = Rechteck
End Function


VG
Yal
Anzeige
AW: Kann man dieses Makro mit WorksheetFunction vereinfachen?
23.09.2024 17:33:00
Florian
Danke, Yal, für Deine Antwort. und den Tipp mit ByVal. Das macht die Sache übersichtlicher.
LG, Flo
AW: Kann man dieses Makro mit WorksheetFunction vereinfachen?
23.09.2024 20:57:32
snb
Oder

Sub M_snb()

ReDim sn(2, 1)

For j = 0 To (UBound(sn) + 1) * (UBound(sn, 2) + 1) - 1
sn(j \ (UBound(sn, 2) + 1), j Mod (UBound(sn, 2) + 1)) = Choose(j + 1, 2, 4, 16, 32, 1, 7)
Next
Cells(1, 4).Resize(UBound(sn) + 1, UBound(sn, 2) + 1) = sn

For j = 0 To (UBound(sn) + 1) * (UBound(sn, 2) + 1) - 1
sn(j \ (UBound(sn, 2) + 1), j Mod (UBound(sn, 2) + 1)) = 1 / sn(j \ (UBound(sn, 2) + 1), j Mod (UBound(sn, 2) + 1))
Next

Cells(5, 4).Resize(UBound(sn) + 1, UBound(sn, 2) + 1) = sn
End Sub
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige