ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

OCR转表错误,补齐兰州地铁票价表正确数据。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-22 06:42 | 显示全部楼层 |阅读模式
211aba24f384d4cd27c52ed97c787254_lanzhou.jpg


兰州地铁采用“里程分段计价”的收费方式,起步价2元,起步里程4公里(含4公里),晋级里程为“4、4、6、6、8、8”,即3元可乘坐8公里、4元12公里、5元18公里、6元24公里、7元32公里、8元40公里,40公里以上每加1元可乘8公里。
兰州地铁的收费价目表是根据乘客乘坐的距离来计算票价的。以下是具体的收费标准:

起步价:2元,可乘坐4公里(含4公里)。
晋级里程:“4、4、6、6、8、8”,即:
3元可乘坐8公里。
4元可乘坐12公里。
5元可乘坐18公里。
6元可乘坐24公里。
7元可乘坐32公里。
8元可乘坐40公里。
40公里以上每加1元可乘8公里



27a39bde263944e2f53db0330d6769ba(1.jpg

OCR转换的数据有错误。
image.png


各站的距离是数据是正确的。
  1. Sub ll()
  2.    Dim StationArr
  3.    StationArr = Array("陈官营", "深安大桥南", "兰州城市学院", "兰州海关", "马滩", "土门墩", "兰州西站北广场", "西站什字", "七里河", "小西湖", "文化宫", "西关", "省政府", "东方红广场", "兰州大学", "五里铺", "省气象局", "携星墩", "焦家湾", "东岗")
  4.    DistArr = Array(0, 1579, 2340, 955, 2073, 2007, 907, 1614, 1060, 1376, 890, 1066, 969, 1456, 1426, 1293, 1303, 1163, 1116, 933)
  5.    
  6.    
  7. End Sub
复制代码


要做的事,分解各个站点的组合。
"陈官营"----- "焦家湾"
"东岗" ---- "兰州海关"




如何列出兰州地铁各站之间的票价。.zip

8.98 KB, 下载次数: 7

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-22 07:55 | 显示全部楼层
第一步解决的问题
排除这两个组合。
image.png

image.png



  1. Sub ll()
  2.    Dim StationArr, Str, Str1
  3.    Dim Rng As Range
  4.    StationArr = Array("陈官营", "深安大桥南", "兰州城市学院", "兰州海关", "马滩", "土门墩", "兰州西站北广场", "西站什字", "七里河", "小西湖", "文化宫", "西关", "省政府", "东方红广场", "兰州大学", "五里铺", "省气象局", "携星墩", "焦家湾", "东岗")
  5.    DistArr = Array(0, 1579, 2340, 955, 2073, 2007, 907, 1614, 1060, 1376, 890, 1066, 969, 1456, 1426, 1293, 1303, 1163, 1116, 933)
  6.    Dim Rr As Integer
  7.      Rr = 10
  8.      For ii = 0 To UBound(StationArr)
  9.         Str1 = StationArr(ii) & "<>"
  10.         For jj = 0 To UBound(StationArr)
  11.               Str = Str1 & StationArr(jj)
  12.               Sheet2.Cells(Rr, 1) = Rr - 9
  13.               Sheet2.Cells(Rr, 2) = Str
  14.               Rr = Rr + 1
  15.         Next jj
  16.      Next ii
  17.      Sheet2.Cells(1, 1) = "各站点有" & Rr - 10 & "个组合"
  18.      Set Rng = Sheet2.Cells(20, 1).CurrentRegion
  19.      Debug.Print Rng.Address
  20.      
  21.      Str = "=" & """各站点有""" & """ &  " & " & """ & Rng.Address(0, 0) & """ &  " & " & """ & "个组合" & """"
  22.      Str = "=" & """各站点有"" & " & " Count(" & Rng.Address(0, 0) & ")" & " & " & """个组合" & """"
  23.      Debug.Print Str
  24.      Sheet2.Cells(1, 3) = Str
  25. End Sub
复制代码




image.png



image.png






TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-22 08:18 | 显示全部楼层




  1. Sub ll()
  2.    Dim StationArr, DistArr
  3.    Dim Str, Str1, Dist As Integer, Dist1
  4.    Dim Rng As Range
  5.    StationArr = Array("陈官营", "深安大桥南", "兰州城市学院", "兰州海关", "马滩", "土门墩", "兰州西站北广场", "西站什字", "七里河", "小西湖", "文化宫", "西关", "省政府", "东方红广场", "兰州大学", "五里铺", "省气象局", "携星墩", "焦家湾", "东岗")
  6.    DistArr = Array(0, 1579, 2340, 955, 2073, 2007, 907, 1614, 1060, 1376, 890, 1066, 969, 1456, 1426, 1293, 1303, 1163, 1116, 933)
  7.    Dim Rr As Integer
  8.      Rr = 10
  9.      For ii = 0 To UBound(StationArr)
  10.         Str1 = StationArr(ii) & "<>"
  11.         Dist1 = DistArr(ii)
  12.         For jj = 0 To UBound(StationArr)
  13.               Str = Str1 & StationArr(jj)
  14.               Dist = Abs(Dist1 - DistArr(jj))
  15.               With Sheet2
  16.                  .Cells(Rr, 1) = Rr - 9
  17.                  .Cells(Rr, 2) = Str
  18.                  .Cells(Rr, 3) = Dist
  19.               End With
  20.               Rr = Rr + 1
  21.         Next jj
  22.      Next ii
  23.      Sheet2.Cells(1, 6) = "各站点有" & Rr - 10 & "个组合"
  24.      Set Rng = Sheet2.Cells(20, 1).CurrentRegion
  25.      Set Rng = Rng(, 1).Resize(Rng.Rows.Count, 1)
  26.      Debug.Print Rng.Address
  27.      'Str = "=" & """各站点有""" & """ &  " & " & """ & Rng.Address(0, 0) & """ &  " & " & """ & "个组合" & """"
  28.      Str = "=" & """各站点有"" & " & " Count(" & Rng.Address(0, 0) & ")" & " & " & """个组合" & """"
  29.      Debug.Print Str
  30.      Sheet2.Cells(1, 2) = Str
  31. End Sub
复制代码


按这个代码得出的距离结果是错误




image.png


现在要解决正确的距离
如,兰州城市学院<>兰州西站北广场的正确距离 8282

如何列出兰州地铁各站之间的票价。.rar

19.9 KB, 下载次数: 5

TA的精华主题

TA的得分主题

发表于 2024-8-22 09:15 | 显示全部楼层
直接循环呗

  1. Sub ll()
  2.    Dim StationArr, DistArr
  3.    StationArr = Array("陈官营", "深安大桥南", "兰州城市学院", "兰州海关", "马滩", "土门墩", "兰州西站北广场", "西站什字", "七里河", "小西湖", "文化宫", "西关", "省政府", "东方红广场", "兰州大学", "五里铺", "省气象局", "携星墩", "焦家湾", "东岗")
  4.    DistArr = Array(0, 1579, 2340, 955, 2073, 2007, 907, 1614, 1060, 1376, 890, 1066, 969, 1456, 1426, 1293, 1303, 1163, 1116, 933)
  5.    
  6. m = UBound(StationArr)
  7. ReDim br(1 To 99999, 1 To 3)
  8. For i = 0 To m - 1
  9.     For j = i + 1 To m
  10.         r = r + 1
  11.         br(r, 1) = StationArr(i)
  12.         br(r, 2) = StationArr(j)
  13.         For x = i To j
  14.             br(r, 3) = br(r, 3) + DistArr(x)
  15.         Next
  16.     Next
  17. Next

  18. Sheet1.Range("a25").Resize(r, 3) = br
  19. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2024-8-22 11:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
如,兰州城市学院<>兰州西站北广场的正确距离 8282
这个距离似乎是不对的。

如何列出兰州地铁各站之间的票价。.zip

15.71 KB, 下载次数: 4

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-8-22 11:33 | 显示全部楼层
【已总结】[第119期]假如你是无人驾驶车上的电脑,你想好了怎么走吗?
https://club.excelhome.net/thread-1379620-1-1.html
(出处: ExcelHome技术论坛)

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-22 22:16 | 显示全部楼层
本帖最后由 ning84 于 2024-8-23 09:41 编辑
xbox1210 发表于 2024-8-22 11:22
如,兰州城市学院兰州西站北广场的正确距离 8282
这个距离似乎是不对的。

谢谢高手帮组,需要花很大的精力消化理解。

多做几遍题

  1. Function BetweenStation(Sht As Worksheet, StationStr)
  2.    Dim StationArr, DistArr
  3.    Dim Str, Str1, Dist As Integer, Dist1
  4.    Dim Rng As Range
  5.    StationArr = Array("陈官营", "深安大桥南", "兰州城市学院", "兰州海关", "马滩", "土门墩", "兰州西站北广场", "西站什字", "七里河", "小西湖", "文化宫", "西关", "省政府", "东方红广场", "兰州大学", "五里铺", "省气象局", "携星墩", "焦家湾", "东岗")
  6.    DistArr = Array(0, 1579, 2340, 955, 2073, 2007, 907, 1614, 1060, 1376, 890, 1066, 969, 1456, 1426, 1293, 1303, 1163, 1116, 933)
  7.    Dim Rr As Integer, Kk
  8.      Rr = 10
  9.      For ii = 0 To UBound(StationArr)
  10.            If StationStr = StationArr(ii) Then
  11.                 Exit For
  12.            End If
  13.      Next ii
  14.      
  15.      ''
  16.      'For ii = Kk To Kk 'UBound(StationArr)
  17.         
  18.         Str1 = StationArr(ii) & "→"
  19.         Dist = 0 'DistArr(ii)
  20.         Str = Str1 & Str1
  21.         For jj = ii + 1 To UBound(StationArr)
  22.               ''
  23.               Str = Str1 & StationArr(jj)
  24.               Dist = Dist + DistArr(jj)
  25.               With Sht
  26.                  .Cells(Rr, 1) = Rr - 9
  27.                  .Cells(Rr, 2) = Str
  28.                  .Cells(Rr, 3) = Dist
  29.                  Select Case Dist
  30.                       Case Is = 0
  31.                            .Cells(Rr, 4) = "-"
  32.                       Case Is <= 4000
  33.                            .Cells(Rr, 4) = 2
  34.                       Case Is <= 8000
  35.                            .Cells(Rr, 4) = 3
  36.                       Case Is <= 12000
  37.                            .Cells(Rr, 4) = 4
  38.                       Case Is <= 18000
  39.                            .Cells(Rr, 4) = 5
  40.                       Case Is <= 24000
  41.                            .Cells(Rr, 4) = 6
  42.                       Case Is <= 32000
  43.                            .Cells(Rr, 4) = 7
  44.                       Case Is <= 40000
  45.                            .Cells(Rr, 4) = 8
  46.                       Case Else
  47.                  End Select
  48.               End With
  49.               Rr = Rr + 1
  50.         Next jj
  51.      'Next ii
  52.      ''
  53.      Set Rng = Sht.Cells(10, 1).CurrentRegion
  54.      Set Rng = Rng(, 1).Resize(Rng.Rows.Count, 1)
  55.      Debug.Print Rng.Address
  56.      'Str = "=" & """各站点有""" & """ &  " & " & """ & Rng.Address(0, 0) & """ &  " & " & """ & "个组合" & """"
  57.      Str = "=" & """统计共"" & " & " Count(" & Rng.Address(0, 0) & ")" & " & " & """站点" & """"
  58.      Debug.Print Str
  59.      Sht.Cells(1, 2) = Str
  60. End Function

  61. Sub llll()
  62.   Dim Sht As Worksheet
  63.   Dim Rng As Range
  64.      Set Sht = Sheet2
  65.      Sht.Cells.Clear
  66.     'BetweenStation "兰州海关"
  67.    
  68.     'BetweenStation Sht, "西站什字"
  69.     'BetweenStation Sht, "省政府"
  70.     BetweenStation Sht, "陈官营"
  71.     'BetweenStation Sht, "携星墩"
  72. End Sub
复制代码



如何列出兰州地铁各站之间的票价。.zip

21.55 KB, 下载次数: 3

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-23 09:23 | 显示全部楼层

谢谢解答,再做一遍题


image.png




image.png



  1. Function delBetweenStation(Sht As Worksheet, StationStr)
  2.    Dim StationArr, DistArr
  3.    Dim Str, Str1, Dist As Integer, Dist1
  4.    Dim Rng As Range
  5.    StationArr = Array("陈官营", "深安大桥南", "兰州城市学院", "兰州海关", "马滩", "土门墩", "兰州西站北广场", "西站什字", "七里河", "小西湖", "文化宫", "西关", "省政府", "东方红广场", "兰州大学", "五里铺", "省气象局", "携星墩", "焦家湾", "东岗")
  6.    DistArr = Array(0, 1579, 2340, 955, 2073, 2007, 907, 1614, 1060, 1376, 890, 1066, 969, 1456, 1426, 1293, 1303, 1163, 1116, 933)
  7.    Dim Rr As Integer, Kk
  8.      Rr = 10
  9.      For ii = 0 To UBound(StationArr)
  10.            If StationStr = StationArr(ii) Then
  11.                 Exit For
  12.            End If
  13.      Next ii
  14.      
  15.      ''
  16.      'For ii = Kk To Kk 'UBound(StationArr)
  17.         
  18.         Str1 = StationArr(ii) & "→"
  19.         Dist = 0 'DistArr(ii)
  20.         Str = Str1 & Str1
  21.         For jj = ii + 1 To UBound(StationArr)
  22.               ''
  23.               Str = Str1 & StationArr(jj)
  24.               Dist = Dist + DistArr(jj)
  25.               With Sht
  26.                  .Cells(Rr, 1) = Rr - 9
  27.                  .Cells(Rr, 2) = Str
  28.                  .Cells(Rr, 3) = Dist
  29.                  Select Case Dist
  30.                       Case Is = 0
  31.                            .Cells(Rr, 4) = "-"
  32.                       Case Is <= 4000
  33.                            .Cells(Rr, 4) = 2
  34.                       Case Is <= 8000
  35.                            .Cells(Rr, 4) = 3
  36.                       Case Is <= 12000
  37.                            .Cells(Rr, 4) = 4
  38.                       Case Is <= 18000
  39.                            .Cells(Rr, 4) = 5
  40.                       Case Is <= 24000
  41.                            .Cells(Rr, 4) = 6
  42.                       Case Is <= 32000
  43.                            .Cells(Rr, 4) = 7
  44.                       Case Is <= 40000
  45.                            .Cells(Rr, 4) = 8
  46.                       Case Else
  47.                  End Select
  48.               End With
  49.               Rr = Rr + 1
  50.         Next jj
  51.      'Next ii
  52.      ''
  53.      Set Rng = Sht.Cells(10, 1).CurrentRegion
  54.      Set Rng = Rng(, 1).Resize(Rng.Rows.Count, 1)
  55.      Debug.Print Rng.Address
  56.      'Str = "=" & """各站点有""" & """ &  " & " & """ & Rng.Address(0, 0) & """ &  " & " & """ & "个组合" & """"
  57.      Str = "=" & """统计共"" & " & " Count(" & Rng.Address(0, 0) & ")" & " & " & """站点" & """"
  58.      Debug.Print Str
  59.      Sht.Cells(1, 2) = Str
  60. End Function


  61. Function BetweenStation(Sht As Worksheet, StationStr)
  62.    Dim StationArr, DistArr
  63.    Dim Str, Str1, Dist As Integer, Dist1
  64.    Dim eastArr(), westArr()
  65.    Dim Rng As Range
  66.    StationArr = Array("陈官营", "深安大桥南", "兰州城市学院", "兰州海关", "马滩", "土门墩", "兰州西站北广场", "西站什字", "七里河", "小西湖", "文化宫", "西关", "省政府", "东方红广场", "兰州大学", "五里铺", "省气象局", "携星墩", "焦家湾", "东岗")
  67.    Debug.Print UBound(StationArr)
  68.    
  69.    DistArr = Array(0, 1579, 2340, 955, 2073, 2007, 907, 1614, 1060, 1376, 890, 1066, 969, 1456, 1426, 1293, 1303, 1163, 1116, 933)
  70.    Dim Rr As Integer, Kk
  71.    Dim Arr(1)
  72.      Rr = 0
  73.      For ii = 0 To UBound(StationArr)
  74.            If StationStr = StationArr(ii) Then
  75.                 ReDim westArr(ii - 1, 3)
  76.                 ReDim eastArr(UBound(DistArr) - ii - 1, 3)
  77.                 Exit For
  78.            End If
  79.      Next ii
  80.      
  81.      Str1 = StationArr(ii) & "→"
  82.      Dist = 0 'DistArr(ii)
  83.      ''
  84.      For jj = ii + 1 To UBound(StationArr)
  85.               ''
  86.               Str = Str1 & StationArr(jj)
  87.               Dist = Dist + DistArr(jj)
  88.               With Sht
  89.                  eastArr(Rr, 0) = Rr + 1
  90.                  eastArr(Rr, 1) = Str
  91.                  eastArr(Rr, 2) = Dist
  92.                  Select Case Dist
  93.                       Case Is = 0
  94.                            eastArr(Rr, 3) = "-"
  95.                       Case Is <= 4000
  96.                            eastArr(Rr, 3) = 2
  97.                       Case Is <= 8000
  98.                            eastArr(Rr, 3) = 3
  99.                       Case Is <= 12000
  100.                            eastArr(Rr, 3) = 4
  101.                       Case Is <= 18000
  102.                            eastArr(Rr, 3) = 5
  103.                       Case Is <= 24000
  104.                            eastArr(Rr, 3) = 6
  105.                       Case Is <= 32000
  106.                            eastArr(Rr, 3) = 7
  107.                       Case Is <= 40000
  108.                            eastArr(Rr, 3) = 8
  109.                       Case Else
  110.                  End Select
  111.               End With
  112.               Rr = Rr + 1
  113.      Next jj
  114.      '''
  115.      Rr = 0
  116.      For jj = ii - 1 To 0 Step -1
  117.               ''
  118.               Str = Str1 & StationArr(jj)
  119.               Dist = Dist + DistArr(jj)
  120.               With Sht
  121.                  westArr(Rr, 0) = Rr + 1
  122.                  westArr(Rr, 1) = Str
  123.                  westArr(Rr, 2) = Dist
  124.                  Select Case Dist
  125.                       Case Is = 0
  126.                            westArr(Rr, 3) = "-"
  127.                       Case Is <= 4000
  128.                            westArr(Rr, 3) = 2
  129.                       Case Is <= 8000
  130.                            westArr(Rr, 3) = 3
  131.                       Case Is <= 12000
  132.                            westArr(Rr, 3) = 4
  133.                       Case Is <= 18000
  134.                            westArr(Rr, 3) = 5
  135.                       Case Is <= 24000
  136.                            westArr(Rr, 3) = 6
  137.                       Case Is <= 32000
  138.                            westArr(Rr, 3) = 7
  139.                       Case Is <= 40000
  140.                            westArr(Rr, 3) = 8
  141.                       Case Else
  142.                  End Select
  143.               End With
  144.               Rr = Rr + 1
  145.         Next jj
  146.         Arr(0) = eastArr
  147.         Arr(1) = westArr
  148.         BetweenStation = Arr
  149. End Function

  150. Sub llll()
  151.   Dim Sht As Worksheet
  152.   Dim Rng As Range
  153.   Dim Rr
  154.      Rr = 10
  155.      Set Sht = Sheet2
  156.      Sht.Cells.Clear
  157.     'BetweenStation "兰州海关"
  158.    
  159.     'BetweenStation Sht, "西站什字"
  160.     'BetweenStation Sht, "省政府"
  161.     'BetweenStation Sht, "陈官营"
  162.     Arr = BetweenStation(Sht, "携星墩")
  163.    
  164.    
  165.     With Sht
  166.          .Cells(Rr - 2, 1) = "陈官营方向" & UBound(Arr(0)) + 1 & "个站点"
  167.          .Cells(Rr, 1).Resize(UBound(Arr(0)) + 1, 4) = Arr(0)
  168.          .Cells(Rr - 2, 6) = "东岗方向" & UBound(Arr(1)) + 1 & "个站点"
  169.          .Cells(Rr, 6).Resize(UBound(Arr(1)) + 1, 4) = Arr(1)
  170.     End With
  171. End Sub
复制代码





现在的问题是从陈官营出发遇到的问题是

ii=0时     ii - 1不成立。
For ii = 0 To UBound(StationArr)
           If StationStr = StationArr(ii) Then
                ReDim westArr(ii - 1, 3)
                ReDim eastArr(UBound(DistArr) - ii - 1, 3)
                Exit For
           End If
     Next ii


image.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 16:29 , Processed in 0.054258 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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