楼主: lam_fukming
3591 3

[问答] 【求助:投行面试时遇到一个关于VBA的难题】 [推广有奖]

  • 3关注
  • 9粉丝

已卖:1921份资源

博士生

20%

还不是VIP/贵宾

-

威望
0
论坛币
6005 个
通用积分
12.2090
学术水平
43 点
热心指数
43 点
信用等级
40 点
经验
94521 点
帖子
324
精华
0
在线时间
25 小时
注册时间
2011-8-29
最后登录
2025-5-7

楼主
lam_fukming 发表于 2013-12-28 13:44:54 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

现有5个球 (A, B, C, D, E), 排成一直线的话, 总共有 5!= 120 个不同组合。请问如何把这120个组合, VBA运算后, 分别列出到worksheet上。


例如:

【求助:投行面试时遇到一个关于VBA的难题】.png


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:投行面试 VBA worksheet Works sheet 如何

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
wocacawo + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

大道無門,
千差有路,
透得此關,
乾坤獨步﹗

沙发
TimeT 发表于 2013-12-28 22:15:34
我试着编了个程序,在EXCEL中运行了一下,看来还行。而且如果把第3行NOfLetters=其他数(例如7)也行
Sub ListABCDE()
Dim NOfLetters As Long, TotalNum As Long, i As Long, j As Long, n As Long, sTemp As String
NOfLetters = 5 'can change to any integer number >2 (cannot very large, as TotalNum will be too large)
TotalNum = WorksheetFunction.Fact(NOfLetters) 'i.e. 5!=120
Dim S() As String
ReDim S(2 To NOfLetters, 0 To TotalNum - 1)
S(2, 0) = "AB": S(2, 1) = "BA"
For n = 3 To NOfLetters
For i = 0 To WorksheetFunction.Fact(n - 1) - 1
    S(n, i * n) = Chr(64 + n) & S(n - 1, i)  'add one char, chr(64+n)=nth char/letter, e.g. chr(64+3)="C"
    'then begin to swap the added char with each of the existing char, one by one to create a new S(n, xxx)
    For j = 1 To n - 1
    sTemp = Replace(S(n, i * n), Chr(64 + n), "$")
    sTemp = Replace(sTemp, Chr(64 + j), Chr(64 + n))
    S(n, i * n + j) = Replace(sTemp, "$", Chr(64 + j))
    Next j
Next i
Next n
'then print to the worksheet
For i = 1 To TotalNum
For n = 1 To NOfLetters
Sheets("Sheet1").Cells(i, n).Value = Mid(S(NOfLetters, i - 1), n, 1)
Next n
Next i
End Sub
已有 2 人评分论坛币 学术水平 收起 理由
wocacawo + 1 精彩帖子
Xaero + 100 + 1 精彩帖子

总评分: 论坛币 + 100  学术水平 + 2   查看全部评分

藤椅
lam_fukming 发表于 2013-12-29 15:35:02
TimeT 发表于 2013-12-28 22:15
我试着编了个程序,在EXCEL中运行了一下,看来还行。而且如果把第3行NOfLetters=其他数(例如7)也行
Sub  ...
Thanks for suggestion. Here is my code. It also works.


Sub ABCDE()
Dim x, y As Variant
    y = "ABCDE"
    x = ""
Call GetPermutation(x, y)
For i = 1 To Application.WorksheetFunction.Fact(Len(y))
    For j = 1 To Len(y)
    Cells(i, Len(y) + 1 - j) = Mid(Cells(i, 1), Len(y) + 1 - j, 1)
    Next j
Next i
End Sub


Sub GetPermutation(ByVal x, ByVal y)
Dim i, j, CurrentRow As Integer
CurrentRow = Application.WorksheetFunction.CountA(Columns(1))
    j = Len(y)
    If j < 2 Then
        Cells(CurrentRow + 1, 1) = x & y
    Else
        For i = 1 To j
            Call GetPermutation(x + Mid(y, i, 1), Left(y, i - 1) + Right(y, j - i))
        Next
    End If
End Sub

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
wocacawo + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

大道無門,
千差有路,
透得此關,
乾坤獨步﹗

板凳
likeermei 发表于 2014-1-12 13:27:53
牛叉

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 03:43