实用VBA:11.用Excel自动生成商品调拨单

15 篇文章 3 订阅
13 篇文章 1 订阅

1.需求场景

看到知乎上一个问题,"怎么用excel自动提取数据生成调拨单?",问题描述是:表1中有多个产品,每个产品都有ABCD仓,A仓为主仓,可以给BCD仓调拨,填写调拨数量后(正为调入,负为调出)怎么自动在表2中生成发生了调拨的产品的明细?

2.解决思路

其实这个问题的本质是从数据表中查找调拨数量不为空的数据行,将数据转移到调拨单的表格中。可以在数据表中加入一个按钮,编写一个方法,实现从数据表逐行读取向调拨单复制的效果,读取前对调拨数量C列单元格进行判断,如果单元格为空则跳过。

3.VBA实现

'定义工作簿变量

Dim wb As Workbook

'定义工作表变量

Dim ws, sh As Worksheet

'定义临时存储基本信息数据各字段的变量

Dim goods, store, amount As String

'循环变量

Dim i, j As Integer

Public Sub 提取数据生成调拨单()

    '设置工作簿为当前工作簿

    Set wb = Workbooks(1)

    '设置基础数据表、填表模板到表变量

    Set ws = Worksheets("数据")

    Set sh = Worksheets("调拨单")

    '关闭屏幕刷新

    Application.ScreenUpdating = False

    '设置调拨单表为当前激活的表格

    sh.Activate

    '清空表格中旧数据,填入标题行信息

    sh.UsedRange.Delete

    Cells(1, 1).value = "商品名称"

    Cells(1, 2).value = "仓库"

    Cells(1, 3).value = "调拨数量"

    j = 2

    

    '设置数据表为当前激活的工作表

    ws.Activate

        

    '逐行读取商品数据信息,根据调拨数量是否为空判断是否需要填入调拨单

    For i = 2 To Range("A" & Rows.Count).End(xlUp).Row

        If Cells(i, 3).value <> "" Then

            '将当前行各列单元格信息存至临时变量

            goods = Cells(i, 1).value

            store = Cells(i, 2).value

            amount = Cells(i, 3).value

    

            '设置调拨单为当前激活的工作表

            sh.Activate

            

            '将临时变量信息写入调拨单对应单元格

            Cells(j, 1).value = goods

            Cells(j, 2).value = store

            Cells(j, 3).value = amount

            j = j + 1

            

            '设置数据表为当前激活的工作表

            ws.Activate

        End If

    Next i

    

    '释放工作表和工作簿变量

    Set sh = Nothing

    Set ws = Nothing

    Set wb = Nothing

    '开启屏幕刷新

    Application.ScreenUpdating = True

    '显示提示信息

    MsgBox "生成完毕,请到“调拨单”表格中查看。"

End Sub

4.运行效果

5.改进输出格式

实现了提取调拨数据的功能,但对照题主的要求,输出格式要调整,需要列出调出仓库和调入仓库。但从题主给出的条件看,调出仓库为主仓库A,调入仓库可能是B、C、D中的任意一个。因此,调出数量是个冗余信息,问题的实质是只需要判断调出数量C列为正的数据,提取到调拨单表格中即可。对代码进行简单修改:

'定义工作簿变量

Dim wb As Workbook

'定义工作表变量

Dim ws, sh As Worksheet

'定义临时存储基本信息数据各字段的变量

Dim goods, store, amount As String

'循环变量

Dim i, j As Integer

Public Sub 提取数据生成调拨单()

    '设置工作簿为当前工作簿

    Set wb = Workbooks(1)

    '设置基础数据表、填表模板到表变量

    Set ws = Worksheets("数据")

    Set sh = Worksheets("调拨单2")

    '关闭屏幕刷新

    Application.ScreenUpdating = False

    '设置调拨单表为当前激活的表格

    sh.Activate

    '清空表格中旧数据,填入标题行信息

    sh.UsedRange.Delete

    Cells(1, 1).value = "商品名称"

    Cells(1, 2).value = "调出仓库"

    Cells(1, 3).value = "调入仓库"

    Cells(1, 4).value = "调拨数量"

    j = 2

    

    '设置数据表为当前激活的工作表

    ws.Activate

        

    '逐行读取商品数据信息,根据调拨数量是否为空判断是否需要填入调拨单

    For i = 2 To Range("A" & Rows.Count).End(xlUp).Row

        If Cells(i, 3).value > 0 Then

            '将当前行各列单元格信息存至临时变量

            goods = Cells(i, 1).value

            store = Cells(i, 2).value

            amount = Cells(i, 3).value

    

            '设置调拨单为当前激活的工作表

            sh.Activate

            

            '将临时变量信息写入调拨单对应单元格

            Cells(j, 1).value = goods

            Cells(j, 2).value = "A仓库"

            Cells(j, 3).value = store

            Cells(j, 4).value = amount

            

            j = j + 1

            

            '设置数据表为当前激活的工作表

            ws.Activate

        End If

    Next i

    

    '释放工作表和工作簿变量

    Set sh = Nothing

    Set ws = Nothing

    Set wb = Nothing

    '开启屏幕刷新

    Application.ScreenUpdating = True

    '显示提示信息

    MsgBox "生成完毕,请到“调拨单”表格中查看。"

End Sub

运行后效果:

如果这个思路有帮助,欢迎点赞、回复交流或关注!

#点赞富三代,分享美一生#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值