全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 Excel
4057 6
2018-03-20
跪求大神们帮忙,非常非常感谢!

先贴一个我自己写的函数的公式
=IF(ISBLANK(return!B2),"",IF(RANK(return!B2,return!$B2:$IPS2)<=80,1,IF(RANK(return!B2,return!$B2:$IPS2,1)<=80,-1,0)))

样本是6519*9653的,也就是从A1到IPS9653。A列是日期,第一行是变量名称,数据是从B2到IPS9653。
运算逻辑是,首先排除空单元格,每一行找出排序前80的标记为1,排序末80的标记为-1,其他标记为0。

可能是我电脑问题,用函数公式计算量太大,程序不断停止运行,非常痛苦,但我自己又不会vba,又来不及学,所以来找大家帮忙,真的非常感谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2018-3-20 08:14:02
如果方便,上传数据。函数运算量大,不过可以先手动更新计算写公式。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-3-20 18:16:24
車樹森 发表于 2018-3-20 08:14
如果方便,上传数据。函数运算量大,不过可以先手动更新计算写公式。
谢谢回复,我自己学习了一下,写了一个比较蠢的vba,也算运行成功了,但是耗时非常久。
贴一下我的代码,有可以改进的地方希望能指出,谢谢啦~

Sub ReturnRank()

Dim a, b, i, j

For i = 2 To 9654
  For j = 2 To 6519
  
    If IsEmpty(Worksheets("return").Cells(i, j).Value) Then
         Worksheets("rank").Cells(i, j).Value = ""
    Else
         Worksheets("return").Activate
         a = Application.WorksheetFunction.rank(Cells(i, j), Range(Cells(i, 2), Cells(i, 6519)), 0)
         b = Application.WorksheetFunction.rank(Cells(i, j), Range(Cells(i, 2), Cells(i, 6519)), 1)
         

         If a <= 80 Then
            Worksheets("rank").Cells(i, j).Value = 1
         ElseIf b <= 80 Then
            Worksheets("rank").Cells(i, j).Value = -1
         Else
            Worksheets("rank").Cells(i, j).Value = 0
            
         End If
    End If
   
  Next j

Next i

End Sub
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-3-22 14:04:34
解决问题就好啊
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-3-22 14:07:02
如果要运行速度提升要用数组运算替换掉单元格运算
出结果后再复制到单元格上
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-3-22 14:07:05
如果要运行速度提升要用数组运算替换掉单元格运算
出结果后再复制到单元格上
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群