다양한 길이의 숫자를 별도의 숫자로 나누고 각 숫자를 조작하는 매우 간단한 방법을 아는 사람이 있습니까? 아마도 Excel 자체에서 할 수 있지만 몇 가지 기준에 맞는 결과 목록에만 관심이 있으므로 매크로가 더 좋을 것이라고 생각합니다. 예: 1234는 1, 2, 3, 4로 나뉩니다. 그런 다음 각각을 제곱하고 제곱의 합이 숫자로 반환됩니다(1^2 + 2^2 + 3^2 + 4^2 = 30). ) 이제 결과를 선택한 숫자(예: 3)로 나눌 수 있는 경우에만 매크로는 주어진 숫자와 해당 결과(A1 = 1234, A2 = 30)로 셀을 채울 것입니다. 모든 i = 1부터 30까지에 대해 이 작업을 수행합니다. 10000, 제약 조건을 충족하는 숫자로만 구성된 목록을 생성합니다.
감사해요
답변1
Excel VBA의 매크로를 사용하여 이 작업을 수행하시겠습니까, 아니면 방향을 가리키는 포인터만 사용하시겠습니까?
이것은 가장 효율적인 방법은 아니지만 한 가지 방법입니다.
숫자 범위를 살펴보고 각 숫자에 대해 문자열로 변환합니다. 예: sValue = Trim(Str(I))
그런 다음 LEN(sValue)의 각 숫자에 대해 값을 얻고 이를 제곱합니다.
예: J = 1 To Len(sValue) Result = Result + (Val(Mid(sText, J, 1)) ^ 2) Next 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
사용 하여 이 배열 수식을 입력하세요 .CtrlShiftEnter{=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
.