Excel で数字を個別の桁に分割する方法

Excel で数字を個別の桁に分割する方法

さまざまな長さの数字を別々の桁に分割し、各桁を操作するかなり簡単な方法を知っている人はいますか? おそらく Excel 自体で実行できますが、いくつかの基準を満たす結果のリストだけが必要なので、マクロの方がよいと思います。例: 1234 は 1、2、3、4 に分割されます。次に、これらをそれぞれ 2 乗し、2 乗の合計が数値として返されます (1^2 + 2^2 + 3^2 + 4^2 = 30)。ここで、結果を選択した数値 (たとえば 3) で割ることができる場合にのみ、マクロは指定された数値とそれに対応する結果 (A1 = 1234、A2 = 30) をセルに入力します。これは、i = 1 から 10000 までのすべての数値に対して実行され、制約を満たす数値のみのリストが作成されます。

ありがとう

答え1

Excel VBA のマクロでこれを実行したいですか、それとも方向を示すだけのポインターですか?

これは最も効率的な方法ではないかもしれませんが、一つの方法です。

数値の範囲を調べ、各数値を文字列に変換します。例: sValue = Trim(Str(I))

次にLEN(sValue)の各桁の値を取得し、それを2乗します。

例えば、J = 1 の場合、Len(sValue) の結果 = Result + (Val(Mid(sText, J, 1)) ^ 2) 次の J

結果を取得したら、要求された基準を実行し、それが整数であることを確認します(例)例:(結果 / 除数)= Round(結果 / 除数、0)

結果を必要なセルに入力します。必要な回数だけ繰り返します(例:10000)。

これは私が作成したサンプルであり、あなたの例には問題なく機能すると思います (3711 行の回答が得られます)。要件に合わせて Const 値を変更するだけです。

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

答え2

完全を期すために、VBA を使用せずにこれを行う方法は次のとおりです。

  1. この配列数式を+ +B1で入力しますCtrlShiftEnter

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

  2. 次の数式を入力してくださいA1:

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

  3. 好きなだけ行数を入力します。あなたの場合は 10,000 です。

  4. 0フィルターして列のの値を非表示にするAか、値をコピー/貼り付けしてから並べ替えてA、 の値を持つすべての行を削除します0

関連情報