vba - 如何使用vba创建二进制序列?

标签 vba excel

我希望创建一个 Excel 表格,它表示最多 20 个位置的二进制序列,即 2^20。我研究过使用 Excel 公式 dec2bin,不幸的是它只能生成最多 10 个位置的二进制序列,即 2^10。我需要生成一个更大的二进制序列。

我曾尝试用 vba 对其进行编码,但在尝试小规模解决问题时遇到了一些问题。首先,我的代码产生了很多重复项。例如,当我将表设置为 3 个位置时,我会生成 28 个结果,而我应该只得到 8 个结果。其次,我的代码非常慢。

任何关于如何以更快的速度制作更强大的表格的提示或技巧将不胜感激!这是我一直在小规模使用的代码...

Sub BinarySequence()

Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim x As Integer
Dim Length As Integer

Application.ScreenUpdating = False

'Define 1st scenario
x = 1
Range("Start").Value = x 'where "Start" is defined as cell A1

'set default range
Length = Range("Sizei") 'where "Sizei" is defined as 3'
For i = 1 To Length
Range("start").Offset(0, i).Value = 1
Next

'code to generate first level binary sequence (i loop)
For i = 1 To Length

'code to generate second level binary sequence (j loop)
    For j = 1 To Length

'code to generate third level binary sequence (k loop)
        For k = 1 To Length

        x = x + 1
        Range("Start").Offset(0, i).Value = 0
        Range("Start").Offset(0, j).Value = 0
        Range("Start").Offset(0, k).Value = 0

'copy and paste scenario number
        Range("Start").Offset(x - 1, 0).Value = x

'copy and paste result
        Range("Result").Select 'where result is defined as row 1
        Selection.Copy
        Range("Result").Offset(x - 1, 0).Select
        Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
        , SkipBlanks:=False, Transpose:=False
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

'reset scenario select for next loop
        Range("start").Offset(0, k).Value = 1
        Next k

'reset scenario select for next loop
    Range("start").Offset(0, j).Value = 1
    Next j

'reset scenario select for next loop
Range("Start").Offset(0, i).Value = 1
Next i

Application.ScreenUpdating = True

End Sub

最佳答案

引用这篇文章了解 VBA DecToBin 函数 - https://groups.google.com/d/msg/comp.lang.visual.basic/KK_-zdrKmLQ/Y36tj5FenJcJ 。如果我正确理解了这个问题,您可以使用 Dec2Bin 函数和以下逻辑来生成表(尽管完成所有 20 个位置需要一段时间):

    Sub BinaryTable()

        Size = 12
        StartingRow = 1
        RowIndex = StartingRow

        Application.ScreenUpdating = False

        For i = 0 To (2 ^ Size - 1)
            Cells(RowIndex, "A") = Dec2Bin(i, 20)
            RowIndex = RowIndex + 1
        Next

        Application.ScreenUpdating = True

    End Sub

此外,了解 Excel's precision limits 也很重要如果你的数字足够大。

关于vba - 如何使用vba创建二进制序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34292323/

相关文章:

excel - 将循环放入 Select Case 会产生错误

excel - UDF : Handling ranges and variable numbers of arguments

vba - Excel VBA - 为什么包含数字的分割字符串的算术比较有效?

Excel编辑公式在编辑模式和点模式之间切换

c# - 导出DataGridView数据到excel

excel - 有没有办法将 "Properties"窗口也用于 Excel 中的单元格?

Excel 无法隐藏超过 53 行

excel - EnterKey 在 VBA 用户窗体中按下按钮

excel - Excel VBA错误处理程序找不到文件…如何跳过它?

vba - 将 Excel 中的值从字符串更改为数字