Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 600|回复: 4

求组 组合公式或宏代码

[复制链接]
发表于 2023-10-27 13:11 | 显示全部楼层 |阅读模式
本帖最后由 hui123789aim 于 2023-10-27 13:16 编辑

[tr]  [td=321]JHS69-abx-c-y[/td] [/tr]
[tr]  [td][/td] [/tr]
[tr]  [td]a= PM, DB, DC, EM, HM, LK,  EL [/td] [/tr]
[tr]  [td]b = 20, 25, 32, 40 [/td] [/tr]
[tr]  [td]C = 2 [/td] [/tr]
[tr]  [td]X = R, Blank [/td] [/tr]
[tr]  [td]y = RY48, RY64, B48, B64,  Blank[/td] [/tr]
[tr]  [td][/td] [/tr]
[tr]  [td][/td] [/tr]
[tr]  [td][/td] [/tr]
[tr]  [td][/td] [/tr]
[tr]  [td][/td] [/tr]
[tr]  [td][/td] [/tr]
[tr]  [td]最后组成JHS69-PM20r-2-RY48[/td] [/tr]
[tr]  [td]….[/td] [/tr]
[tr]  [td]需要全部可能自动项列出来,公式或者宏代码[/td] [/tr]

组合.rar

5.97 KB, 下载次数: 11

发表于 2023-10-30 15:31 | 显示全部楼层
本帖最后由 vba新手016 于 2023-10-30 15:33 编辑

组合.zip (20.09 KB, 下载次数: 8)
回复

使用道具 举报

发表于 2023-11-8 15:00 | 显示全部楼层
  1. Option Compare Text
  2. Sub 林木水demo()
  3. Dim a, b, c, x, y, i As Integer, temp, sr
  4. a = Array("PM", "DB", "DC", "EM", "HM", "LK", "EL")
  5. b = Array(20, 25, 32, 40)
  6. c = Array(2)
  7. x = Array("R", "Blank")
  8. y = Array("RY48", "RY64", "B48", "B64", "Blank")
  9. f = "JHS69-abx-c-y"
  10. Dim arr(), k, j, z, m, j1, brr
  11. z = 1
  12. For i = 1 To Len(f)
  13.     m = z
  14.     ReDim Preserve arr(1 To m)
  15.     temp = Mid(f, i, 1)
  16.     If temp Like "a" Then
  17.         m = z
  18.         z = z * (UBound(a) + 1)
  19.         k = 0
  20.         brr = arr
  21.         For j = 1 To m
  22.             For j1 = 0 To UBound(a)
  23.                 k = k + 1
  24.                 ReDim Preserve arr(1 To k)
  25.                 arr(k) = brr(m) & a(j1)
  26.             Next
  27.         Next
  28.     ElseIf temp Like "b" Then
  29.         m = z
  30.         z = z * (UBound(b) + 1)
  31.         k = 0
  32.         brr = arr
  33.         For j = 1 To m
  34.             For j1 = 0 To UBound(b)
  35.                 k = k + 1
  36.                 ReDim Preserve arr(1 To k)
  37.                 arr(k) = brr(m) & b(j1)
  38.             Next
  39.         Next
  40.     ElseIf temp Like "c" Then
  41.         m = z
  42.         z = z * (UBound(c) + 1)
  43.         k = 0
  44.         brr = arr
  45.         For j = 1 To m
  46.             For j1 = 0 To UBound(c)
  47.                 k = k + 1
  48.                 ReDim Preserve arr(1 To k)
  49.                 arr(k) = brr(m) & c(j1)
  50.             Next
  51.         Next
  52.     ElseIf temp Like "X" Then
  53.         m = z
  54.         z = z * (UBound(x) + 1)
  55.         k = 0
  56.         brr = arr
  57.         For j = 1 To m
  58.             For j1 = 0 To UBound(x)
  59.                 k = k + 1
  60.                 ReDim Preserve arr(1 To k)
  61.                 arr(k) = brr(m) & x(j1)
  62.             Next
  63.         Next
  64.     ElseIf temp Like "y" Then
  65.         m = z
  66.         z = z * (UBound(y) + 1)
  67.         k = 0
  68.         brr = arr
  69.         For j = 1 To m
  70.             For j1 = 0 To UBound(y)
  71.                 k = k + 1
  72.                 ReDim Preserve arr(1 To k)
  73.                 arr(k) = brr(m) & y(j1)
  74.             Next
  75.         Next
  76.     Else
  77.         m = z
  78.         For j = 1 To m
  79.             arr(j) = arr(j) & temp
  80.         Next
  81.     End If
  82. Next
  83. Range("I1").Resize(UBound(arr), 1) = Application.Transpose(arr)
  84. End Sub

复制代码
回复

使用道具 举报

发表于 2023-11-8 15:03 | 显示全部楼层
结果展示
回复

使用道具 举报

发表于 2023-11-15 19:34 | 显示全部楼层
本帖最后由 xhc123456789 于 2023-11-15 19:39 编辑

Dim d As Object, darr As Object            '''''''''''公共函数

Sub sss()    '''''''''触发递归程序
Dim f As String
Set d = CreateObject("scripting.dictionary")
Set darr = CreateObject("scripting.dictionary")
d("a") = Array("PM", "DB", "DC", "EM", "HM", "LK", "EL")
d("b") = Array(20, 25, 32, 40)
d("c") = Array(2)
d("x") = Array("R", "Blank")
d("y") = Array("RY48", "RY64", "B48", "B64", "Blank")
f = "JHS69-abx-c-y"
Getarr f, ""
Selection.range("a1").Resize(darr.Count) = Application.Transpose(darr.keys)
End Sub


Sub Getarr(txt As String, txts As String)  '''''''''递归程序
If Len(txt) = 0 Then darr(txts) = 1:DoEvents : Exit Sub
If d.exists(Left(txt, 1)) Then
    For Each a In d(Left(txt, 1))
        Getarr Mid(txt, 2, Len(txt)), txts & a
    Next
Else
        Getarr Mid(txt, 2, Len(txt)), txts & Left(txt, 1)
End If
End Sub

回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-4 02:51 , Processed in 0.263711 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表