我期待創建一個Excel表格,它可以表示最多20個位置的二進制序列,即2^20。我研究過使用excel公式dec2bin,不幸的是它只產生一個二進制序列,最多10個地方,即2^10。我需要生成一個更大的二進制序列。如何使用vba創建二進制序列?
我已經在vba中編碼了這個問題,並且在嘗試小規模解決問題時遇到了一些問題。首先,我的代碼產生了很多重複。例如,當我將表格設置爲3個地方時,我只能得到8個結果時產生28個結果。其次,我的代碼非常慢。
任何提示或技巧,我如何能夠以更快的速度生產更強大的桌子將非常感謝!這裏是代碼,在小規模我一直在使用...
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
我開始[這裏](http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) – Raystafarian