gpt4 book ai didi

algorithm - 不确定数量的变量的 VBA 排列

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:20:09 24 4
gpt4 key购买 nike

最近我正在尝试获取不确定数量的变量的排列。对于未确定,我的意思是我的目标是为用户创建一个输入框来输入数字。

从简单开始。最初我的目标是获得一个 4 位数字的排列,每个数字都有不同数量的变量,即第一个数字只能是 A、B、C、D;第 2 位数字为 E、F;第三位为G、H等。代码如下:

Sub Permut()

Count = 1

For a = 1 To 4
For b = 1 To 2
For c = 1 To 2
For d = 1 To 2
For e = 1 To 2
'chr(97) is the alphabet "a"
Cells(Count, 1) = Chr(96 + a) & Chr(96 + Len(a) + b) & Chr(96 + Len(a) + Len(b) + c) & _
Chr(96 + Len(a) + Len(b) + Len(c) + d) & Chr(96 + Len(a) + Len(b) + Len(c) + Len(d) + e)
Count = Count + 1
Next
Next
Next
Next
Next

End Sub

这将为您提供 64 种不重复的不同组合。

只是想知道是否有一种方法可以概括这个过程,以便人们可以选择总共有多少个变量以及每个数字内有多少个变量?

谢谢。

最佳答案

这是一个解决方案,您可以将每个字符(数字)的最小值作为一个字符串传递给 Permut 函数,并将最大字符也作为一个字符串传递。当然,两个字符串应该具有相同数量的字符:

Function Permut(min, max)
Dim str, nxt, count

str = min
count = 1

Do While str < max
Cells(count, 1) = str
count = count + 1

nxt = ""
For i = Len(str) To 1 Step -1
If Mid(str, i, 1) < Mid(max, i, 1) Then
nxt = ChrW(AscW(Mid(str, i, 1))+1) & nxt
Exit For
End If
nxt = Mid(min, i, 1) & nxt
Next
str = Left(str, Len(str) - Len(nxt)) & nxt
Loop
Cells(count, 1) = str
End Sub

你可以这样调用它:

Permut "abc", "bcf"

该示例将在您的工作表上生成此列表:

abc
abd
abe
abf
acc
acd
ace
acf
bbc
bbd
bbe
bbf
bcc
bcd
bce
bcf

如何通过用户输入和按钮点击来执行此操作

如果您想调用此代码以响应某个事件,例如单击按钮,并想将用户首先输入 minmax 个字符串,然后按照以下步骤操作:

  1. 在您的工作表上放置一个 ActiveX 命令按钮(将其放在 D1 中的某处,以便为其他内容留出空间)
  2. 双击它以生成空的单击事件处理程序。如果这不起作用,请转到代码窗口并从窗口顶部的下拉列表中选择按钮的名称,然后从下一个下拉列表中选择单击
  3. 按如下方式完成该事件处理程序的代码(我假设该按钮名为 CommandButton1,但不要更改生成的名称):

代码:

Private Sub CommandButton1_Click()
Permut Range("B1"), Range("C1")
End Sub

此代码假定用户必须在单元格 B1C1 中输入 minmax 数字/字符>。 A 列当然是为代码的输出保留的。

有关如何添加命令按钮并将代码附加到其单击事件的更完整说明,请阅读 "Add a command button (ActiveX control)" in the Office manual .

关于algorithm - 不确定数量的变量的 VBA 排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35067607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com