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ビットの部分に分割し、2つの文字列を別々に計算してから、それらを連結します。
したがって、次のものがあります。
=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ưuVĩnhPhúcのコメントによると、OPはそれぞれ1つの2進数で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
セルの代わりに参照。マクロを含むファイルでは問題ありませんが、マクロを含まないファイルでは、刺激的で恐ろしい外観のポップアップが作成されます。
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)
これは、はるかに高速に計算してはるかに小さなファイルを生成する配列式です
説明:
すべてのバイナリ表現を上から下の行に書き込む場合、n番目のビットの反転/切り替えサイクル(lsbからカウント)は2 nです。各サイクルでは、前半(0〜2 n-1 -1)は0で、後半は1です。たとえば、lsb(右から1番目のビット)は2 1-1 = 1ビットごとに交互になります。 2番目のビットは2 2-1 = 2ビットごとに切り替わります...
結果として、2 nを法として、サイクル内の数値の現在位置を取得します。2n -1未満の場合はゼロビット、それ以外の場合は1です。
探しているのは12桁の2進数ごとなので、0〜4095(2 ^ 12-1)のすべての数値で「DEC2BIN」関数を使用するのが最善の策です。残念ながら、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進数から2進数への変換とビットシフトを検索して、これがどのように機能するかを理解してください。
ROUNDDOWN(A1/256,0)
単に使用するQUOTIENT(A1, 256)
か、さらに良いことができますBITRSHIFT(A1, 8)
。後半にも置き換えることができるBITAND
かMOD
Excelの外部にデータを作成しますが、Excelでテーブルを取得するために開くことができる.csvを作成する回答。
これはpythonを使用しますが、シェル言語でも実行できます。pythonがインストールされている場合は、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+と互換性があります