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에서는 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
어떻게해야합니까?
답변:
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으로.
먼저 표준 모듈에서 다음 사용자 정의 기능을 입력하십시오.
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 (사용자 정의 함수)는 설치 및 사용이 매우 쉽습니다.
통합 문서를 저장하면 UDF도 함께 저장됩니다. 2003 년 이후 Excel 버전을 사용하는 경우 파일을 .xlsx가 아닌 .xlsm으로 저장해야합니다.
UDF를 제거하려면 다음을 수행하십시오.
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)
있습니까?
ROW() - 1
대신 사용하십시오. 참고. 매크로가있는 파일에서는 문제가 없지만 하나가 없으면 자극적이고 무서운 모양의 팝업을 만듭니다.
내가 사용한 다른 방법 :
A1
을 L1
제로로A2
쓰기=1-A1
B2
쓰기=IF( AND( A1=1, A2=0), 1-B1, B1)
B2
수식 복사C2:L2
A2:L2
수식을 행에 복사3:4096
첫 번째 열에서 최소 유효 비트가 포함 된 모든 이진 문자열을 순서대로 생성합니다. 마지막 행 (4096)은 모두 행입니다.
이것은 의존하지 않으므로 ROW()
(자유롭게 이동할 수 있음) 길이를 직접 늘릴 수 있으며 이진이 아닌 문자열로 일반화하는 것이 쉽지 않습니다. LibreOffice Calc 와도 작동합니다.
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)
그것은의 배열 수식 계산과 훨씬 작은 파일을 생성하는 것이 훨씬 빠릅니다
설명:
모든 이진 표현을 위에서 아래로 행으로 쓰면 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입니다.
당신이 찾고있는 것은 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 진수를 이진수로 변환하고 비트 이동을 검색하십시오.
ROUNDDOWN(A1/256,0)
당신 대신에 QUOTIENT(A1, 256)
, 또는 더 나은 사용하실 수 있습니다 BITRSHIFT(A1, 8)
. 후자은 또한 교체 할 수 있습니다 BITAND
또는MOD
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'
print
키워드가 함수처럼 호출 되도록 대괄호를 추가하십시오. 이렇게하면 Python 2.3+ 및 Python 3.0.0+와 호환됩니다.