当前位置:编程学习 > VB >>

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

比如这样的一个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循环


--------------------编程问答-------------------- 最简单的就是在EXCEL里按AB两列排序 --------------------编程问答-------------------- 我要做个vba程序。因为功能是要保留最大值,把其他的都删掉,所以需要些这个算法 --------------------编程问答-------------------- 方法如下:

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 --------------------编程问答-------------------- 订单号是要循环的,是要根据价格循环的…… --------------------编程问答-------------------- 不是这样的。和订单号无关的。我要算出来的只是订单号对应的最大的那个运费价格 --------------------编程问答-------------------- 按照 (订单号 正序,运费价格 倒序) 排序
然后充第3行开始逐行处理,如果订单号和上一行相同,删除该行。

最后剩下的就是每个订单号和最大运费。
--------------------编程问答-------------------- 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几啊……高手求解~ --------------------编程问答--------------------
引用 5 楼 lelouch712 的回复:
不是这样的。和订单号无关的。我要算出来的只是订单号对应的最大的那个运费价格

看来你没看懂
读订单号
当订单号为当前处理订单时
判断价格
如价格大于保存值
则记录新价格

如果记录价格为零则无此订单号
否则输出订单号及最大价格

另外
建议还是不直接删除而是另表保存为好 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 如果我来做,就用 ADO 把 Excel 当作外部数据库来查询。

Select 订单号, Max(运费价格) As MaxPrice From [Sheet1$] Group By 订单号



Select Max(运费价格) As MaxPrice From [Sheet1$] Where 订单号 = '1001' --------------------编程问答--------------------
引用 10 楼 lelouch712 的回复:
解决了,谢谢各位高手提供思路。顺着你们的思路我写出来了,代码如下:

如果没有将订单号排过序的话
你这段就会出错 --------------------编程问答--------------------
引用 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


谢谢能贴出自己的解决方法。

另:记着结帖。 --------------------编程问答-------------------- 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 --------------------编程问答-------------------- 从最小订单号开始依次用冒泡法在整个表内轮询一次最大价格 --------------------编程问答-------------------- 如果是我做,直接用个透视表就行了 --------------------编程问答-------------------- 试试用Scripting.Dictionary
key为订单号;
value为价格;

遍历所有单元格:
如果运单号不能存在于Dictionary中的话,就直接将订单号和价格一起加入Dictionary中。
如果运单号已经在Dictionary中存在的话,就比较价格,如果大就更新value,否则不更新。 --------------------编程问答--------------------
引用 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


谢谢能贴出自己的解决方法。

另:记着结帖。


新人刚上csdn不知如何结贴,请教版主。 --------------------编程问答--------------------
引用 18 楼 lelouch712 的回复:
新人刚上csdn不知如何结贴

贴子下方有个【结贴】按钮
点击
然后选择有无满意结果
如果是有的话
给你认可的回复分别打分
给分合计不超过问题总分 --------------------编程问答--------------------
引用 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


谢谢能贴出自己的解决方法。

另:记着结帖。


新人刚上csdn不知如何结贴,请教版主。


帖子标题上面有“结帖”菜单。
补充:VB ,  VBA
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,