2017-11-14 9 views
0

G列までA2からA8、B2からB8などのいくつかのセル範囲にいくつかの2進数のデータがあります。 ここでは、上記の行から最大の2進数を確認して、最後に使用された範囲の2行下のセルに貼り付けます。 (すなわち、行Aから最大の2進数をA10にペーストするなど)。 私は二進数の値を見つけることができる関数を見つけていません。実行したコードは、それらを自然数とみなして最大数を求めます。 あなたの助けに感謝します。 ありがとうございました!セルの範囲から最大の2進数を見つける

+0

バイナリデータの長さ(ビット単位)はどのくらいですか?バイナリはすべて同じ長さですか? –

+0

長さは5ビットです。すべてが同じ長さです。 [00110、10110、10000]など – JayyM

答えて

0

にそれらを変更するために、Excel関数BIN2DECを使用することができます。この機能は、私が

Sub FindLargestBinary() 
On Error Resume Next 
Dim wb As Workbook 
Dim ws As Worksheet 
Set wb = Application.ThisWorkbook 
Set ws = wb.Sheets("Sheet1") 

Dim tempVal, tempRow As Integer 
Dim iCoulmn, iRow As Integer 

For iCoulmn = 1 To 7 'Run from A to G 
    tempRow = 2 
    tempVal = 0 
    For iRow = 2 To 8 'Run from row 2 to 8 
     If BinToDecConverter(ws.Cells(iRow, iCoulmn).Value) > tempVal Then tempVal = BinToDecConverter(ws.Cells(iRow, iCoulmn).Value): tempRow = iRow ' Check if current binary i higher then any previous 

    Next iRow 
    ws.Cells(iRow + 1, iCoulmn).Value = ws.Cells(tempRow, iCoulmn).Value 'Print highest binary 
Next iCoulmn 

End Sub 
(あなたのシートのためにこれを変更する必要があります)Sheet1のすべてのbinarysをループ部分を作っその後

Function BinToDecConverter(BinaryString As String) As Variant 
    Dim i As Integer 
    For i = 0 To Len(BinaryString) - 1 
     BinToDecConverter = CDec(BinToDecConverter) + Val(Mid(BinaryString, Len(BinaryString) - i, 1)) * 2^i 
    Next 
End Function 

バイナリ任意のサイズを扱う(あなたが好きな場所あなたはそれを保存することができます)これはあなたを助け

・ホープ..

+0

これは非常にうまくいきます!好奇心のために、データをExcelに入れて、VLOOKUPの式を= VLOOKUP(MAX(C8:C13)、C8:D13,2、FALSE)にすると、VBAを使用せずに問題を解決できますか? – JayyM

+0

ホーンになるにはわからない、試してみてください:) –

+0

VLOOKUP works too !!! !!!また、助けてくれてありがとう。:) – JayyM

0

は大丈夫最初のi 10進数とモジュールに格納するバイナリを変換する関数を作った小数

Function MaxBin(r as range) 
Dim curmax as long 
Dim s as range 
For each s in r 
    If Application.WorksheetFunction.Bin2Dec(s.Text) > curmax Then curmax = Application.WorksheetFunction.Bin2Dec(s.Text) 
Next s 
MaxBin = curmax 
End Function 
0

と仮定すると、あなたのバイナリ値は、テキスト文字列ですが、この式はMAXを見つけ、数値に値を変換し、テキスト文字列

0に戻って変換し、 CTRL + SHIFTで確認

=TEXT(MAX(A2:A8+0),"00000")

+

ENTERまたはあなたがAGGREGATE機能を使用して、最大を見つけ、 "アレイエントリ"

を必要としない、このバージョンを使用することができます=DEC2BIN(AGGREGATE(14,6,BIN2DEC(A2:A8+0),1))

+0

私は答えを受け取っていない。それは#VALUEを示す! – JayyM

+0

@jayyMあなたはどちらの式を使用していますか?バイナリ値以外の範囲には何も存在できません。 VLOOKUPがあなたのコメントに応じて動作する場合、私はあなたの値が数値であると仮定します。その場合、MAX(A2:A8)だけを使用することができます。 –

+0

はい、2進数以外は何もありません。 VLOOKUPは問題ありません。しかし、私はexcelが2進数を通常の値として扱うと仮定し、それを最初にDecimalに変換する必要はありません。 MAXを使うことは、VLOOKUPよりも簡単だと思います – JayyM

関連する問題