So teilen Sie Zahlen in Excel in einzelne Ziffern auf

So teilen Sie Zahlen in Excel in einzelne Ziffern auf

Kennt jemand eine einigermaßen einfache Möglichkeit, Zahlen unterschiedlicher Länge in einzelne Ziffern aufzuteilen und dann jede Ziffer zu bearbeiten? Man könnte das wahrscheinlich in Excel selbst machen, aber ich denke, ein Makro wäre besser, da ich nur an einer Liste mit Ergebnissen interessiert bin, die ein paar Kriterien erfüllen. Beispiel: 1234 wird in 1, 2, 3 und 4 aufgeteilt. Jede dieser Zahlen wird dann quadriert und die Summe der Quadrate wird als Zahl zurückgegeben (1^2 + 2^2 + 3^2 + 4^2 = 30). Nur wenn das Ergebnis durch eine gewählte Zahl geteilt werden kann, sagen wir 3, füllt das Makro eine Zelle mit der angegebenen Zahl und dem entsprechenden Ergebnis: A1 = 1234, A2 = 30. Es macht das für alle i = 1 bis 10000 und erstellt eine Liste mit nur den Zahlen, die die Bedingung erfüllen.

Danke

Antwort1

Möchten Sie, dass das Makro in Excel VBA dies tut, oder nur einen Zeiger in eine Richtung?

Dies ist möglicherweise nicht der effizienteste Weg, aber es ist einer.

Gehen Sie den Zahlenbereich durch und konvertieren Sie jede Zahl in einen String, z. B. sValue = Trim(Str(I)).

dann erhält man für jede Ziffer in LEN(sValue) den Wert und quadriert ihn

zB Für J = 1 Bis Len(sValue) Ergebnis = Ergebnis + (Val(Mid(sText, J, 1)) ^ 2) Nächstes J

Sobald Sie ein Ergebnis haben, führen Sie die gewünschten Kriterien aus und bestätigen Sie, dass es sich um eine ganze Zahl handelt (zum Beispiel), z. B. (Ergebnis / Divisor) = Runden(Ergebnis / Divisor, 0)

und geben Sie Ihre Ergebnisse in die erforderlichen Zellen ein. Wiederholen Sie dies für so viele Iterationen, wie Sie benötigen (z. B. 10000).

Hier ist ein Beispiel, das ich gerade erstellt habe, und ich denke, es funktioniert für Ihr Beispiel ganz gut (ergibt 3711 Zeilen mit Antworten), ändern Sie einfach die Const-Werte entsprechend Ihren Anforderungen.

Sub SplitNumber()
Const StartRange = 1
Const EndRange = 10000
Const Divisor = 3
Const InputCol = 1
Const ResultCol = 2

Dim StartRow, Result As Integer
Dim sValue As String

StartRow = 1
I = StartRange
CurrentRow = StartRow

While I <= EndRange
    sValue = Trim(Str(I))
    Result = 0
    If Len(sValue) > 1 Then
        For J = 1 To Len((sValue))
            Result = Result + (Val(Mid(sValue, J, 1)) ^ 2)
        Next J
    Else
        Result = Val(sValue) ^ 2
    End If
    If (Result / Divisor) = Round(Result / Divisor, 0) Then
        Cells(CurrentRow, InputCol) = I
        Cells(CurrentRow, ResultCol) = Result
        CurrentRow = CurrentRow + 1
    End If
    I = I + 1
Wend

End Sub

Antwort2

Der Vollständigkeit halber hier die Vorgehensweise ohne VBA:

  1. Geben Sie diese Matrixformel B1mit Ctrl+ Shift+ ein.Enter

    {=SUMSQ(1*MID(ROW(),ROW(OFFSET($A$1,,,LEN(ROW()))),1))}

  2. Geben Sie diese Formel ein in A1:

    =IF(MOD(B1,3)=0,ROW(),0)

  3. Füllen Sie nach unten so viele Zeilen aus, wie Sie möchten. In Ihrem Fall 10.000.

  4. 0Filtern Sie, um Werte in der Spalte auszublenden, AODER kopieren/fügen Sie Werte ein und sortieren Aund löschen Sie dann alle Zeilen mit einem Wert von 0.

verwandte Informationen