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으로.
답변
다음 공식을 복사하여 붙여 넣으십시오 A1
.
=MOD(QUOTIENT(ROW()-1,2^(COLUMN()-1)),2)
그런 다음을 (를) 위로 드래그하세요 L4096
.
이 수식은 숫자의 n 번째 비트 (n> = 0)를 추출합니다. 숫자는 정수를 2 ^ n으로 나눈 다음 계수 2를 계산합니다.
답변
먼저 표준 모듈에서 다음 사용자 정의 기능을 입력하십시오.
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 (사용자 정의 함수)는 설치 및 사용이 매우 쉽습니다.
- Alt– F11VBE에서 창을 제공합니다
- Alt– I, Alt– M새로운 모듈을 엽니 다
- 내용을 붙여 넣고 VBE 창을 닫습니다.
통합 문서를 저장하면 UDF도 함께 저장됩니다. 2003 년 이후 Excel 버전을 사용하는 경우 파일을 .xlsx가 아닌 .xlsm으로 저장해야합니다.
UDF를 제거하려면 다음을 수행하십시오.
- 위와 같이 VBE 창을 엽니 다
- 코드를 지우다
- 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
이 기능을 사용하려면 매크로를 활성화해야합니다!
답변
내가 사용한 다른 방법 :
- 칠
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)
가장 빠른 방법 :
- 위의 수식 중 하나를 복사
- 를 눌러 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입니다.
답변
당신이 찾고있는 것은 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 진수를 이진수로 변환하고 비트 이동을 검색하십시오.
답변
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'