【问题标题】:finding the largest binary number from a range of cells从一系列单元格中找到最大的二进制数
【发布时间】:2017-11-14 23:19:35
【问题描述】:

我在几个单元格范围内有一些二进制数的数据,从 A2 到 A8,B2 到 B8,依此类推,直到 G 列。 现在,我想从上面的行中检查最大的二进制数并将其粘贴到单元格中,在最后使用的范围下方两行。 (即,将 A 行中的最大二进制数粘贴到 A10 中,依此类推)。 我没有找到任何可以找到二进制数值的函数,并且我运行的代码找出了将它们视为自然数的最大数。 您的帮助将不胜感激。 谢谢!

【问题讨论】:

  • 二进制数据有多长(按位计算)?所有二进制文件的长度都一样吗?
  • 长度为 5 位,是的,长度相同。 [00110, 10110, 10000] 等

标签: vba excel binary max


【解决方案1】:

好的,首先我创建了一个将二进制转换为十进制并存储在模块中的函数。 (你可以将它存储在任何你想要的地方)这个函数可以处理任何大小的二进制文件

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

之后我制作了循环遍历 sheet1 上所有二进制文件的 sub(可能需要为您的工作表更改)

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

希望对你有所帮助..

【讨论】:

  • 这很好用!只是出于好奇,如果我在 Excel 中有数据,并输入 VLOOKUP 公式:=VLOOKUP(MAX(C8:C13),C8:D13,2,FALSE),它会在不使用 VBA 的情况下解决我的问题吗??
  • 老实说我不知道​​,试一试:)
【解决方案2】:

您可以使用excel函数Bin2Dec将它们变成十进制

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

【讨论】:

    【解决方案3】:

    假设您的二进制值是文本字符串,此公式将值转换为数字,找到 MAX,然后转换回文本字符串

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

    CTRL+SHIFT+ENTER

    确认

    或者您可以使用此版本,它使用AGGREGATE 函数找到最大值,并且不需要“数组条目”

    =DEC2BIN(AGGREGATE(14,6,BIN2DEC(A2:A8+0),1))

    【讨论】:

    • @jayyM 您使用的是哪个公式?除了二进制值之外,该范围内不能有任何内容。如果 VLOOKUP 有效,根据您的评论,那么我假设您的值是数字,在这种情况下,我希望您可以只使用 MAX(A2:A8)
    • 是的,除了二进制数之外什么都没有。 VLOOKUP 很好。但我假设 excel 仅将二进制数视为正常值,并且不需要先将其转换为十进制。我认为使用 MAX 比 VLOOKUP 更简单
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多