Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: jiali0208

[已解决]求助:J列原纸成本用自定义函数完成Z列达到的要求

[复制链接]
 楼主| 发表于 2021-10-27 16:26 | 显示全部楼层
cutecpu 发表于 2021-10-27 15:45
祝順心,南無阿彌陀佛!


微信截图_20211027162554.png

点评

大侠,我没有您 对不上的数据(G~I列),所以不知道怎么修改喔!  发表于 2021-10-27 17:09
回复

使用道具 举报

 楼主| 发表于 2021-10-27 20:15 | 显示全部楼层
本帖最后由 jiali0208 于 2021-10-27 20:25 编辑

老师,就是运行你编写的代码J列数据,不等于Z列的数据!3层和5层是对的!2层、4层、7层是不对

demo.rar

48.47 KB, 下载次数: 1

回复

使用道具 举报

发表于 2021-10-27 20:25 | 显示全部楼层
jiali0208 发表于 2021-10-27 20:15
老师,就是运行你编写的代码J列数据,不等于Z列的数据!3层和5层是对的!2层、4层、7层是不对

应该是代码里中文字的问题(我这边是繁体环境)
您在注意以下红色部份(是否正确)

Sub demo()
   Set d = CreateObject("Scripting.Dictionary")
   a = Sheets(1).Range("b3:i" & Sheets(1).[b3].End(4).Row)
   For i = 1 To UBound(a)
      Key = a(i, 1)
      d(Key & " " & 3) = a(i, 3)
      d(Key & " " & 6) = a(i, 6)
      d(Key & " " & 7) = a(i, 7)
      d(Key & " " & 8) = a(i, 8)
   Next
   a = Range([g8], [i8].End(4))
   For i = 1 To UBound(a)
      If a(i, 1) = "" Then Exit For
      cost = 0: Key = a(i, 1): h = a(i, 2): lv = Left(a(i, 3), 1)
      k = IIf(InStr("二四", lv), "", Mid(Key, 1, 1))
      cost = cost + d(k & " " & 3)
      k = IIf(InStr("二四", lv), Mid(Key, 1, 1), Mid(Key, 2, 1))
      Select Case h
         Case "EB", "E": n = 6
         Case "A": n = 8
         Case Else: n = 7
      End Select
      cost = cost + d(k & " " & n)
      k = IIf(InStr("二四", lv), Mid(Key, 2, 1), Mid(Key, 3, 1))
      cost = cost + d(k & " " & 3)
      k = IIf(lv = "", Mid(Key, 3, 1), Mid(Key, 4, 1))
      Select Case h
         Case "EB", "E": n = 7
         Case Else: n = IIf(lv = "", 7, 8)
      End Select
      cost = cost + d(k & " " & n)
      k = IIf(lv = "", Mid(Key, 4, 1), Mid(Key, 5, 1))
      cost = cost + d(k & " " & 3)
      k = Mid(Key, 6, 1)
      cost = cost + d(k & " " & IIf(lv = "E", 7, 8))
      k = Mid(Key, 7, 1)
      cost = cost + d(k & " " & 3)
      [j8].Offset(r) = cost: r = r + 1
   Next
End Sub


回复

使用道具 举报

 楼主| 发表于 2021-10-27 20:26 | 显示全部楼层
cutecpu 发表于 2021-10-27 20:25
应该是代码里中文字的问题(我这边是繁体环境)
您在注意以下红色部份(是否正确)

收到,谢谢老师,我马上试试,再次感谢!

点评

好的  发表于 2021-10-27 20:28
回复

使用道具 举报

 楼主| 发表于 2021-10-27 20:51 | 显示全部楼层
jiali0208 发表于 2021-10-27 20:26
收到,谢谢老师,我马上试试,再次感谢!

可以了,感谢老师,再次谢谢您!老师,能否把这个vba代码设置成自定义函数啊?
回复

使用道具 举报

发表于 2021-10-27 21:01 | 显示全部楼层
jiali0208 发表于 2021-10-27 20:51
可以了,感谢老师,再次谢谢您!老师,能否把这个vba代码设置成自定义函数啊?

写成函数的话,效能可能比较不好
因为每次都要去查「价格表」
回复

使用道具 举报

 楼主| 发表于 2021-10-27 21:21 | 显示全部楼层
cutecpu 发表于 2021-10-27 21:01
写成函数的话,效能可能比较不好
因为每次都要去查「价格表」

哦,这个主要是给核价员核价用的,希望在D列输入材质,J列就能出现价格!所以才想到自定义函数
回复

使用道具 举报

发表于 2021-10-27 21:27 | 显示全部楼层
jiali0208 发表于 2021-10-27 21:21
哦,这个主要是给核价员核价用的,希望在D列输入材质,J列就能出现价格!所以才想到自定义函数

嗯嗯,了解!
把这个范本给核价人员,把K~Z 列删掉
核价人员在 D 列输入材质,然后按个钮
J 列的成本就算出来了,不用写函数
回复

使用道具 举报

 楼主| 发表于 2021-10-27 21:29 | 显示全部楼层
cutecpu 发表于 2021-10-27 21:27
嗯嗯,了解!
把这个范本给核价人员,把K~Z 列删掉
核价人员在 D 列输入材质,然后按个钮

好滴,老师,再次感谢您的帮助!谢谢,谢谢!
回复

使用道具 举报

发表于 2021-10-27 21:48 | 显示全部楼层
jiali0208 发表于 2021-10-27 21:29
好滴,老师,再次感谢您的帮助!谢谢,谢谢!

我帮您在「核算价格」表加了以下代码
这样 D 列有变动时,J 列的成本就会自动运算
也不用按按钮了(您到时再把按钮拿掉)

※同样注意以下红色部份的中文字

Public d As Object
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Column <> 4 Then Exit Sub
   If d Is Nothing Then
      Set d = CreateObject("Scripting.Dictionary")
      a = Sheets(1).Range("b3:i" & Sheets(1).[b3].End(4).Row)
      For i = 1 To UBound(a)
         Key = a(i, 1)
         d(Key & " " & 3) = a(i, 3)
         d(Key & " " & 6) = a(i, 6)
         d(Key & " " & 7) = a(i, 7)
         d(Key & " " & 8) = a(i, 8)
      Next
   End If
   If Target = "" Then Target.Offset(, 6) = "": Exit Sub

   cost = 0
   Key = Target.Offset(, 3)
   h = Target.Offset(, 4)
   lv = Left(Target.Offset(, 5), 1)

   k = IIf(InStr("二四", lv), "", Mid(Key, 1, 1))
   cost = cost + d(k & " " & 3)

   k = IIf(InStr("二四", lv), Mid(Key, 1, 1), Mid(Key, 2, 1))
   Select Case h
      Case "EB", "E": n = 6
      Case "A": n = 8
      Case Else: n = 7
   End Select
   cost = cost + d(k & " " & n)

   k = IIf(InStr("二四", lv), Mid(Key, 2, 1), Mid(Key, 3, 1))
   cost = cost + d(k & " " & 3)

   k = IIf(lv = "", Mid(Key, 3, 1), Mid(Key, 4, 1))
   Select Case h
      Case "EB", "E": n = 7
      Case Else: n = IIf(lv = "", 7, 8)
   End Select
   cost = cost + d(k & " " & n)

   k = IIf(lv = "", Mid(Key, 4, 1), Mid(Key, 5, 1))
   cost = cost + d(k & " " & 3)

   k = Mid(Key, 6, 1)
   cost = cost + d(k & " " & IIf(lv = "E", 7, 8))

   k = Mid(Key, 7, 1)
   cost = cost + d(k & " " & 3)

   Target.Offset(, 6) = cost

End Sub





demo3.rar

50.07 KB, 下载次数: 5

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-4 22:19 , Processed in 0.324651 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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