2013-09-06 2 views
1

VBA를 사용하여 비트 문자열을 숫자로 변환하는 Excel 매크로를 만드는 중입니다. 그들은 이진수가 아니며 각각 '1'은 자신의 숫자를 나타냅니다.비트 번호를 숫자로 변환하는 방법

는 예컨대 : 왼쪽 1,100000000000000000010001

는 제 비트 등, "1", 제 2 비트는 「2」, 제 3 비트를 나타내는 "0"을 나타냄. 각 문자열의 비트의 총 수량은 내가 VBA 지금처럼 및 표시 결과를 변환 할 25

: 1, 내가 텍스트 나누기를 사용하여 시도했지만 성공하지 못한 2, 21, 25

. 이 같은

+4

'Mid()'를 사용하여 각 자릿수에 액세스하고 관련 번호 (배열 또는 워크 시트 범위에 저장할 수 있음)로 바꿀 수 있습니다. 그러나 어떤 * VBA를 모르면 배우는 곳이 아닙니다. –

답변

0

다른 비 VBA 용액을 상기에 근거 OP '초기 접근법과 여러 개의'전환 '을 용이하게하기위한 레이아웃 (예 : 복사 공식을 적합하게 맞춘 것) :

enter image description here

+1

셀 BZ에 오타가 있습니다. "= LEFT (BY1, LEN (BY1) -1)"이어야합니다. 도와 줘서 고맙다! –

+0

@ user2755335 당신이이 접근법을 시도 했음에 틀림 없다는 것을 확인하기 위해, 나는 놀랍게도 (그리고 감탄) 다소 고백합니다. 어떤 흥미를 기대하지도 않고 쉽게 복사 할 수있는 형식으로 수식을 반복하지 않았습니다.내가 사용한 BA1의 공식은''A1 = 1 ',''(BB1의 비슷한 공간)입니다. 즉 1,2,21 대신에 결과가'1,2, 21 '이되도록 공간이 있습니다. '...'그러므로'-2'를 사용합니다. 그러나'-1'은 공백이 없으며, 실제로 잘 보입니다! 텍스트의 1 행에 오타가 있습니다 ('s'가 누락되어 있고 첫 번째 텍스트 상자에 ' – pnuts

+0

"0"을 제거하는 방법에 대한 아이디어는 무엇입니까? –

1

시도 뭔가 :

Sub Execute() 
    Dim buff() As String 
    Dim i As Integer, total As Double 

    buff = Split(StrConv(<theString>, vbUnicode), Chr$(0)) 
    total = 0 

    For i = 0 To UBound(buff) 
     Debug.Print (buff(i)) 
     'total = total + buff(i) * ?? 
    Next i 
End Sub 
+1

안녕하세요 @Makah, 저는 Excel 2010을 사용하고 있습니다.이 VBA를 복사하여 VBA에서 컴파일 할 때 Excel 모듈에 붙여 넣습니다. 오류가 발생했습니다. 네 번째 줄은 빨간색으로 보였다. –

+0

안녕하세요 @ user2755335, 실제 문자열 "0001010101001011010"을 (으)로 변경해야합니다 : – Makah

+0

'1, 2, 21, 25'을 어디에서 찾을 수 있습니까? – pnuts

0

이 VBA해야합니까? 이 같은 데이터 설정 보내기

Convert from bit string

B4 셀의 수식 및 B33 아래로 복사하는 것입니다 :

=IF(ROWS(B$3:B3)>LEN($B$1)-LEN(SUBSTITUTE($B$1,"1","")),"",FIND("@",SUBSTITUTE($B$1,"1","@",ROWS(B$3:B3)))) 

공식 세포

일반으로 포맷과 비트 문자열 셀 (B1)는 텍스트 형식입니다.

+0

감사합니다 @tigeravatar,이 훨씬 간단합니다. 그러나 나는 명령을 간신히 이해할 수 없다. 결과를 가로 방향, 즉 C1, C2 등으로 표시하려면 어떤 매개 변수를 변경해야합니까? –

+0

대신'COLUMNS (B $ 3 : B3)'이되도록'ROWS (B $ 3 : B3)'의 두 인스턴스를 모두 변경 한 후 오른쪽으로 복사 할 수 있습니다. – tigeravatar

1

이 고려 :

Public Function BitPicker(sIn As String) As String 
    For i = 1 To Len(sIn) 
     If Mid(sIn, i, 1) = 1 Then 
      BitPicker = BitPicker & i & "," 
     End If 
    Next 
     BitPicker = Mid(BitPicker, 1, Len(BitPicker) - 1) 
End Function 
+0

나는 그것을 좋아하지만 (+1) 증진이되어야합니까 (아니면 올바른 장소를보고 있지 않습니까)? – pnuts

+1

안녕하세요, pnuts : A1과 같이 셀로 데이터를 구상했습니다. = BitPicker (A1)을 다른 셀에 입력하면 셀에 결과가 표시됩니다 (쉼표로 구분). 투표 해 주셔서 감사합니다! –

0

이 시도 :

Function ConvertMyRange(Rng As Range) As String 

    Dim MyString As String 
    MyString = Rng.Text 
    Dim OutPutString As String 

    For i = 1 To Len(MyString) 
     If Mid(MyString, i, 1) = "1" Then OutPutString = OutPutString & ", " & i 
    Next i 

    ' Get rid of first ", " that was added in the loop 
    If Len(OutPutString) > 0 Then 
     OutPutString = Mid(OutPutString, 2) 
    End If 

    ConvertMyRange = OutPutString 

    End Function 

당신의 입력, 출력 1, 2, 21, 25

관련 문제