VB Excel问题代码需要修改,求指正

OptionExplicitSub排名()DimdicAsNewDictionaryDimiAsInteger,jAsInteger,kAsInteger,mAsInte... Option ExplicitSub 排名()Dim dic As New DictionaryDim i As Integer, j As Integer, k As Integer, m As Integer, n As IntegerDim arrDim rng As RangeColumns("d:j").Clearn = Cells(Rows.Count, 1).End(xlUp).Rowarr = Range("a1").CurrentRegionFor i = 2 To UBound(arr) dic.Item(arr(i, 2)) = ""NextFor j = 0 To dic.Count - 1 k = k + 1 For Each rng In Range("b2:b" & n) If rng.Value = dic.Keys(j) Then m = m + 1 Cells(k, 4) = "第" & k & "名" Cells(k, m + 4) = rng.Offset(0, -1).Value End If Next m = 0NextEnd Sub 展开
 我来答
阳光上的桥
2021-01-20 · 知道合伙人软件行家
阳光上的桥
知道合伙人软件行家
采纳数:21424 获赞数:65793
网盘是个好东东,可以对话和传文件

向TA提问 私信TA
展开全部

现在的代码缺少排名过程,正确的程序代码如下图:

执行效果:


代码文本:

Option Explicit

Sub 排名()

    Dim arr, rlt, dic, i, j, t, t2

    arr = Range("a1").CurrentRegion

    Set dic = CreateObject("Scripting.Dictionary")

    For i = 2 To UBound(arr)

        dic(arr(i, 2)) = 0

    Next i

    ReDim rlt(1 To dic.Count, 1 To UBound(arr))

    For Each t In dic.Keys

        For Each t2 In dic.Keys

            If t2 >= t Then dic(t) = dic(t) + 1

        Next t2

        '此时dic(t)为成绩t的名次

        j = 2 '输出数组的列

        For i = 2 To UBound(arr)

            If arr(i, 2) = t Then

                rlt(dic(t), j) = arr(i, 1)

                j = j + 1

            End If

        Next i

    Next t

    For i = 1 To UBound(rlt)

        rlt(i, 1) = "第" & i & "名"

    Next i

    Range("d1").Resize(UBound(rlt), UBound(rlt, 2)) = rlt '输出结果

End Sub

眯住眼串针
科技发烧友

2021-01-20 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:1.1万
采纳率:58%
帮助的人:3090万
展开全部
字典内先排序啊
去搜索一下:vba 字典排序
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Ynzsvt
2021-01-20 · TA获得超过6662个赞
知道大有可为答主
回答量:1.5万
采纳率:40%
帮助的人:2613万
展开全部
代码本身就没有排序功能。只是按出现的顺序出来。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式