ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 根据出库数据按时间和餐次生成出库单

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-30 19:45 | 显示全部楼层 |阅读模式
本帖最后由 yangqianming 于 2024-5-16 15:59 编辑

根据出库单模板的出库时间和餐次从出库数据中提取相关数据,并在总计栏汇总总价,
表中我已经模拟了4月3日的数据,请大佬们出手相助,谢谢!

生成出库单.rar (30.49 KB, 下载次数: 6)

TA的精华主题

TA的得分主题

发表于 2024-4-30 23:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. function t (){
  2.         let d = Sheets("出库单模板").Range("b2").Value()       
  3.         let data = Sheets("出库数据"). Range("a1").CurrentRegion.Value()
  4.         .filter(v=>  v[0].toString() == d.toString())
  5.                         .map((v,i) => [i+1,...v.slice(-4),null])
  6.         Sheets("出库单模板"). Range("h4").CurrentRegion.ClearContents()
  7.         Sheets("出库单模板"). Range("h4").Resize(data.length,data[0].length).Value2= data
  8. }
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-1 09:10 | 显示全部楼层
Sub 出库单()
Dim ar As Variant
Dim br()
With Sheets("出库数据")
    r = .Cells(Rows.Count, 1).End(xlUp).Row
    If r < 2 Then MsgBox "出库数据为空!": End
    ar = .Range("a1:f" & r)
End With
rr = Array("总计", "出库责任人签字:", "接收人签字:", "监督人签字:")
ReDim br(1 To UBound(ar), 1 To 5)
With Sheets("出库单模板")
    .UsedRange.Offset(3).Clear
    rq = .[b2]
    cc = .[d2]
    For i = 2 To UBound(ar)
        If ar(i, 1) <> "" Then
            If IsDate(ar(i, 1)) Then
                If ar(i, 1) = rq And ar(i, 2) = cc Then
                    n = n + 1
                    br(n, 1) = n
                    For j = 3 To 6
                        br(n, j - 1) = ar(i, j)
                    Next j
                End If
            End If
        End If
    Next i
    If n = "" Then MsgBox "没有所选条件的数据!": End
    .[a4].Resize(n, UBound(br, 2)) = br
    ws = n + 4
    For i = 0 To UBound(rr)
        .Cells(ws + i, 1) = rr(i)
    Next i
    .Cells(ws, 5).FormulaR1C1 = "=SUM(R[-" & ws - 4 & "]C:R[-1]C)"
    .Cells(ws, 1).Resize(1, 4).Select
    With Selection
        .Merge Across:=False
        .HorizontalAlignment = xlHAlignCenter
    End With
    .[a4].Resize(n + 1, UBound(br, 2) + 1).Borders.LineStyle = 1
End With
MsgBox "ok!"
End Sub

TA的精华主题

TA的得分主题

发表于 2024-5-1 09:11 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-1 09:16 | 显示全部楼层
  1. function test (){
  2.         let d = Sheets("出库单模板").Range("b2").Value();
  3.         let cc = Sheets("出库单模板").Range("d2").Value()        ;        
  4.         let data = Sheets("出库数据"). Range("a1").CurrentRegion.Value()
  5.         .filter(v=>  v[0].toString() == d.toString() && v[1].toString() == cc.toString())
  6.                         .map((v,i) => [i+1,...v.slice(-4),null])
  7.         Sheets("出库单模板"). Range("a4:e"+Range("a4").End(xlDown).Row).ClearContents()
  8.         Sheets("出库单模板"). Range("a4").Resize(data.length,data[0].length).Value2= data        
  9. }
复制代码

...v.slice(-4)用的太牛了,这应该是筛选的典例吧,如果多条件某一个或两个没有条件也可以使用怎么写?
例如餐次的d2单元格为空,筛选就出错了,能否把空的忽略,相当于只有一个条件时间了呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-3 10:37 | 显示全部楼层
本帖最后由 yangqianming 于 2024-5-3 11:11 编辑

  1. function test (){
  2.         let d = Sheets("出库单模板").Range("b2").Value();
  3.         let m = Sheets("出库单模板").Range("d2").Value()        ;
  4.         Sheets("出库单模板"). Range("a4:F"+Range("a4").End(xlDown).Row).Clear()      
  5.         let data = Sheets("出库数据"). Range("a1").CurrentRegion.Value()
  6.         .filter(v=>  v[0].toString() == d.toString() && v[1].toString().includes( m.toString()))
  7.                         .map((v,i) => [i+1,...v.slice(-4),null])            
  8.         data.push(["合计",null,null,null,data.map(e=>e[4]).reduce((p,u)=>p+u),null],["保管人签字:",null,null,null,null,null],["接收人签字:",null,null,null,null,null],["监督人签字:",null,null,null,null,null])
  9.         with(Sheets("出库单模板"). Range("a4").Resize(data.length,data[0].length)){
  10.          Borders.LineStyle = xlContinuous
  11.          Font .Name = "微软雅黑"
  12.          Font .Size = 15
  13.          Value2= data                       
  14.         }
  15.         let n=Sheets("出库单模板"). Range("a4").End(xlDown).Row
  16.         for(let i=n-2;i<=n;i++){
  17.         Range("b"+i+":F"+i).Merge(false);       
  18.         }
  19.                
  20. }
复制代码



拼凑了一个,如果v[1].toString().includes( m.toString())中的m.toString()为空就相当于没有这个条件写不出来了,其它还行!
生成出库单.rar (31.54 KB, 下载次数: 3)

TA的精华主题

TA的得分主题

发表于 2024-5-3 15:34 | 显示全部楼层
yangqianming 发表于 2024-5-3 10:37
拼凑了一个,如果v[1].toString().includes( m.toString())中的m.toString()为空就相当于没有这个 ...

v[1] == m就行了, v[0]是一个日期对像,所能用toString(),v[1]是字符串,m也是,可以直接比较吧

TA的精华主题

TA的得分主题

发表于 2024-5-3 16:43 | 显示全部楼层
本帖最后由 Again123456 于 2024-5-3 22:56 编辑
  1. 。。。。
复制代码

TA的精华主题

TA的得分主题

发表于 2024-5-3 16:49 | 显示全部楼层
本帖最后由 Again123456 于 2024-5-3 16:59 编辑

其实,这些代码你现在都会了,不用套用,肯定可以自己写的 生成出库单.7z (23.36 KB, 下载次数: 6)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-3 18:07 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 16:00 , Processed in 0.050993 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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