Excel精英培训网

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

[已解决]按要求进行组合求和

[复制链接]
发表于 2014-10-21 13:20 | 显示全部楼层 |阅读模式
给出一列,例如1到35,要求能自动从中选出五个数进行组合求合,将所有组合均显示出来

附样表,A列是给出来的原始数据,现在要求从A列中任选五个数值,不允许重复,五个数的和等于要求的数值。例如和为99,求代码,能使用VBA最好。
同时附一组合求和的代码,和我要求的显示功能是一样的,但是其中不是显示的数据太多,不知道怎么修改成我需要的那种方式。(注我现在要求的是,必须任选五个不重复的数据,这五个数的和等于要求的数值。)
最佳答案
2014-10-21 15:12
按要求进行组合求和.rar (10.72 KB, 下载次数: 56)

按要求进行组合求和.rar

5.89 KB, 下载次数: 18

需要实现的数据

组合求和样例.rar

8.22 KB, 下载次数: 27

可参考的样例

发表于 2014-10-21 13:27 | 显示全部楼层
回复

使用道具 举报

发表于 2014-10-21 13:40 | 显示全部楼层
回复

使用道具 举报

发表于 2014-10-21 14:09 | 显示全部楼层
如果用逗号分隔,可以考虑取巧一下~~不过治标不治本,给你个参考吧

组合求和样例.rar

11.32 KB, 下载次数: 12

回复

使用道具 举报

发表于 2014-10-21 15:11 | 显示全部楼层
  1. Dim arr(1 To 5), brr(), re, k As Long, aa As String, n, a, b
  2. Sub demo()
  3.     tms = Timer
  4.     a = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
  5.     b = Val(InputBox("请输入和是多少?(如10)"))
  6.     re = Range("a1:a35")
  7.     ReDim brr(1 To WorksheetFunction.Combin(a, 5), 1 To 1)
  8.     k = 1
  9.     Call dg(0, 1)
  10.     MsgBox Format(Timer - tms, "0.000s ")
  11.     Range("c1").Resize(k, 1) = brr
  12. End Sub
  13. Sub dg(i As Long, t As Long)
  14.     Dim j As Long, m As Long
  15.     For j = i + 1 To a - 5 + t
  16.         arr(t) = re(j, 1)
  17.         n = n + arr(t)
  18.         aa = Join(arr, ",")
  19.         If t = 5 Then
  20.             If n = b Then
  21.                 brr(k, 1) = aa
  22.                 k = k + 1
  23.             End If
  24.         Else
  25.             Call dg(j, t + 1)
  26.         End If
  27.         n = n - arr(t)
  28.     Next
  29. End Sub
复制代码
楼主试试
回复

使用道具 举报

发表于 2014-10-21 15:12 | 显示全部楼层    本楼为最佳答案   
按要求进行组合求和.rar (10.72 KB, 下载次数: 56)
回复

使用道具 举报

发表于 2014-10-21 15:34 | 显示全部楼层
  1. Sub test()
  2.     Dim conn As Object, n%, sql$, selectstr$(), fromstr$(), wherestr$(), GetSumNum$
  3.     Columns(3).ClearContents
  4.     GetSumNum = Val(InputBox("请输入和是多少?(如10)"))
  5.     Set conn = CreateObject("Adodb.Connection")
  6.     conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
  7.     n = 5
  8.     ReDim selectstr(1 To n), fromstr(1 To n), wherestr(1 To n - 1)
  9.     For i = 1 To n
  10.        selectstr(i) = "a" & i & ".F1"
  11.        fromstr(i) = "[" & ActiveSheet.Name & "$A:A]a" & i
  12.        If i < n Then wherestr(i) = "a" & (i - 1) Mod n + 1 & ".F1<a" & i Mod n + 1 & ".F1"
  13.     Next
  14.     sql = "SELECT DISTINCT " & Join(selectstr, "&','&") & " FROM " & Join(fromstr, ",") & " WHERE " & Join(wherestr, " and ") & " and " & Join(selectstr, "+") & "=" & GetSumNum
  15.     Range("C1").CopyFromRecordset conn.Execute(sql)
  16.     conn.Close
  17.     Set conn = Nothing
  18. End Sub
复制代码
回复

使用道具 举报

发表于 2014-10-21 15:39 | 显示全部楼层
群子发过个,非常高效、实用,你去找找看
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 00:22 , Processed in 0.380030 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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