Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2091|回复: 7

[已解决]根据窗体内数值判断名次

[复制链接]
发表于 2012-2-14 21:16 | 显示全部楼层 |阅读模式
根据窗体内数值判断名次.rar (9.95 KB, 下载次数: 26)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-2-14 21:28 | 显示全部楼层
回复

使用道具 举报

发表于 2012-2-14 22:26 | 显示全部楼层
  1. Private Sub CommandButton1_Click()    '从小到大
  2.     Dim i, j, k As Byte
  3.     Dim ar(1 To 8), br(1 To 8)
  4.     Dim temp
  5.     For i = 1 To 8
  6.         ar(i) = Val(Me.Controls("TextBox" & i))
  7.     Next
  8.     For i = 1 To 7
  9.         For j = i + 1 To 8
  10.             If ar(i) > ar(j) Then
  11.                 temp = ar(i)
  12.                 ar(i) = ar(j)
  13.                 ar(j) = temp
  14.             End If
  15.         Next j
  16.     Next i
  17.     Label1 = ar(1)
  18.     Label2 = ar(2)
  19.     Label5 = ar(3)
  20.     Label6 = ar(4)
  21.     Label7 = ar(5)
  22.     Label8 = ar(6)
  23.     Label9 = ar(7)
  24.     Label10 = ar(8)
  25. End Sub

  26. Private Sub CommandButton2_Click()    '从大到小
  27.     Dim i, j, k As Byte
  28.     Dim ar(1 To 8), br(1 To 8)
  29.     Dim temp
  30.     For i = 1 To 8
  31.         ar(i) = Val(Me.Controls("TextBox" & i))
  32.     Next
  33.     For i = 1 To 7
  34.         For j = i + 1 To 8
  35.             If ar(i) < ar(j) Then
  36.                 temp = ar(i)
  37.                 ar(i) = ar(j)
  38.                 ar(j) = temp
  39.             End If
  40.         Next j
  41.     Next i
  42.     Label1 = ar(1)
  43.     Label2 = ar(2)
  44.     Label5 = ar(3)
  45.     Label6 = ar(4)
  46.     Label7 = ar(5)
  47.     Label8 = ar(6)
  48.     Label9 = ar(7)
  49.     Label10 = ar(8)
  50. End Sub
复制代码
根据窗体内数值判断名次.rar (13.69 KB, 下载次数: 11)
回复

使用道具 举报

 楼主| 发表于 2012-2-14 22:39 | 显示全部楼层
hrpotter 发表于 2012-2-14 22:26

谢谢,如果数据变化后,名次判断就出现问题了。
题意是:不论数值如何变化,最小的都是第一名,次为第二名,............;反之,最大为第一,次为第二名。如果名次出现相同,最好能出现提示,再进行判断操作。
谢谢指教!!!
回复

使用道具 举报

发表于 2012-2-14 22:51 | 显示全部楼层
c888 发表于 2012-2-14 22:39
谢谢,如果数据变化后,名次判断就出现问题了。
题意是:不论数值如何变化,最小的都是第一名,次为第二 ...

你试过吗,我改了数据,排序也正确呀!
回复

使用道具 举报

发表于 2012-2-15 03:49 | 显示全部楼层
本帖最后由 happym8888 于 2012-2-15 03:51 编辑



  1. Private Sub CommandButton1_Click() '从小到大
  2. Happy 1
  3. End Sub


  4. Private Sub CommandButton2_Click() '从大到小
  5. Happy -1
  6. End Sub


  7. Sub Happy(Zof As Integer)
  8. Dim i, j, Ar(1 To 8, 1 To 2), Temp, Temp2
  9. For i = 1 To 8
  10. Frame2.Controls(i - 1) = ""
  11. Next
  12. For i = 1 To 8
  13. Ar(i, 1) = Val(Frame1.Controls(i - 1).Text)
  14. Ar(i, 2) = i
  15. Next
  16. For i = 1 To 7
  17. For j = i + 1 To 8
  18. If Zof * (Ar(i, 1) - Ar(j, 1)) > 0 Then
  19. Temp = Ar(i, 1): Temp2 = Ar(i, 2)
  20. Ar(i, 1) = Ar(j, 1): Ar(i, 2) = Ar(j, 2)
  21. Ar(j, 1) = Temp: Ar(j, 2) = Temp2
  22. End If
  23. Next j
  24. Next i
  25. For i = 1 To 8
  26. Frame2.Controls(Ar(i, 2) - 1) = i
  27. Next i
  28. For i = 1 To 7
  29. If Ar(i, 1) = Ar(i + 1, 1) Then Frame2.Controls(Ar(i + 1, 2) - 1) = Frame2.Controls(Ar(i, 2) - 1)
  30. Next
  31. End Sub
复制代码
根据窗体内数值判断名次(Happym8888).rar (10.68 KB, 下载次数: 10)
回复

使用道具 举报

 楼主| 发表于 2012-2-15 07:26 | 显示全部楼层
happym8888 发表于 2012-2-15 03:49

happym8888 您好!谢谢又能得到您的帮助。
有个问题请教下:第一:当成绩为空时,名次却判断为1。第二,当名次相同时,能否有个提示框出现。再次感谢!
回复

使用道具 举报

发表于 2012-2-15 19:25 | 显示全部楼层    本楼为最佳答案   
c888 发表于 2012-2-15 07:26
happym8888 您好!谢谢又能得到您的帮助。
有个问题请教下:第一:当成绩为空时,名次却判断为1。第二, ...
  1. Private Sub CommandButton1_Click() '从小到大
  2. Happy 1
  3. End Sub

  4. Private Sub CommandButton2_Click() '从大到小
  5. Happy -1
  6. End Sub

  7. Sub Happy(ZoF As Integer)
  8. Dim i, j, Ar(1 To 8, 1 To 2), Temp, Temp2
  9. For i = 1 To 8
  10. Frame2.Controls(i - 1) = ""
  11. Next
  12. For i = 1 To 8
  13. Ar(i, 1) = Val(Frame1.Controls(i - 1).Text)
  14. Ar(i, 2) = i
  15. Next
  16. For i = 1 To 7
  17. For j = i + 1 To 8
  18. If ZoF * (Ar(i, 1) - Ar(j, 1)) > 0 Then
  19. Temp = Ar(i, 1): Temp2 = Ar(i, 2)
  20. Ar(i, 1) = Ar(j, 1): Ar(i, 2) = Ar(j, 2)
  21. Ar(j, 1) = Temp: Ar(j, 2) = Temp2
  22. End If
  23. Next j
  24. Next i
  25. j = 0
  26. For i = 1 To 8
  27. Frame2.Controls(Ar(i, 2) - 1) = i - j
  28. If Ar(i, 1) = 0 Then j = j + 1: Frame2.Controls(Ar(i, 2) - 1) = ""
  29. Next i
  30. For i = 1 To 7
  31. If Ar(i, 1) = Ar(i + 1, 1) Then
  32. Response = MsgBox("有相同数据,按并列名称排序?" & Chr(10) & "选择“确定”按并列名次排序?" & Chr(10) & "选择“取消”按目前形式排序", vbOKCancel)
  33. If Response = vbOK Then Frame2.Controls(Ar(i + 1, 2) - 1) = Frame2.Controls(Ar(i, 2) - 1) Else Exit For
  34. End If
  35. Next
  36. End Sub
复制代码

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 20:01 , Processed in 0.390582 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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