Registriert seit: 04.01.2016
Version(en): 2016 oder 2010
28.05.2016, 10:31
(Dieser Beitrag wurde zuletzt bearbeitet: 28.05.2016, 10:38 von WillWissen.
Bearbeitungsgrund: Code in Tags gesetzt
)

Guten Morgen,
habe mir nun die letzten drei Tage den Kopf zerbrochen und kam leider immer noch nicht auf die Lösung.
ich möchte eine Userform erstellen, in die man eine Primzahl über ein Textfeld eingibt, in Textfeld 2 soll dann ein entsprechender Text kommen ob es eine Primzahl ist oder nicht und welche zahl der Kleinste Teiler ist.
Anbei meinen Code:Code:
Private Sub CommandButton2_Click()
Dim x As Double
Dim prim As Double
Dim a As Double
Dim b As Double
b = 0
x = Me.TextBox1
If x = 1 Then
MsgBox ("Eine Primzahl muß einen Wert über 1 haben")
Exit Sub
End If
For prim = 1 To x
a = x / prim
If a = Int(a) Then
b = b + 1
End If
Next
If b > 2 Then
Me.TextBox2 = x & " ist keine Primzahl!" & vbCr & "Der erste gemeinsamme Teiler ist " & a
Exit Sub
Else
Me.TextBox2 = x & " ist eine Primzahl!"
End If
End Sub
Das Problem ist ich komme einfach nicht auf den kleinsten Teiler :05:
Registriert seit: 12.04.2014
Version(en): Office 365
Hallo
In Punkto Makro kann ich nicht viel helfen aber es gibt Ungereimtheiten in deiner Anfrage.
Zitat:eine Primzahl über ein Textfeld eingibt
[...]"Der erste gemeinsamme Teiler ist "
[...]welche zahl der Kleinste Teiler ist.
Entweder sucht du den kleinsten Teiler oder den gemeinsamen Teiler.
Für einen gemeinsamen Teiler brauchst du allerdings mindestens zwei Zahlen.
Wir sehen uns!
... Detlef
Meine Beiträge können Ironie oder Sarkasmus enthalten.
Registriert seit: 04.01.2016
Version(en): 2016 oder 2010
(28.05.2016, 10:50)shift-del schrieb: Hallo
In Punkto Makro kann ich nicht viel helfen aber es gibt Ungereimtheiten in deiner Anfrage.
Zitat:eine Primzahl über ein Textfeld eingibt
[...]"Der erste gemeinsamme Teiler ist "
[...]welche zahl der Kleinste Teiler ist.
Entweder sucht du den kleinsten Teiler oder den gemeinsamen Teiler.
Für einen gemeinsamen Teiler brauchst du allerdings mindestens zwei Zahlen.
ich habe ein Feld in das man eine Zahl einträgt
z.B. 27
danach soll im zweiten Feld stehen:
27 ist keine Primzahl der erste ganzzahlige Teiler ist 3
Registriert seit: 13.04.2014
Version(en): 365
Gruß
Edgar
Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Registriert seit: 04.01.2016
Version(en): 2016 oder 2010
(28.05.2016, 14:25)BoskoBiati schrieb: Hallo,
für Deine erste Aufgabe guckst Du hier:
http://excelformeln.de/formeln.html?welcher=129
Zweite Aufgabe dürfte hiermit erschlagen werden:
http://excelformeln.de/formeln.html?welcher=167
Hallo,
Danke für deine Antwort, aber leider muss das ganze über VBA programmiert werden und nicht über excel Formeln.
Liebe Grüße
Marco
Registriert seit: 04.01.2016
Version(en): 2016 oder 2010
28.05.2016, 18:43
(Dieser Beitrag wurde zuletzt bearbeitet: 29.05.2016, 10:23 von Rabe.
Bearbeitungsgrund: eine Zitatebene entfernt, Code-Tags gesetzt
)
(28.05.2016, 14:25)BoskoBiati schrieb: Hallo,
für Deine erste Aufgabe guckst Du hier:
http://excelformeln.de/formeln.html?welcher=129
Zweite Aufgabe dürfte hiermit erschlagen werden:
http://excelformeln.de/formeln.html?welcher=167
Also Leute es Läuft!!!!!!!!!
Hier ist der Code:
Code:
Private Sub CommandButton2_Click()
Dim x As Double
Dim prim As Double
Dim a As Double
Dim b As Double
b = 0
x = Me.TextBox1
If x = 1 Then
MsgBox ("Eine Primzahl muß einen Wert über 1 haben")
Exit Sub
End If
For prim = 2 To x
a = x / prim
If a = Int(a) Then
b = b + 1
Exit For
End If
Next
Debug.Print a & "A"
Debug.Print x & "x"
Debug.Print b & "b"
Debug.Print prim & "prim"
If prim > 2 Then
Me.TextBox2 = x & " ist keine Primzahl !" & vbCr & "Der erste ganzzahlige Teiler ist " & prim
Exit Sub
Else
Me.TextBox2 = (x & " ist eine Primzahl")
End If
End Sub
'es war nur die Variable für die If Anweisung falsch anstatt B hätte es Prim sein müssen :)
Registriert seit: 29.09.2015
Version(en): 2030,5
30.05.2016, 00:05
(Dieser Beitrag wurde zuletzt bearbeitet: 30.05.2016, 00:06 von snb.)
Code:
Sub M_snb()
y = 23
For j = 3 To y Step 2
If y Mod j = 0 Then Exit For
Next
MsgBox y & " ist " & IIf(j = y, "", "k") & "ein Primzahl"
End Sub
Registriert seit: 13.04.2014
Version(en): 365
Hallo,
dann eher so:
Code:
Sub M_snb()
Dim y As Long
Dim j As Long
y = Cells(1, 1)
For j = 3 To y Step 2
If y Mod j = 0 Then Exit For
Next
MsgBox y & " ist " & IIf(j = y, "", "k") & "eine Primzahl" & IIf(j <> y, ", Teiler: " & j, "")
End Sub
Gruß
Edgar
Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Registriert seit: 14.04.2014
Version(en): Office 2013/2016/2019/365
30.05.2016, 12:22
(Dieser Beitrag wurde zuletzt bearbeitet: 30.05.2016, 12:26 von chris-ka.)
Hi,
anbei noch weniger Durchläufe und Fehlerbehandlung :)
prim_mit_makro.xlsb (Größe: 21,78 KB / Downloads: 5)
lg Chris
Feedback nicht vergessen.
3a2920576572206973742064656e20646120736f206e65756769657269672e
Registriert seit: 13.04.2014
Version(en): 365
30.05.2016, 12:24
(Dieser Beitrag wurde zuletzt bearbeitet: 30.05.2016, 14:07 von Rabe.
Bearbeitungsgrund: [html]-Tag entfernt
)
Hallo,
das Makro von snb braucht, je nach Größe der Zahl 16-17s, das des TE mehr als die dreifache Zeit und bringt ein falsches Ergebnis!:
Arbeitsblatt mit dem Namen 'Tabelle1' |
| A | B | C | D | E |
1 | 600000001 | snb 16988 | Bosko 0 | Func 0 | TE 54725 |
2 | Primzahl | 600000001 ist keine Primzahl !
Der erste ganzzahlige Teiler ist 600000001 | | | |
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg |
Schneller geht es damit:
Code:
Private Sub M_bosko()
Dim y As Double
Dim j As Double
Dim x As Long
Dim bol As Boolean
bol = False
y = Cells(1, 1)
x = Int(Sqr(y))
For j = 3 To x Step 2
If y Mod j = 0 Then bol = True: Exit For
Next
MsgBox y & " ist " & IIf(bol = False, "", "k") & "eine Primzahl" & IIf(bol = True, ", Teiler: " & j, "")
End Sub
Gruß
Edgar
Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.