求思路……我怎么判断相同的订单号里面最大的运费价格?

lelouch712 2013-06-05 09:56:41
比如这样的一个excel:

订单号 运费价格
1001 22.33
1001 23.33
1001 24.33
1001 25.33
1001 26.33
1006 12
1006 13
1006 14
1006 15
1006 16
1006 17


这样的表格
我怎么判断相同的订单号里面最大的运费价格?
给个思路,谢谢
判断逻辑怎么写能算出相同订单号里面运费价格最大
比如上面的EXCEL表格,1001算出来的结果应该是26.33

If mysheet.Cells(i, StartCol).Value = mysheet.Cells(i + 1, StartCol).Value Then

End If
接下去怎么写……
我先判断订单号是否相同
相同就再判断是否大于?
当然外面有个for循环


...全文
835 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
SongPixy 2013-06-06
  • 打赏
  • 举报
回复
引用 18 楼 lelouch712 的回复:
新人刚上csdn不知如何结贴
贴子下方有个【结贴】按钮 点击 然后选择有无满意结果 如果是有的话 给你认可的回复分别打分 给分合计不超过问题总分
lelouch712 2013-06-06
  • 打赏
  • 举报
回复
引用 13 楼 dsd999 的回复:
[quote=引用 10 楼 lelouch712 的回复:] 解决了,谢谢各位高手提供思路。顺着你们的思路我写出来了,代码如下: hang = 4 lie = 1 Do While Sheet1.Cells(hang, lie).Value <> "" Do While Sheet1.Cells(hang, 1).Value = Sheet1.Cells(hang + 1, 1).Value If Sheet1.Cells(hang, 2).Value > Sheet1.Cells(hang + 1, 2).Value Then Sheet1.Cells(hang + 1, 2).Value = Sheet1.Cells(hang, 2).Value 'Sheet1.Cells(hang, 2).Value = 0 Sheet1.Cells(hang, 2).Clear Else 'Sheet1.Cells(hang, 2).Value = 0 Sheet1.Cells(hang, 2).Clear End If hang = hang + 1 Loop hang = hang + 1 Loop
谢谢能贴出自己的解决方法。 另:记着结帖。[/quote] 新人刚上csdn不知如何结贴,请教版主。
dsd999 2013-06-06
  • 打赏
  • 举报
回复
引用 18 楼 lelouch712 的回复:
[quote=引用 13 楼 dsd999 的回复:] [quote=引用 10 楼 lelouch712 的回复:] 解决了,谢谢各位高手提供思路。顺着你们的思路我写出来了,代码如下: hang = 4 lie = 1 Do While Sheet1.Cells(hang, lie).Value <> "" Do While Sheet1.Cells(hang, 1).Value = Sheet1.Cells(hang + 1, 1).Value If Sheet1.Cells(hang, 2).Value > Sheet1.Cells(hang + 1, 2).Value Then Sheet1.Cells(hang + 1, 2).Value = Sheet1.Cells(hang, 2).Value 'Sheet1.Cells(hang, 2).Value = 0 Sheet1.Cells(hang, 2).Clear Else 'Sheet1.Cells(hang, 2).Value = 0 Sheet1.Cells(hang, 2).Clear End If hang = hang + 1 Loop hang = hang + 1 Loop
谢谢能贴出自己的解决方法。 另:记着结帖。[/quote] 新人刚上csdn不知如何结贴,请教版主。[/quote] 帖子标题上面有“结帖”菜单。
worldy 2013-06-05
  • 打赏
  • 举报
回复
Private Sub GetMax()
Dim i As Long
Dim tSheet As Worksheet
Dim sPrev As String
Dim sOrder As String
Dim Price As Single
Dim MaxP As Single

Set tSheet = ThisWorkbook.ActiveSheet
With tSheet
i = 1
sPrev = .Cells(i, 1)
MaxP = .Cells(i, 2)
While sPrev <> ""
sOrder = .Cells(i, 1)
Price = .Cells(i, 2)
If sOrder <> sPrev Then
Debug.Print
Debug.Print sPrev, MaxP

sPrev = sOrder
MaxP = Price
Else
If Price > MaxP Then
MaxP = Price
End If
End If

i = i + 1
Wend

End With
End Sub
SongPixy 2013-06-05
  • 打赏
  • 举报
回复
引用 5 楼 lelouch712 的回复:
不是这样的。和订单号无关的。我要算出来的只是订单号对应的最大的那个运费价格
看来你没看懂 读订单号 当订单号为当前处理订单时 判断价格 如价格大于保存值 则记录新价格 如果记录价格为零则无此订单号 否则输出订单号及最大价格 另外 建议还是不直接删除而是另表保存为好
lelouch712 2013-06-05
  • 打赏
  • 举报
回复
For i = StartRow To Cells(Rows.count, StartCol).End(3).Row Step 1 If mysheet.Cells(i, StartCol).Value = mysheet.Cells(i + 1, StartCol).Value Then For j = i To ******Step 1 If mysheet.Cells(i, CalculaterCol).Value <= mysheet.Cells(i + 1, CalculaterCol).Value Then sum = sum + mysheet.Cells(i, CalculaterCol).Value End If Next j End If Next i 我这个循环写到这里。在 For j = i To ******Step 1这里不知道怎么循环了,几to几啊……高手求解~
Tiger_Zhao 2013-06-05
  • 打赏
  • 举报
回复
按照 (订单号 正序,运费价格 倒序) 排序
然后充第3行开始逐行处理,如果订单号和上一行相同,删除该行。

最后剩下的就是每个订单号和最大运费。
lelouch712 2013-06-05
  • 打赏
  • 举报
回复
不是这样的。和订单号无关的。我要算出来的只是订单号对应的最大的那个运费价格
lelouch712 2013-06-05
  • 打赏
  • 举报
回复
订单号是要循环的,是要根据价格循环的……
SongPixy 2013-06-05
  • 打赏
  • 举报
回复
方法如下: A = 最小订单号 B = 最大订单号 C = B - A Max = 最大行号 For I = 1 To C D = 0 For J = 1 To Max If 订单号(J) = A And 运费(J) > D Then D = 运费(J) Next If D > 0 Then Debug.Print "订单号";A,"运费",D A = A + 1 Next
lelouch712 2013-06-05
  • 打赏
  • 举报
回复
我要做个vba程序。因为功能是要保留最大值,把其他的都删掉,所以需要些这个算法
SongPixy 2013-06-05
  • 打赏
  • 举报
回复
最简单的就是在EXCEL里按AB两列排序
milaoshu1020 2013-06-05
  • 打赏
  • 举报
回复
试试用Scripting.Dictionary key为订单号; value为价格; 遍历所有单元格: 如果运单号不能存在于Dictionary中的话,就直接将订单号和价格一起加入Dictionary中。 如果运单号已经在Dictionary中存在的话,就比较价格,如果大就更新value,否则不更新。
evilboy_huang 2013-06-05
  • 打赏
  • 举报
回复
如果是我做,直接用个透视表就行了
SongPixy 2013-06-05
  • 打赏
  • 举报
回复
从最小订单号开始依次用冒泡法在整个表内轮询一次最大价格
SongPixy 2013-06-05
  • 打赏
  • 举报
回复
A = 1000 '最小订单号 B = 2000 '最大订单号 C = B - A Max = Application.CountA(ActiveSheet.Range("A:A")) For I = 1 To C D = 0 For J = 1 To Max If Sheet1.Cells(J, 1).Value = A And Sheet1.Cells(J, 2).Value > D Then D = Sheet1.Cells(J, 2).Value Next If D > 0 Then Debug.Print "订单号";A,"运费";D A = A + 1 Next
dsd999 2013-06-05
  • 打赏
  • 举报
回复
引用 10 楼 lelouch712 的回复:
解决了,谢谢各位高手提供思路。顺着你们的思路我写出来了,代码如下: hang = 4 lie = 1 Do While Sheet1.Cells(hang, lie).Value <> "" Do While Sheet1.Cells(hang, 1).Value = Sheet1.Cells(hang + 1, 1).Value If Sheet1.Cells(hang, 2).Value > Sheet1.Cells(hang + 1, 2).Value Then Sheet1.Cells(hang + 1, 2).Value = Sheet1.Cells(hang, 2).Value 'Sheet1.Cells(hang, 2).Value = 0 Sheet1.Cells(hang, 2).Clear Else 'Sheet1.Cells(hang, 2).Value = 0 Sheet1.Cells(hang, 2).Clear End If hang = hang + 1 Loop hang = hang + 1 Loop
谢谢能贴出自己的解决方法。 另:记着结帖。
SongPixy 2013-06-05
  • 打赏
  • 举报
回复
引用 10 楼 lelouch712 的回复:
解决了,谢谢各位高手提供思路。顺着你们的思路我写出来了,代码如下:
如果没有将订单号排过序的话 你这段就会出错
of123 2013-06-05
  • 打赏
  • 举报
回复
如果我来做,就用 ADO 把 Excel 当作外部数据库来查询。 Select 订单号, Max(运费价格) As MaxPrice From [Sheet1$] Group By 订单号 或 Select Max(运费价格) As MaxPrice From [Sheet1$] Where 订单号 = '1001'
lelouch712 2013-06-05
  • 打赏
  • 举报
回复
解决了,谢谢各位高手提供思路。顺着你们的思路我写出来了,代码如下:
hang = 4
lie = 1

Do While Sheet1.Cells(hang, lie).Value <> ""


Do While Sheet1.Cells(hang, 1).Value = Sheet1.Cells(hang + 1, 1).Value


If Sheet1.Cells(hang, 2).Value > Sheet1.Cells(hang + 1, 2).Value Then
Sheet1.Cells(hang + 1, 2).Value = Sheet1.Cells(hang, 2).Value
'Sheet1.Cells(hang, 2).Value = 0
Sheet1.Cells(hang, 2).Clear
Else

'Sheet1.Cells(hang, 2).Value = 0
Sheet1.Cells(hang, 2).Clear

End If

hang = hang + 1
Loop
hang = hang + 1

Loop

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧