2016-08-01 30 views
-2

在EXCEL VBA中,我如何将一个整数分隔成可以数学运算的单个数字,例如: (1 * 8),(2 * 16),(3 * 32)等分解为1,2,3,4,5,6,7,8,9的整数123456789; 1 * 8,2 * 16,3 * 32仅仅是例子,实际的乘数可以是不同的,例如, 1 * 1024,2 * 2048等。初始整数(123456789)是来自VBA项目中另一个模块的变量(id)。如果我没有清楚解释,我表示歉意。抱歉格式(这是我在stackoverflow上的第一篇文章)。如何将一个整数分隔为数字

Option Explicit 
Sub NUMalpha() 

Private Property Get num() As Integer 
    NUMlong = Int(id) 
End Property 

Dim Digit_1 As Integer 

Dim Digit_2 As Integer 

Dim Digit_3 As Integer 

Dim Digit_4 As Integer 

Dim Digit_5 As Integer 

Dim Digit_6 As Integer 

Dim Digit_7 As Integer 

Dim Digit_8 As Integer 

Dim Digit_9 As Integer 

Digit_1 = left(NUMlong, 1) 

Digit_2 = Mid(NUMlong, 2, 1) 

Digit_3 = Mid(NUMlong, 3, 1) 

Digit_4 = Mid(NUMlong, 4, 1) 

Digit_5 = Mid(NUMlong, 5, 1) 

Digit_6 = Mid(NUMlong, 6, 1) 

Digit_7 = Mid(NUMlong, 7, 1) 

Digit_8 = Mid(NUMlong, 8, 1) 

Digit_9 = right(NUMlong, 1) 

End Property 

End Sub 
+1

查找长度或字符串。然后使用中间函数,从1到1的字符串长度进行for循环,每次读取1个字符。使用循环来定位您正在阅读的字符。然后,您可以将单个字符分配给变量以进行数学操作,也可以在循环中执行数学操作并保持结果的总计。这将取决于数学是什么。 –

+0

嗨戴夫。我不清楚你在哪里得到1 * 8 2 * 16等,请尝试更清楚地解释这一点。 –

+1

你到目前为止尝试过哪些编码? –

回答

0

VBA溶液

Sub test() 
    Dim sNum As string, i As Long, mulitp As Variant, aryNum As Variant 

    sNum = Format(Range("A1").Value, "0") 
    mulitp = 8 
    ReDim aryNum(1 To Len(sNum)) As Variant 

    For i = 1 To Len(sNum) 
     aryNum(i) = Mid(sNum, i, 1) * mulitp * 2^(i - 1) 
    Next i 

    MsgBox Application.Sum(aryNum) 
End Sub 

工作表式解

使用下面的公式 =SUMPRODUCT(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)*1,8*2^(ROW(INDIRECT("1:"&LEN(A1)))-1))

这不是一个阵列式,所以按进入,不 ctrl + shift + enter

enter image description here

0

123456789大于最大整数大小(-32,768至32,767)值在VBA大。

Sub SplitLong() 

    Dim digits() As Long 
    Dim intValue As Long 
    Dim i As Long 
    Dim strValue As String 

    intValue = 123456789 
    strValue = intValue 

    ReDim digits(Len(strValue) - 1) As Long 
    For i = 1 To Len(strValue) 
     digits(i - 1) = Mid$(strValue, i, 1) 
    Next 

End Sub 
相关问题