ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 195|回复: 3

[求助] 求助,如何根据给出的列编号,统计满足条件行的列求和

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-3-25 22:24 | 显示全部楼层 |阅读模式
本帖最后由 tangteng822 于 2024-3-26 13:09 编辑

1.png
图片1.png
如上图所示:
H4需要根据 E4中的型号去统计列编号1~15+17+19(有的编号只有3个,如1~15+25)的工程量
需要在表2中查找SJC29151S对应的行,然后再去查找编号1~15+17+19的列,然后汇总。

K2也是一样的,根据E4中的型号去统计列编号62+75(有的编号只有1个,如65)的工程量

不知道各位老大有什么解决方法没有。

先谢谢各位大佬了。
根据编号列求和.zip (16.97 KB, 下载次数: 6)

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-26 13:07 | 显示全部楼层
不知道有大佬能解决吗, 主要是1~15,后面还加了17+19 ,,有的时候后面只加一个,有的时候要加2个,3个。

TA的精华主题

TA的得分主题

发表于 2024-3-26 14:24 | 显示全部楼层
这个只能VBA解决了,简单写了几句代码,点击按钮【计算重量】就可以了
26001.jpg
  1. Sub JiSuanZhongLiang() '计算重量

  2.     Dim i As Long, j As Integer, k As Integer
  3.     Dim m As Integer
  4.     Dim zRow As Long
  5.     Dim benTi, benZhong As Double
  6.     Dim jiaoTi, jiaoZhong As Double
  7.    
  8.     zRow = Sheets("型号重量表").Cells(Sheets("型号重量表").Rows.Count, 1).End(xlUp).Row

  9.     For j = 4 To 19 Step 4 '循环明细表中每个型号
  10.    
  11.         For i = 2 To zRow
  12.             If Cells(j, 5) = Sheets("型号重量表").Cells(i, 1) Then
  13.             
  14.                 '计算本体重量
  15.                 benZhong = 0
  16.                 benTi = FenjieBentiBianhao(Cells(j, 7))
  17.                 For k = LBound(benTi) To UBound(benTi)
  18.                     benZhong = benZhong + Sheets("型号重量表").Cells(i, 1 + benTi(k))
  19.                 Next k
  20.                 Cells(j, 8) = benZhong
  21.                
  22.                 '计算脚重
  23.                 For m = 0 To 3
  24.                     jiaoZhong = 0
  25.                     jiaoTi = FenjieBentiBianhao(Cells(j + m, 10))
  26.                     For k = LBound(jiaoTi) To UBound(jiaoTi)
  27.                         jiaoZhong = jiaoZhong + Sheets("型号重量表").Cells(i, 1 + jiaoTi(k))
  28.                     Next k
  29.                     
  30.                     Cells(j + m, 11) = jiaoZhong
  31.                     
  32.                 Next m
  33.                
  34.                 Exit For
  35.             End If
  36.             
  37.         Next i

  38.     Next j

  39. End Sub

  40. Private Function FenjieBentiBianhao(bianHao As String)  '分解本体编号

  41.     '1~15+17+19
  42.     Dim bArr, lianXu
  43.     Dim result() As Integer, r As Integer
  44.     Dim i As Integer, j As Integer
  45.    
  46.     bArr = Split(bianHao, "+")
  47.    
  48.     For i = LBound(bArr) To UBound(bArr)
  49.         
  50.         If InStr(bArr(i), "~") > 1 Then '分解1至15
  51.         
  52.             lianXu = Split(bArr(i), "~")
  53.             For j = Int(lianXu(0)) To Int(lianXu(1))
  54.                 r = r + 1
  55.                 ReDim Preserve result(1 To r)
  56.                 result(r) = j
  57.             Next j
  58.             
  59.         Else '分解单个整数
  60.             r = r + 1
  61.             ReDim Preserve result(1 To r)
  62.             result(r) = Int(bArr(i))
  63.         End If
  64.     Next i
  65.    
  66.     FenjieBentiBianhao = result
  67.    
  68. End Function
复制代码


根据编号列求和.rar

27.51 KB, 下载次数: 1

TA的精华主题

TA的得分主题

发表于 2024-3-26 14:29 | 显示全部楼层
=LET(A,TOROW(HSTACK(ROW(INDIRECT(SUBSTITUTE(TEXTBEFORE(G4,"+"),"~",":"))),TEXT({1;-1}%,SUBSTITUTE(TEXTAFTER(G4,"+"),"+",";"))/1),2,1),SUMPRODUCT(IFERROR((SIGN(MATCH(型号重量表!$B$1:$DQ$1,A,)))*(型号重量表!$B$2:$DQ$41)*(型号重量表!$A$2:$A$41=E4),)))
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-26 09:29 , Processed in 0.036595 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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