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
WendEnd 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