dポイントプレゼントキャンペーン実施中!

エクセルでビット1をカウント

Javaには Integer.bitCount() というメソッドがあるようです。これをエクセルの数式で表現できますでしょうか。
100を入れると3、 10や5なら2、8や4や2や1なら、1というようにです。

A 回答 (4件)

Javaの`Integer.bitCount()`メソッドは、与えられた整数のビット表現においてセットされているビットの数を数えます。

これをExcelの数式で表現するには、ビット演算を使用することは難しいですが、`SUBSTITUTE`や`LEN`などの関数を使って近似することはできます。

以下は、Excel数式の例ですが、これは正確なビット数を返すものではありません。`A1`に整数があると仮定します:

```excel
=LEN(SUBSTITUTE(SUBSTITUTE(A1,"0",""),"",""))
```

これは、整数のビット表現において0以外の文字(1)の数を数える簡易的な方法です。ただし、`Integer.bitCount()`と同等の効率的なビット演算をExcelで直接行うことは難しいです。
    • good
    • 1

>100を入れると3、 10や5なら2、8や4や2や1なら、1というようにです。



を実現するだけであれば、A1セルに入力した数値の結果をB1セルに表示するとして、B1セルに

=LEN(SUBSTITUTE(IF(A1>32767,#NUM!,VALUE(IF(A1>=16384,"1","0")&IF(MOD(A1,16384)>=8192,"1","0")&IF(MOD(A1,8192)>=4096,"1","0")&IF(MOD(A1,4096)>=2048,"1","0")&IF(MOD(A1,2048)>=1024,"1","0")&IF(MOD(A1,1024)>=512,"1","0")&TEXT(IF(A1<512,DEC2BIN(A1),DEC2BIN(MOD(A1,512))),"000000000"))),"0",""))

を入れることで可能です。

但し、A1に入力できる数値は0~32767の範囲とし、それ以外の数値の場合の結果は保証されないものとします。
    • good
    • 3

こんにちは



「Integer.bitCount() 」を正確には知りませんので、完全互換にはならないかも知れませんけれど・・・

エクセルの関数に2進数表記に変換するものがありますので、これで対象の数を変換して「1」の数を数えれば似た様なものを作ることは可能です。
例えば、A1セルに元の値(整数)があるとして、
 =LEN(SUBSTITUTE(DEC2BIN(A1),"0",""))
とすることで、多少は似た計算が可能です。

異なる点は、DEC2BIN関数は9ビットまでの対応なので0~511までしか計算できません。
また、負数は補数表現になる関係からビット数が異なるので違う結果になります。
とは言え、上記を元に工夫すれば、同等の計算を作成することは可能と思います。

例えば、2進化する部分を
 DEC2BIN(QUOTIENT(A1,512))&DEC2BIN(MOD(A1,512),9)
のような計算に置換えることで、対象を0~262143(=512*512-1)まで拡張できます。
(8ビットずつにした方がわかりやすいかも知れませんが・・)

同じ要領で桁数を上げてゆけば、正の数は互換にできるでしょうし、負の数は先に判定して別に計算するようにすれば、同等のものを作成することも可能と思いますので、ご自身で試してみてください。
    • good
    • 1

ユーザー関数判りますか?



以下をお試しください。
Function BitCount(r As Range)

Dim n As Long
If r.Count > 1 Then
BitCount = "#error"
Exit Function
End If
BitCiunt = 0
n = r
While n > 0
If (n And 1) Then BitCount = BitCount + 1
n = Int(n / 2)
Wend
End Function
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A