Excel精英培训网

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

急!根据下拉菜单选项进行数据对比并将数据合并输入正确的单元格中

[复制链接]
发表于 2019-4-27 03:35 | 显示全部楼层 |阅读模式
2学分
大家好,
我目前正在弄一个成本估算工具,有一个步骤目前一直是手动进行,但因数据量太大,希望能通过VBA写个代码方便运算,节省工作时间。示例文件中有两个工作表。其中工作表“数据”是原始内容,“呈现结果”是我希望达到的效果。重点变化的地方我用红色标了出来。

在A列中是项目编号(A12:总项目编号,A13  -  A16:子项目编号。)

在列B,D,F,H,J中,是已经分配好的标准费用类别号,不会更改。第12行中只有一个费用类别号的话意味着:在这种情况下所有子项目具有相同的费用类别号,例如在B12中“85MN”,这个数字适用于所有四个子项目,所以就只在总项目的这一行(第12行)输入一个共用的费用类别号。不然,会在与子项目相对应的单元格中输入对应的费用类别号。

在L列中,这些号码就是要根据N列和O列的下拉菜单选项被等待分配到正确的单元格中的“费用类别号”,如果同一单元格中有两个或两个以上费用类别号就用“/”字符分隔。

在N列和O列中,有下拉列表,选择的内容是L列中号码分配的条件。如果在N列中没有选择任何内容(空白),比如工作表“呈现结果”中N17和N18,则表示L列中的费用类别号找不到相匹配的类别条件,那么就将这类号码都分配到单元格J12中。

当然最重要的,所有成本费用都要同步更新。

希望有大神可以帮忙,非常非常感谢!

TestZSCN.xlsx.zip

12.72 KB, 下载次数: 11

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2019-4-28 15:29 | 显示全部楼层
我看了好半天才搞明白你要干嘛,你这问题做起来不难,但要看懂真的很难。
我马上给你做,你等着
回复

使用道具 举报

发表于 2019-4-28 16:26 | 显示全部楼层
本帖最后由 hfwufanhf2006 于 2019-4-28 16:31 编辑

先贴代码,后面还有具体要求:

Range("a12:k12").ClearContents
Range("a13:o100").ClearContents

Rem 下面这段用复制copy也可以
For i = 12 To Worksheets("数据").[a10000].End(xlUp).Row
    Cells(i, 1) = Worksheets("数据").Cells(i, 1)
    Cells(i, 2) = Worksheets("数据").Cells(i, 2)
    Cells(i, 3) = Worksheets("数据").Cells(i, 3)
    Cells(i, 4) = Worksheets("数据").Cells(i, 4)
    Cells(i, 5) = Worksheets("数据").Cells(i, 5)
    Cells(i, 6) = Worksheets("数据").Cells(i, 6)
    Cells(i, 7) = Worksheets("数据").Cells(i, 7)
    Cells(i, 8) = Worksheets("数据").Cells(i, 8)
    Cells(i, 9) = Worksheets("数据").Cells(i, 9)
    Cells(i, 10) = Worksheets("数据").Cells(i, 10)
    Cells(i, 11) = Worksheets("数据").Cells(i, 11)
Next i

For i = 13 To Worksheets("数据").[L100000].End(xlUp).Row
    s1 = Worksheets("数据").Cells(i, 12)
    s2 = Worksheets("数据").Cells(i, 13)
    s3 = Worksheets("数据").Cells(i, 14)
    s4 = Worksheets("数据").Cells(i, 15)
    Cells(i, 12) = s1
    Cells(i, 13) = s2
    Cells(i, 14) = s3
    Cells(i, 15) = s4
   
    hs = 12
    For k = 12 To [a100000].End(xlUp).Row
        If Cells(k, 1) = s4 Then
           hs = k
           Exit For
        End If
    Next k
   
    If s3 = "春" Then
       Cells(hs, 2) = Cells(hs, 2) & "/" & s1
       Cells(hs, 3) = Cells(hs, 3) + s2
    End If
    If s3 = "夏" Then
       Cells(hs, 4) = Cells(hs, 4) & "/" & s1
       Cells(hs, 5) = Cells(hs, 5) + s2
    End If
    If s3 = "秋" Then
       Cells(hs, 6) = Cells(hs, 6) & "/" & s1
       Cells(hs, 7) = Cells(hs, 7) + s2
    End If
    If s3 = "冬" Then
       Cells(hs, 8) = Cells(hs, 8) & "/" & s1
       Cells(hs, 9) = Cells(hs, 9) + s2
    End If
    If IsEmpty(s3) Then
       Cells(hs, 10) = Cells(hs, 10) & "/" & s1
       Cells(hs, 11) = Cells(hs, 11) + s2
    End If
Next i

具体要求:
1、所有数据均要在“数据”表中输入,不能在“结果呈现”中录入,因为最开始的代码就把“结果呈现”清屏了,输了也是白输;
2、“数据”表的数据单元格是要用来计算的,所有数字单元格需要保证设置正确。我发现你“数据”表的e12\f12\k12都有一个自定义的货币符号,计算时会出问题,需要改成数字、货币或者常规格式;3、代码得到的结果与你要求的完全相同,但你要求的红色并没有实现;
4、代码一定要放在”结果呈现“表中,不然所有涉及工作表前缀的引用都需要互换;
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 13:43 , Processed in 1.863210 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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