0과 1의 모든 조합으로 테이블을 만드는 방법


15

Excel에서는 12 개의 공백에 대해 1과 0의 모든 조합으로 테이블을 생성해야합니다.

1 1 1 1 1 1 1 1 1 1 1 1

0 1 1 1 1 1 1 1 1 1 1 1

0 0 1 1 1 1 1 1 1 1 1 1

0 0 0 1 1 1 1 1 1 1 1 1

등등과 같은 모든 조합을 얻는 등

0 1 0 1 0 1 0 1 0 1 0 1

어떻게해야합니까?


어떤 Excel 버전을 사용하십니까?
Máté Juhász


1
그는 이진수를 고차 및 저차로 나눈 다음 연결을 사용하여 두 부분을 함께 스티칭 할 수 있습니다.
복원 모니카

8
원하는 출력을 표현할 때 각 숫자가 하나의 문자열이 아닌 별도의 셀에 있어야한다고 생각합니까?
Baldrickk

4
나중에 참조 할 수 있도록 Stack Exchange 사용자에게 감사하는 방법은 해당 ▲ 버튼을 사용하는 것입니다. 당신을 위해 일하고 올바른 결과를 얻은 답을 얻으려면 그 ✔ 버튼을 사용하십시오. 둘 이상의 답변이 효과가 있으면 가장 좋아하는 답변을 선택하십시오.
wizzwizz4

답변:


27

2 ^ 12 = 4096이므로 4096 개의 셀이 필요합니다 (12 비트의 경우 12 개).

원칙적으로 다음 명령을 A1 ~ A4096에 넣습니다.

=Right("00000000000" & Dec2Bin(Row()-1),12)

그럴 수도 있지만 0 ... 511 (9 비트)에 대해서만 작동합니다. 그래서 우리는 트릭을 적용합니다 : 우리는 숫자를 3 비트와 9 비트 부분으로 나누고 두 문자열을 개별적으로 계산 한 다음 연결합니다.

따라서 당신은 가지고 있습니다 :

=RIGHT("00" & DEC2BIN((ROW()-1)/512),3) & RIGHT("00000000" & DEC2BIN(MOD((ROW()-1),512)),9)

편집 : 선택적 자릿수 인수를 알지 못했습니다. 그것을 사용하면이 기능을 제공합니다 :

=DEC2BIN((ROW()-1)/512,3) & DEC2BIN(MOD((ROW()-1),512),9)

이것을 셀 A1-A4096에 넣으십시오.

편집 2 : Lưu Vĩnh Phúc의 의견에 따라 OP는 각각 하나의 이진수로 12 열을 원할 수 있습니다. 이 경우

=MID( DEC2BIN((ROW()-1)/512,3) & DEC2BIN(MOD((ROW()-1),512),9) ,COL(),1)

모든 세포 A1에서 L 4096으로.


23

다음 공식을 복사하여 붙여 넣으십시오 A1.

=MOD(QUOTIENT(ROW()-1,2^(COLUMN()-1)),2)

그런 다음을 (를) 위로 드래그하세요 L4096.

스크린 샷

이 수식은 숫자의 n 번째 비트 (n> = 0)를 추출합니다. 숫자는 정수를 2 ^ n으로 나눈 다음 계수 2를 계산합니다.


9

먼저 표준 모듈에서 다음 사용자 정의 기능을 입력하십시오.

Public Function BigBinary(r As Range) As String
    Dim addy As String, s1 As String, s2 As String

    addy = r.Address(0, 0)
    s1 = "=DEC2BIN(INT(A1/2^27),9)&DEC2BIN(INT(MOD(A1,2^27)/2^18),9)&DEC2BIN(INT(MOD(A1,2^18)/2^9),9)&DEC2BIN(MOD(A1,2^9),9)"
    s1 = Replace(s1, "A1", addy)
    s = Evaluate(s1)
    BigBinary = s
End Function

이것은 36 "비트"의 문자열을 반환합니다. 그런 다음 A1에 다음을 입력하십시오.

=ROW()-1

A4096을 통해 복사

에서 B1 입력 :

=RIGHT(bigbinary(A1),12)

B4096을 통해 복사 하십시오 .

데모

UDF (사용자 정의 함수)는 설치 및 사용이 매우 쉽습니다.

  1. Alt- F11VBE에서 창을 제공합니다
  2. Alt- I, Alt- M새로운 모듈을 엽니 다
  3. 내용을 붙여 넣고 VBE 창을 닫습니다.

통합 문서를 저장하면 UDF도 함께 저장됩니다. 2003 년 이후 Excel 버전을 사용하는 경우 파일을 .xlsx가 아닌 .xlsm으로 저장해야합니다.

UDF를 제거하려면 다음을 수행하십시오.

  1. 위와 같이 VBE 창을 엽니 다
  2. 코드를 지우다
  3. VBE 창을 닫습니다

Excel에서 UDF를 사용하려면

=myfunction(A1)

일반적으로 매크로에 대한 자세한 내용은 다음을 참조하십시오.

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

UDF에 대한 세부 사항은 다음을 참조하십시오.

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

이 기능을 사용하려면 매크로를 활성화해야합니다!


분명히 하나만 사용할 수 =RIGHT(bigbinary(ROW()-1),12)있습니까?
wizzwizz4

@ wizzwizz4 당신은 맞습니다 ... UDF ()에
게리의 학생

방금 매크로를 읽었으며 과도하다는 것을 알았습니다. 공식을 상자에 직접 붙여 넣은 다음 Excel의 클릭 / 드래그 기능을 사용하여 모든 셀 참조를 변경하거나 셀 ROW() - 1대신 사용하십시오. 참고. 매크로가있는 파일에서는 문제가 없지만 하나가 없으면 자극적이고 무서운 모양의 팝업을 만듭니다.
wizzwizz4

1
@ wizzwizz4 나는이 사용 ) (UDF를 이미 내 VBA 도구 상자에 있었기 때문에
게리의 학생

3

내가 사용한 다른 방법 :

  • A1L1제로로
  • A2쓰기=1-A1
  • B2쓰기=IF( AND( A1=1, A2=0), 1-B1, B1)
  • B2수식 복사C2:L2
  • A2:L2수식을 행에 복사3:4096

첫 번째 열에서 최소 유효 비트가 포함 된 모든 이진 문자열을 순서대로 생성합니다. 마지막 행 (4096)은 모두 행입니다.

이것은 의존하지 않으므로 ROW()(자유롭게 이동할 수 있음) 길이를 직접 늘릴 수 있으며 이진이 아닌 문자열로 일반화하는 것이 쉽지 않습니다. LibreOffice Calc 와도 작동합니다.


3

1에서 4096까지의 모든 행에 대해 A에서 L까지 각 셀에 다음 공식을 입력하십시오.

=IF(MOD(ROW() - 1, 2^(13 - COLUMN())) < 2^(12 - COLUMN()), 0, 1)

요청한 것과 같은 공백이 있는 문자열 모든 것을 원한다면 이것을 마지막 열에 넣으십시오.

=A1 & " " & B1 & " " & C1 & " " & D1 & " " & E1 & " " & F1 & " " & G1 & " " & H1 & " " & I1 & " " & J1 & " " & K1 & " " & L1

그런 다음 M4096까지 행을 끝까지 끕니다.

보다 일반적인 솔루션을 위해 Z1과 같은 일부 셀 또는 명명 된 셀과 같은 비트 수를 넣고 NumOfBits다음 공식을 사용하십시오.

=IF(MOD(ROW() - 1, 2^(NumOfBits + 1 - COLUMN())) < 2^(NumOfBits - COLUMN()), 0, 1)

행 및 열 오프셋을 변경하여 셀을 시작 셀로 사용하도록 쉽게 수정할 수도 있습니다.

힘 대신 비트 단위 연산을 사용하여 최적화 된 버전 :

=IF(BITAND(ROW() - 1, BITLSHIFT(1, 13 - COLUMN()) - 1) < BITLSHIFT(1, 12 - COLUMN()), 0, 1)

=IF(BITAND(ROW() - 1, BITLSHIFT(1, NumOfBits + 1 - COLUMN()) - 1) < BITLSHIFT(1, NumOfBits - COLUMN()), 0, 1)

가장 빠른 방법 :

  • 위의 수식 중 하나를 복사
  • 를 눌러 F5(또는 Ctrl+ G)를 입력 A1은 : L4096는 전체 범위를 선택
  • 붙여 넣으려면 + 를 누른 F2다음CtrlV
  • Ctrl+ Shift+를 누릅니다 Enter. 팔. 끝났습니다. 드래그 할 필요가 없습니다

그것은의 배열 수식 계산과 훨씬 작은 파일을 생성하는 것이 훨씬 빠릅니다


설명:

모든 이진 표현을 위에서 아래로 행으로 쓰면 ns 비트의 뒤집기 / 토글주기 (lsb부터 계산)는 2 n 입니다. 각 사이클에서 전반 (0에서 2 n-1 -1까지)은 0이되고 마지막 반은 1이됩니다. 예를 들어 lsb (오른쪽에서 첫 번째 비트)는 2 1-1 = 1 비트 마다 교대로 나타납니다 . 두 번째 비트는 2 2-1 = 2 비트 마다 토글됩니다 ...

결과적으로 사이클로에서 숫자의 현재 위치를 얻기 위해 모듈로 2n 을 취합니다 .2 n-1 보다 작 으면 0 비트이고, 그렇지 않으면 1입니다.


1

당신이 찾고있는 것은 12 자리 이진 숫자마다 있기 때문에 가장 좋은 방법은 0에서 4095까지의 모든 숫자에서 "DEC2BIN"기능을 사용하는 것입니다 (2 ^ 12-1). 불행히도 DEC2BIN은 최대 8 자리까지만 작동하므로 최종 수식은 연결로 인해 약간 까다로워 보입니다.

 =DEC2BIN(ROUNDDOWN(A1/256,0),4)&DEC2BIN(A1-256*ROUNDDOWN(A1/256,0), 8)

DEC2BIN은 변환 할 숫자와 출력하려는 ​​자릿수를 사용합니다. 4와 8을 결합하여 12를 얻었습니다. 첫 번째 4 자리를 최고 값으로 옮기려면 256 (2 ^ 8)으로 나누고 다른 하위 값은 무시하도록 내림합니다. 더 작은 값의 자릿수는이 값을 빼서 255 이상으로 계속 계산됩니다.

이것이 어떻게 작동하는지 이해하기 위해 10 진수를 이진수로 변환하고 비트 이동을 검색하십시오.


1
@Herb의 답변과 비교할 때 좋은 코드 "골프 골프"(짧은 텍스트 작성)이지만 A1이 더 유연한 ROW ()를 사용하는 하드 코드를 작성하는 것처럼 보입니다. 왜 511까지 작동하지만 255라고 말합니다. 둘 중 하나가 다른가요, 아니면 다른 버전의 Excel에서 차이가 있습니까?
TOOGAM

ROUNDDOWN(A1/256,0)당신 대신에 QUOTIENT(A1, 256), 또는 더 나은 사용하실 수 있습니다 BITRSHIFT(A1, 8). 후자은 또한 교체 할 수 있습니다 BITAND또는MOD
phuclv

-1

Excel 외부에서 데이터를 생성하지만 Excel에서 테이블을 가져 오기 위해 열 수있는 .csv를 생성하는 답변입니다.

이것은 파이썬을 사용하지만 쉘 언어로도 수행 할 수 있습니다. 파이썬이 설치되어 있으면 cmd.exe에서 실행하십시오.

python -c "for i in range(0,2**12): print (','.join((j for j in '{:b}'.format(i).zfill(12))))" > binary.csv

이것은 원하는 내용을 포함하는 파일 (binary.csv)을 생성하며, 질문에서 원하는 것처럼 별도의 셀의 각 숫자는 생각합니다.

설명:

python -c                    < call python passing in a string for the program to run
for i in range(0,2**12):     < for each value from 0 to 12 bits
print (                      < print...
','.join(                    < comma separated...
(j for j in                  < each character from...
'{:b}'.format(i)             < binary representation of current value
.zfill(12))))"               < padded with '0' to length 12
> binary.csv                 < and output to 'binary.csv'

4
저는 유권자가 아니지만 "Excel에서 생성해야합니다 ..."입니다. 이것은 우수하지 않습니다. CSV를 가져오고 셀을 수정하려고 할 때마다 (예 : 더 많거나 적은 행) 올바른 위치에 셀을 복사하는 것은 쉽지 않습니다.
Tom Carpenter

이것은 파이썬 <3이지만> = 2.3입니다. 앞으로 호환성을 위해 print키워드가 함수처럼 호출 되도록 대괄호를 추가하십시오. 이렇게하면 Python 2.3+ 및 Python 3.0.0+와 호환됩니다.
wizzwizz4
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.