ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请问这个是用数组还是字典呢?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-1-12 14:42 | 显示全部楼层 |阅读模式
有一个快递对账表,想根据省份和重量算快递单号的价格,不同省份地址和重量价格都不一样,所有的省份地址分成了4个区域,该怎样把这4个区域写入数组再进行判断呢?根据不同重量算价格的分支语句已经写好了,但是怎么将这些地址写入数组来进行判断呢? image.png image.png image.png

快递核账.rar

188.91 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2020-1-12 15:07 | 显示全部楼层
你应有一个可以下载的附件。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-12 17:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
liangmutou01 发表于 2020-1-12 15:07
你应有一个可以下载的附件。

有一个附件哦

TA的精华主题

TA的得分主题

发表于 2020-1-12 18:04 | 显示全部楼层
本帖最后由 micch 于 2020-1-12 18:08 编辑

这样写代码很麻烦,如果计算价格变动,还需要手工修改代码里的数字。应该做个标准表,存入数组引用,或者存入字典引用

按你这个想法,应该是加一个过程,判断所属1-4区间,然后根据结果调用对应的计算过程。

方法很多,比如把所有省作为key,加入字典,item值为所属区间。
然后根据G列的值,提取字典item,判断后调用对应的sub计算过程

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-1-12 18:57 | 显示全部楼层
看到很多提问,都希望答复者按照自己的思路来做代码,却很少有人不细看看自己的表格,及所要解决的问题是不是能想办法简化一些,或者做得规范一些随意性少一些,不需要的空格少一些。

TA的精华主题

TA的得分主题

发表于 2020-1-12 20:41 | 显示全部楼层
试试这个可是你要的结果

快递核账解答.rar

215.61 KB, 下载次数: 5

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-1-12 21:38 来自手机 | 显示全部楼层
发不了帖,在此求助一下
Sub DDD()
With Sheet2
  rw = .Range("A65536").End(xlUp).Row
  Set d = CreateObject("scripting.dictionary")
  For i = 3 To rw
  d(.Cells(i, 7) & "," & .Cells(i, 8) & "," & .Cells(i, 9) & "," & .Cells(i, 5) & "," & .Cells(i, 6)) = .Cells(i, 10) + d(.Cells(i, 7) & .Cells(i, 8) & .Cells(i, 9) & .Cells(i, 5) & .Cells(i, 6))
      MsgBox d.keys()(i - 2)
              Next i
              End With
End Sub
这是中间出现问题的一段,字典关健字为7,8,9,5,6列内容中间用,符号相连 =对应的项为第10列累计相加。
Msgbox输出字典关健字结果却是a,b,c,d ,l  efghv  e,f,g,h,v qwtyu  q,w,t,y,u
这里例举前5个结果,第一个正常,第二个没有,符连接,第三个重复第二个结果却加上,号相连,如此循复。为什么会这样?我后面还要折分,号之间的结果填到其它地方去的

TA的精华主题

TA的得分主题

发表于 2020-1-12 22:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
省份对应的价格在哪里呢

TA的精华主题

TA的得分主题

发表于 2020-1-12 23:02 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 answer6141 于 2020-1-12 23:49 编辑
  1. Option Explicit

  2. Sub test()
  3.     Dim i, j, m As Integer
  4.     Dim dic As Object
  5.     Dim arr, drr
  6.     Set dic = CreateObject("scripting.dictionary")
  7.    
  8.     With Sheets("省份区域划分")
  9.         For i = 2 To 35
  10.             dic(Trim(.Range("b" & i))) = Trim(.Range("c" & i))
  11.         Next
  12.         drr = dic.keys
  13.       
  14.     End With
  15.     With Sheets(1)
  16.         arr = .Range("a2:j" & .Cells(.Rows.Count, 1).End(xlUp).Row)
  17.             For j = 1 To UBound(arr)
  18.                 Select Case dic(arr(j, 7))
  19.                     '全是按一区写的,没改
  20.                     Case Is = "一区"
  21.                         Select Case Trim(arr(j, 9))
  22.                              Case Is <= 3
  23.                                arr(j, 10) = 6
  24.                             Case Is <= 4
  25.                                arr(j, 10) = 9
  26.                             Case Is <= 5
  27.                                arr(j, 10) = 11
  28.                             Case Else
  29.                                 arr(j, 10) = Round((arr(j, 9) - 3), 0) * 1 + 6
  30.                         End Select
  31.                     Case Is = "二区"
  32.                         Select Case Trim(arr(j, 9))
  33.                              Case Is <= 3
  34.                                arr(j, 10) = 6
  35.                             Case Is <= 4
  36.                                arr(j, 10) = 9
  37.                             Case Is <= 5
  38.                                arr(j, 10) = 11
  39.                             Case Else
  40.                                 arr(j, 10) = Round((arr(j, 9) - 3), 0) * 1 + 6
  41.                         End Select
  42.                     Case Is = "三区"
  43.                         Select Case Trim(arr(j, 9))
  44.                              Case Is <= 3
  45.                                arr(j, 10) = 6
  46.                             Case Is <= 4
  47.                                arr(j, 10) = 9
  48.                             Case Is <= 5
  49.                                arr(j, 10) = 11
  50.                             Case Else
  51.                                 arr(j, 10) = Round((arr(j, 9) - 3), 0) * 1 + 6
  52.                         End Select
  53.                     Case Is = "四区"
  54.                         Select Case Trim(arr(j, 9))
  55.                              Case Is <= 3
  56.                                arr(j, 10) = 6
  57.                             Case Is <= 4
  58.                                arr(j, 10) = 9
  59.                             Case Is <= 5
  60.                                arr(j, 10) = 11
  61.                             Case Else
  62.                                 arr(j, 10) = Round((arr(j, 9) - 3), 0) * 1 + 6
  63.                         End Select
  64.                 End Select
  65.             Next
  66.         .Range("a2:j" & .Cells(.Rows.Count, 1).End(xlUp).Row) = arr
  67.     End With
  68. End Sub
复制代码
360截图20200112234817789.jpg

TA的精华主题

TA的得分主题

发表于 2020-1-12 23:53 | 显示全部楼层
cui26896 发表于 2020-1-12 18:57
看到很多提问,都希望答复者按照自己的思路来做代码,却很少有人不细看看自己的表格,及所要解决的问题是不 ...

的确是,很多求助的总是,把自己的思路也当做问题,来提问,让别人按自己的思路做,也不自己想要的结果,这样就尴尬了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-19 11:28 , Processed in 0.050008 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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