Excel Vba 2010 extrahieren

Mit folgendem Code hab ich nun die Primfaktoren einer positiven Zahl x:
Function primfaktoren(zahl) As String
Dim dummy As String
Dim test
Dim wurzel
Dim pruefen
test = zahl
wurzel = Sqr(zahl)
If zahl

Mein Excel 2003 scheitert am primzahltest(test) => gibt eine Fehlermeldung „Sub oder Function nicht definiert“
Ist das jetzt eine (neue) eingebaute Funktion des Excel 2010?
Oder hast Du die entsprechende Function nicht mit ins Board gestellt?
Bei eingebauter Funktion kann ich nur schwer helfen, im anderen Falle bitte die Function noch hier einstellen.

machs doch so, dann kannst du über Z1 bestimmen welche der Primzahlen du in der betr. Zelle haben möchtest:
(Funktion „primzahltest(test)“ unbekannt)
(Var „Test“ eretzt durch „Zahl“)

>Function primfaktoren(zahl,Z1) As integer
>
>

Dim wurzel
Dim pruefen

>Dim Z2 as byte
>
>

If zahl While primzahltest(zahl) = False
For pruefen = 2 To wurzel

> If (zahl/ pruefen) = Int(zahl/ pruefen) Then
>
> zahl= zahl/ pruefen
> wurzel = Sqr(zahl)
Z2=Z2+1:if Z2=Z1 then primfaktoren = prüfen

Exit For
End If
Next
Wend

End Function

Nur in Kürze:
Vor Beginn der Schleifen setzen Sie

Zeile=0
Set rge = Range(„A1:A1“)

Wenn ein neuer Faktor gefundenwurde, weisen Sie den Faktor der Zelle „A“&Zeile zu:

rge.Cells(Zeile, 1).Value = Faktor

und erhöhen

Zeile=Zeile+1.

Das müßte laufen…

Gruß, fury

Sorry, das übersteigt meine Excel-VBA-Kenntnisse.

Hallo layaxx,

Mit folgendem Code hab ich nun die Primfaktoren einer
positiven Zahl x:
Function primfaktoren(zahl) As String

Zahl scheint ein benamtes Feld zu sein?

Dim dummy As String
Dim test
Dim wurzel
Dim pruefen
test = zahl
wurzel = Sqr(zahl)

Grundsätzlich fehlen mir bei allen Variablen die Deklarationen (Ganzzahl, Fließkomma, …).

If zahl

Ich nehm mal an, geht erst ab Excel07:smile:

Hi,

ich habe die erforderliche Function primzahltest mal nachgebaut.
Dabei ist mir dann aufgfallen, dass Du das Ergebnis aus einer Function heraus bekommst.
Aber:
In Functions kann mann nur die Zelle ausgeben, in der die Function steht. Nachbarzellen kann ich nicht füllen.
Daher mein Vorschlag:
Nutze die Function Primzahlfaktoren und zerlege dann das Ergebnis mit einer weiteren Funktion.
Beispiel:
in A2 steht die Zahl, die in Primzahlen zerlegt werden soll.
In E2 steht =primfaktoren(A2)
In der zelle, in der der erste Faktor stehen soll steht =PosTrenn4($E2;" * „; 1 )
In der zelle, in der der 2. Faktor stehen soll steht =PosTrenn4($E2;“ * „; 2 )
In der zelle, in der der 3. Faktor stehen soll steht =PosTrenn4($E2;“ * "; 3 )
(bitte das $E2 jeweils anpassen)
usw.

Und hier der Code zum Zerlegen des Strings:

Function PosTrenn4(CutString As String, Cutter As String, Separation As Double)
Dim CutterLen As Double
Dim I As Double
Dim CheckText As String
Dim OldStart As Double
Dim NewStart As Double
Dim SeparCount As Double
Dim CutText As String
Dim OutText As String

CutterLen = Len(Cutter)
OldStart = 1
NewStart = 1
CutText = CutString
For I = 1 To Len(CutString)
 CheckText = Mid(CutString, I, CutterLen)
 If CheckText = Cutter Then '########### Längere Strings zulassen #################
 SeparCount = SeparCount + 1
 End If
Next I
If SeparCount + 1 Separation Then
 I = 1 + Len(CutString)
 Else
 NewStart = I
 OutText = Mid(CutString, OldStart, NewStart - OldStart)
 PosTrenn4 = OutText
 CutText = Mid(CutString, NewStart + CutterLen, Len(CutString) - OldStart)
 OldStart = NewStart + CutterLen
 End If
 End If
 Next I
 If CutText OutText And SeparCount 
Hoffe es hilft Dir weiter

Hallo layaxx, anbei einfacher Lösungsansatz:

Mit folgendem Code hab ich nun die Primfaktoren einer
positiven Zahl x:
Function primfaktoren(zahl) As String
Dim dummy As String
Dim test
Dim wurzel
Dim pruefen

Dim ZEILE
ZEILE = 0

test = zahl
wurzel = Sqr(zahl)
If zahl

Ohne mich groß in den Code einzuarbeiten würd ich vorschlagen eine weitere Zählvariable hinzuzunehmen, die immer hochzählt, wenn ein weiterer Faktor gefunden wurde.
Jedes Mal, wenn sie hochzählt, rutscht du in der Zeile bzw. Spalte weiter.
Dafür gibt es die schöne Funktion
Range.Cells(Zeile, Spalte)

z.B. also…

Dim Spalte As Integer
Spalte = 1

While zahl >= 2 Do


Range.Cells(1, Spalte).Value = zahl
'Cells(2,5) steht z.B. für B5


Spalte = Spalte + 1
Wend

Das müsstest du nur in deinen Code einarbeiten.
Mir sieht es grad etwas kompliziert und zu verschachtelt aus, als dass ich eben in 5 Minuten alles völlig nachvollziehe.
Deshalb der Tipp in allgemeiner Schreibweise.

Meld dich ruhig, wenn du weiter Hilfe brauchst

Hallo layaxx,

folgende UDF wandelt Dir einen Text des Musters
***…*
in einen Vector um:

Function string2vector(inval As String) As Variant
Dim numcount As Integer
Dim i As Integer
numcount = Len(inval) - Len(Replace(inval, „*“, „“)) + 1
ReDim outvector(numcount, 1)
i = 0
While InStr(inval, „*“) > 0
outvector(i, 0) = Left(inval, InStr(inval, „*“) - 1)
inval = Mid(inval, InStr(inval, „*“) + 1)
i = i + 1
Wend
outvector(i, 0) = inval
string2vector = outvector
End Function

Du kannst die Funktion in Deine bestehende Funktion einbinden.

Wichtig:
Deine Funktion muss danach als Arrayfunktion eingegeben werden, was folgendermaßen abläuft:

  • Markieren des erwarteten Ausgabebereiches (Spaltenorientiert)
  • Tippen der Funktion (z.B. =string2vector(A1)) in die Formelbar.
  • SHIFT-CTRL-ENTER zusammen zum Eingeben drücken.

Die Funktion erscheint dann simultan in allen markierten Zellen in geschweiften Klammern. Eventuell zuviel markierte Zellen geben #N/A! zurück.

Deine Funktion würde unter Einbeziehung meines Konverters dann folgendermaßen aussehen:

Function primfaktoren(zahl) As Variant
Dim dummy As String
Dim test
Dim wurzel
Dim pruefen
Dim i
test = zahl
wurzel = Sqr(zahl)
If zahl

Hallo layaxx,

hier mal mein Ansatz für eine (noch zu schreibende) Global-Funktion:

Sub Verteilen()
Dim uebergabe As String
Dim ueArr() As String
Dim i As Integer

uebergabe = „2*2*2*2*71“
ueArr = Split(uebergabe, „*“)

For i = LBound(ueArr) To UBound(ueArr)
MsgBox ueArr(i)
Next
End Sub

Für die Funktion sollte man dann noch Start-Zelle, etc. einbauen.

Gruß
Harry