Excel精英培训网

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

[已解决]向高手致敬!

[复制链接]
发表于 2013-4-24 04:03 | 显示全部楼层 |阅读模式
10学分
新建 Microsoft Excel 工作表.rar (5.73 KB, 下载次数: 29)

最佳答案
2013-4-26 00:32
  1. Sub 选择胆码()
  2.    Dim arra, arrb(0 To 9, 0 To 9), i, j, m, n, xMax
  3.    For i = 0 To 9
  4.         Cells(i + 2, 7) = i
  5.    Next i
  6.    arra = Range("F2:G11")
  7.    '排序
  8.    For i = 0 To 8
  9.     For j = i + 1 To 9
  10.         If arra(i + 1, 1) < arra(j + 1, 1) Or (arra(i + 1, 1) = arra(j + 1, 1) And arra(i + 1, 2) > arra(j + 1, 2)) Then
  11.             xMax = arra(i + 1, 1)
  12.             arra(i + 1, 1) = arra(j + 1, 1)
  13.             arra(j + 1, 1) = xMax
  14.             
  15.             xMax = arra(i + 1, 2)
  16.             arra(i + 1, 2) = arra(j + 1, 2)
  17.             arra(j + 1, 2) = xMax
  18.         End If
  19.     Next j
  20.     '排名次
  21.    Next i
  22.    arrb(0, 0) = arra(1, 2)
  23.    For i = 1 To 9
  24.         If arra(i + 1, 1) = arra(i, 1) Then
  25.             n = n + 1
  26.             m = m + 1
  27.         Else
  28.             n = 0
  29.         End If
  30.         arrb(i - m, n) = arra(i + 1, 2)
  31.    Next i
  32.    Range("B15:K24") = arrb
  33. End Sub
  34. <p> </p>
复制代码
这个更简洁一些

发表于 2013-4-24 08:51 | 显示全部楼层
用个函数就行了,是不是要这样的结果?

新建11 Microsoft Excel 工作表.rar

7.88 KB, 下载次数: 11

回复

使用道具 举报

 楼主| 发表于 2013-4-24 13:22 | 显示全部楼层
对不起,完全不是这样的,可能是我写的不清楚吧,这个只能用vba,不过还是
谢谢你
回复

使用道具 举报

发表于 2013-4-24 20:27 | 显示全部楼层

  1. Sub 选择胆码()
  2.    Dim arra, arrb(0 To 9, 0 To 9), i, j, m, n, xMax
  3.    For i = 0 To 9
  4.         Cells(i + 2, 7) = i
  5.    Next i
  6.    arra = Range("F2:G11")
  7.    For i = 0 To 8
  8.     For j = i + 1 To 9
  9.         If arra(i + 1, 1) < arra(j + 1, 1) Then
  10.             xMax = arra(i + 1, 1)
  11.             arra(i + 1, 1) = arra(j + 1, 1)
  12.             arra(j + 1, 1) = xMax
  13.             
  14.             xMax = arra(i + 1, 2)
  15.             arra(i + 1, 2) = arra(j + 1, 2)
  16.             arra(j + 1, 2) = xMax
  17.         End If
  18.     Next j
  19.    Next i
  20.    Range("G1:G11").Clear
  21.    arrb(0, 0) = arra(1, 2)
  22.    For i = 1 To 9
  23.         If arra(i + 1, 1) = arra(i, 1) Then
  24.             n = n + 1
  25.             m = m + 1
  26.         Else
  27.             n = 0
  28.         End If
  29.         arrb(i - m, n) = arra(i + 1, 2)
  30.    Next i
  31.    Range("B15:K24") = arrb
  32. End Sub
复制代码
回复

使用道具 举报

发表于 2013-4-25 15:13 | 显示全部楼层
眼花啊啊啊
回复

使用道具 举报

 楼主| 发表于 2013-4-25 19:17 | 显示全部楼层
不好意思,我的电脑刚修好
回复

使用道具 举报

 楼主| 发表于 2013-4-25 19:19 | 显示全部楼层
谢谢,正是我想要的。不过下面的胆码每行没有按顺序排列,还请1032446692 老师给辛苦一下,因为这关系到下面的取值问题。
谢谢!!!
回复

使用道具 举报

发表于 2013-4-25 19:31 | 显示全部楼层
这代码看的眼花啊-----------
回复

使用道具 举报

发表于 2013-4-26 00:29 | 显示全部楼层
Sub 选择胆码()
   Dim arra, arrb(0 To 9, 0 To 9), i, j, m, n, xMax
   For i = 0 To 9
        Cells(i + 2, 7) = i
   Next i
   arra = Range("F2:G11")
   '排序
   For i = 0 To 8
    For j = i + 1 To 9
        If arra(i + 1, 1) < arra(j + 1, 1) Then
            xMax = arra(i + 1, 1)
            arra(i + 1, 1) = arra(j + 1, 1)
            arra(j + 1, 1) = xMax
            
            xMax = arra(i + 1, 2)
            arra(i + 1, 2) = arra(j + 1, 2)
            arra(j + 1, 2) = xMax
        End If
    Next j
    '排名次
   Next i
   arrb(0, 0) = arra(1, 2)
   For i = 1 To 9
        If arra(i + 1, 1) = arra(i, 1) Then
            n = n + 1
            m = m + 1
        Else
            n = 0
        End If
        arrb(i - m, n) = arra(i + 1, 2)
   Next i
   '调整顺序
   For i = 0 To UBound(arrb)
    For j = 0 To UBound(arrb, 2)
        For m = j + 1 To UBound(arrb, 2)
            If arrb(i, j) > arrb(i, m) And arrb(i, j) <> "" And arrb(i, m) <> "" Then
                xMax = arrb(i, j)
                arrb(i, j) = arrb(i, m)
                arrb(i, m) = xMax
            End If
        Next m
    Next j
   Next i
   Range("B15:K24") = arrb
End Sub
回复

使用道具 举报

发表于 2013-4-26 00:32 | 显示全部楼层    本楼为最佳答案   
  1. Sub 选择胆码()
  2.    Dim arra, arrb(0 To 9, 0 To 9), i, j, m, n, xMax
  3.    For i = 0 To 9
  4.         Cells(i + 2, 7) = i
  5.    Next i
  6.    arra = Range("F2:G11")
  7.    '排序
  8.    For i = 0 To 8
  9.     For j = i + 1 To 9
  10.         If arra(i + 1, 1) < arra(j + 1, 1) Or (arra(i + 1, 1) = arra(j + 1, 1) And arra(i + 1, 2) > arra(j + 1, 2)) Then
  11.             xMax = arra(i + 1, 1)
  12.             arra(i + 1, 1) = arra(j + 1, 1)
  13.             arra(j + 1, 1) = xMax
  14.             
  15.             xMax = arra(i + 1, 2)
  16.             arra(i + 1, 2) = arra(j + 1, 2)
  17.             arra(j + 1, 2) = xMax
  18.         End If
  19.     Next j
  20.     '排名次
  21.    Next i
  22.    arrb(0, 0) = arra(1, 2)
  23.    For i = 1 To 9
  24.         If arra(i + 1, 1) = arra(i, 1) Then
  25.             n = n + 1
  26.             m = m + 1
  27.         Else
  28.             n = 0
  29.         End If
  30.         arrb(i - m, n) = arra(i + 1, 2)
  31.    Next i
  32.    Range("B15:K24") = arrb
  33. End Sub
  34. <p> </p>
复制代码
这个更简洁一些
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 02:30 , Processed in 0.320878 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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