有人知道一种相当简单的方法可以将不同长度的数字分成不同的数字,然后对每个数字进行操作吗?可能可以在 Excel 中完成,但我认为使用宏会更好,因为我只对符合几个标准的结果列表感兴趣。示例:将 1234 分成 1、2、3 和 4。然后对每个数字求平方,并将平方和作为数字返回(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) 中的每个数字,获取其值并计算其平方
例如对于 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 的操作方法:
B1
使用Ctrl++输入此数组Shift公式Enter{=SUMSQ(1*MID(ROW(),ROW(OFFSET($A$1,,,LEN(ROW()))),1))}
在中输入此公式
A1
:=IF(MOD(B1,3)=0,ROW(),0)
填写您想要的行数。在您的例子中为 10,000。
- 过滤以隐藏
0
列中的值A
或复制/粘贴值,然后排序A
并删除所有值为的行0
。