网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月02日漏签0天
vba吧 关注:17,059贴子:66,694
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 41回复贴,共1页
<<返回vba吧
>0< 加载中...

单元格有许多数字,但要求他们组合相加等于固定值

  • 只看楼主
  • 收藏

  • 回复
  • 抽刀断水1937
  • 人海孤鸿
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这可能会有许多组合,但要求是一个单元格里的数字只能用一次


  • ninart
  • 英雄豪杰
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
把细节具体点,哪些单元格,什么数字,几个数字相加固定值是多少


2025-08-02 08:28:14
广告
不感兴趣
开通SVIP免广告
  • 抽刀断水1937
  • 人海孤鸿
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
比如说:
A列
100
150
200
310
490
510
580
600
710
800
250
300
350
任意单元格组合相加等于1200,分别写出列在B列且每单元格数字,在B列只能用一次
如:
B列显示:100,800,300
350,250,600


  • 抽刀断水1937
  • 人海孤鸿
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这是我在具体工作中碰到:
家具厂算板材使用量,因板材宽度是1200宽。这样我从重多宽度规格中迅速知道用几块板。


  • 酒残影孤树斑斓
  • 后起之秀
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
数组+条件不就行了


  • 酒残影孤树斑斓
  • 后起之秀
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
使用循环语句最外层循环要循环m-n次,内层循环为循环取值过程,先两所有单元格数据赋值给数组,增加执行效率,假如第一层循环,需要取n个值,就要执行n次循环模块来取值,用if判定是否相加等于1200,如果等于,两此组值存入另一个数组中,依次循环,最后两数组赋值给单元格就可以了


  • 28...0@qq.com
  • 后起之秀
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • 酒残影孤树斑斓
  • 后起之秀
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Sub sum1200()
Dim arr(), a0(), b0(), c0()
Set lt = Cells(Rows.Count, 1).End(xlUp)
arr() = Application.Transpose(Range(Cells(1, 1), lt))
n = UBound(arr())
For i = 1 To n
For j = 1 To n
For k = 1 To n
a = arr(i)
b = arr(j)
c = arr(k)
If a < b And b < c Then
su = a + b + c
If a + b + c = 1200 Then
m = m + 1
ReDim Preserve a0(1 To m)
ReDim Preserve b0(1 To m)
ReDim Preserve c0(1 To m)
a0(m) = a
b0(m) = b
c0(m) = c
End If
End If
For l = 1 To m
Cells(l, 2) = a0(l)
Cells(l, 3) = b0(l)
Cells(l, 4) = c0(l)
Next


2025-08-02 08:22:14
广告
不感兴趣
开通SVIP免广告
  • marchwen01
  • 后起之秀
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
用规划求解可好?


  • ninart
  • 英雄豪杰
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
a列放数据,b1放要求的和,c列出结果
Public arr1, j As Long, z%, k%
Public arr2(1 To 65536) As String
Sub recu()
Sheet1.Range("C:C").ClearContents
Application.ScreenUpdating = False
tt = Timer
j = 0
z = [A65536].End(xlUp).Row
arr1 = WorksheetFunction.Transpose(Range("a1", Cells(z, 1)))
k = Cells(1, 2)
xi 1, 0, ""
If j > 0 Then
Range(Cells(1, 3), Cells(j, 3)) = WorksheetFunction.Transpose(arr2)
End If
MsgBox "找到 " & j & " 个解! 花费" & Format(Timer - tt, "0.00") & "秒"
Application.ScreenUpdating = True
End Sub
Sub xi(i%, x%, y$)
If x + arr1(i) = k Then
j = j + 1
arr2(j) = y & arr1(i)
End If
If i < z And x < k Then '
If x + arr1(i) < k Then
xi i + 1, x + arr1(i), y & arr1(i) & ","
End If
xi i + 1, x, y
End If
End Sub


  • 酒残影孤树斑斓
  • 后起之秀
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
调用xi模块?


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 41回复贴,共1页
<<返回vba吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示