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

Makro in Funktion umwandeln

Makro in Funktion umwandeln
17.12.2007 19:57:00
HermannZ
Hi;
ich versuche zur Zeit ein Makro in eine Funktion umzuwandeln aber an der Ausgabe ist mein Latein zu ende.
In der Beispiel Tabelle ist das funktionierende Makro und man kann die gewünschte Funktionsweise
erkennen.
Die Funktion habe ich wie gesagt bis auf die Ausgabe zusammengefrimelt.
PS:Im Makro ist auch noch ein Schönheitsfehler die Ausgabe der zahlen geschiet nicht als Zahl sondern
als Text, dafür brauche ich auch noch einen Tipp.
https://www.herber.de/bbs/user/48505.xls
Gruss HermannZ

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro in Funktion umwandeln
17.12.2007 20:20:10
Erich
Hallo Hermann,
so sollte es funzen: Function TEILENINGRUPPEN(Zelle As Range, Gruppenzeichen As String, Trennzeichen As String) Dim arrGruppen() As String Dim arrTemp1() As String Dim arrTemp2() Dim lngI As Long Dim lngN As Long If Zelle = "" Then Exit Function arrGruppen = Split(Zelle.Text, Gruppenzeichen) ReDim arrTemp2(5, UBound(arrGruppen)) For lngI = LBound(arrGruppen) To UBound(arrGruppen) arrTemp1 = Split(arrGruppen(lngI), Trennzeichen) For lngN = LBound(arrTemp1) To UBound(arrTemp1) If IsNumeric(arrTemp1(lngN)) Then arrTemp2(lngN, lngI) = arrTemp1(lngN) * 1 Else arrTemp2(lngN, lngI) = arrTemp1(lngN) End If Next lngN Erase arrTemp1 Next lngI TEILENINGRUPPEN = arrTemp2 End Function

Ein Problem sehe ich dabei:
Wenn du die Funktion in der Tabelle nutzen willst, weißt du nicht, wie viele Spalten das Ergebnis haben wird.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Makro in Funktion umwandeln
17.12.2007 20:36:18
HermannZ
Hallo Erich;
Danke das du dich damit beschäftigst.
Deinen Versuch hatte ich schon probiert das Ergebnis ist das er nur den ersten Teilstring ausliest
z.B. für den text aus A3 erhalte ich nur das AA
zu dem mit den Spalten ich habe das Makro so gestaltet das ich 6 Spalten belegen kann mehr brauche ich
nicht.
Mein Problem ist was ich zumindest noch nicht verstehen kann ist,das ich ja die Ausgabe was Text und Anzahl Zeilen und Spalten im Makro ja richtig fuktioniert nur ich kann das in der Funktion nicht umsetzen.
Gruss HermannZ

AW: Makro in Funktion umwandeln
17.12.2007 21:01:00
Erich
Hallo Hermann,
in dieser Mappe habe ich die Funktion in den Bereich B5:H10 als Matrixfunktion eingegeben:
https://www.herber.de/bbs/user/48509.xls
Bis Spalte G hätte natürlich gereicht, aber so sieht man die #NVs in Spalte H...
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Makro in Funktion umwandeln
17.12.2007 21:23:34
HermannZ
Hallo Erich;
Danke, das das auch so geht wusste ich auch noch nicht,wieder was gelernt.
aber schau dir bitte mal meine Antwort an ransi an, vieleicht fällt dir ja dazu was ein, wär toll.
Gruss HermannZ

AW: Makro in Funktion umwandeln
17.12.2007 21:35:29
Erich
Hallo Hermann,
das in deiner Antwort an Ransi hab ich ehrlich gesagt nicht verstanden:
"ich suche jetzt eine Möglichkeit die Ausgabe von der Zelle aus,
von wo die Funktion aufgerufen wird, diese Ausgabe hinzukriegen"
Wer soll die Ausgabe machen? Die aufgerufene benutzerdefinierte Funktion kann keine Zellen ändern
außer den Zellen, in denen sie aufgerufen wird.
Wenn du die Funktion also aus B10 aufrufst, wird auch nur B10 gefüllt.
Wenn du versuchst, in der Funktion, also per VBA, die Zelle B11 zu beschreiben, gibts einen Fehler.
Da sehe ich nur zwei Möglichkeiten:
a) Ransis Vorschlag mit Zeile und Spalte als zusätzl. Parameter, dann kannst du die Funktion
aus allen Zielzellen einzeln aufrufen.
b) meinen Vorschlag, die Funktion als Matrixfunktion auf einen Zielbereich anwenden.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: @Erich.....................
17.12.2007 21:44:31
HermannZ
Hallo Erich;
genau das ist es;
--Wenn du versuchst, in der Funktion, also per VBA, die Zelle B11 zu beschreiben, gibts einen Fehler.--
und das habe ich die ganze Zeit versucht und mich ständig über den Fehler gewundert.
Danke.
Gruss HermannZ

AW: Makro in Funktion umwandeln
17.12.2007 20:41:42
ransi
HAllo Hermann
Da das Grungerüst schon stand, schau mal ob du hiermit anfreunden kannst:
Function TEILENINGRUPPEN(Zelle As Range, Gruppenzeichen As String, Trennzeichen As String) _
    As Variant '######

Dim arrGruppen() As String
Dim arrTemp1() As String
Dim arrTemp2() As String
Dim lngI As Long
Dim lngN As Long
If Zelle = "" Then Exit Function
arrGruppen = Split(Zelle.Text, Gruppenzeichen)
Redim arrTemp2(5, UBound(arrGruppen))
For lngI = LBound(arrGruppen) To UBound(arrGruppen)
    arrTemp1 = Split(arrGruppen(lngI), Trennzeichen)
    For lngN = LBound(arrTemp1) To UBound(arrTemp1)
        arrTemp2(lngN, lngI) = arrTemp1(lngN)
    Next lngN
    Erase arrTemp1
Next lngI
'###################
TEILENINGRUPPEN = arrTemp2
'###################
End Function


Aufrufen kannst du das dann so:
TeileInGruppen

 ABCDEFG
3AA/123456/1250/625;AB/123456/1500/750;AC/123456/1750/875/ST52/CC;AD/123456/2000/1000/St52/CD;AE/123456/2250/1125/ST52/CE;AF/123456/2500/1250/ST52/BB      
4AA/123456/1250/625;AB/123456/1500/750;AC/123456/1750/875/ST52      
5       
6       
7       
8       
9       
10 AAABACADAEAF
11 123456123456123456123456123456123456
12 125015001750200022502500
13 625750875100011251250
14   ST52St52ST52ST52
15   CCCDCEBB

Formeln der Tabelle
ZelleFormel
B10=INDEX(TEILENINGRUPPEN($A$3;";";"/"); ZEILE(A1); SPALTE(A1))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
ransi

Anzeige
AW: @ransi..................
17.12.2007 20:51:00
HermannZ
Hallo ransi;
Danke für die Antwort.
Das möchte ich hier gerade nicht so machen.
schaue dir bitte einmal meine Antwort an Erich an.
Gruss HermannZ

AW: Makro in Funktion umwandeln
17.12.2007 20:55:21
ransi
HAllo Hermann
Wenn du ohne Index() klarkommen willst, musst der Funktion noch den Zeilen und Spaltenindex mitgeben.
Function TEILENINGRUPPEN(Zelle As Range, Gruppenzeichen As String, Trennzeichen As String, z As Long, s As Integer)
Dim arrGruppen() As String
Dim arrTemp1() As String
Dim arrTemp2() As String
Dim lngI As Long
Dim lngN As Long
If Zelle = "" Then Exit Function
arrGruppen = Split(Zelle.Text, Gruppenzeichen)
Redim arrTemp2(5, UBound(arrGruppen))
For lngI = LBound(arrGruppen) To UBound(arrGruppen)
    arrTemp1 = Split(arrGruppen(lngI), Trennzeichen)
    For lngN = LBound(arrTemp1) To UBound(arrTemp1)
        arrTemp2(lngN, lngI) = arrTemp1(lngN)
    Next lngN
    Erase arrTemp1
Next lngI
'###################
TEILENINGRUPPEN = arrTemp2(z - 1, s - 1)
'###################
End Function

TeileInGruppen

 BCDEFG
10AAABACADAEAF
11123456123456123456123456123456123456
12125015001750200022502500
13625750875100011251250
14  ST52St52ST52ST52
15  CCCDCEBB

Formeln der Tabelle
ZelleFormel
B10=TEILENINGRUPPEN($A$3;";";"/";ZEILE(A1); SPALTE(A1))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
ransi

Anzeige
AW: Makro in Funktion umwandeln
17.12.2007 21:04:00
HermannZ
Hallo ransi;
ja könnte ich machen,da ich mich aber jetzt nach Stunden des Bastelns daran festgebissen habe möchte ich es auch versuchen zu lösen;
ich habe im Makro folgende Zeile zur Ausgabe gewählt;
.Range(.Cells(10, 2), .Cells(15, UBound(arrGruppen) + 2)) = arrTemp2
das heist ich beginne in Spalte B Zelle 10 bis Zeile 15 mit der Ausgabe was ja im Makro auch funktioniert,
ich suche jetzt eine Möglichkeit die Ausgabe von der Zelle aus, von wo die Funktion aufgerufen wird,
diese Ausgabe hinzukriegen.
Gruss HermannZ

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige