Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: 青龙北斗星

求教

[复制链接]
发表于 2019-8-25 13:44 | 显示全部楼层
你不是说不要在 Excel 表中体现中间过程么?又改需求啦?
没看懂你的要求,哪部分留在工作表用函数手工做?
你说一下可能用什么计算方式,我试试能否修改好给你做参考,以后你就可以自己修改了。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

 楼主| 发表于 2019-8-25 16:15 | 显示全部楼层
本帖最后由 青龙北斗星 于 2019-8-25 16:18 编辑
rardge2015 发表于 2019-8-25 13:44
你不是说不要在 Excel 表中体现中间过程么?又改需求啦?
没看懂你的要求,哪部分留在工作表用函数手 ...

  • For i = 1 To intLen
  •             tmpData(i) = srcData(i, intCurr) * srcData(i, intNext) Mod 10
  •             此部份留在工作表计算


回复

使用道具 举报

 楼主| 发表于 2019-8-25 16:17 | 显示全部楼层
青龙北斗星 发表于 2019-8-25 16:15
  • For i = 1 To intLen
  •             tmpData(i) = srcData(i, intCurr) * srcData(i, intNext) M ...

  • 将S列得到7次不同的结果取最大值。
    回复

    使用道具 举报

    发表于 2019-8-25 21:41 | 显示全部楼层
    是不是该这么理解你的需求:
    保留  N、Q、S 列,还是用你原来的方法,用程序控制 7 次,将 M2 复制给 N2,让 N、Q、S 列的函数公式取值计算,但 S 列每次得到的结果“不显示在 U~AA 列”,而是保存于内存中处理寻找最大值,并显示到 AE 列。
    这样,你就可以随意编辑 S 列的公示了,是吧?
    1. Sub test_v2()
    2.     Dim Sht As Worksheet
    3.     Dim i As Integer, n As Long, iRow As Long
    4.     Dim arrTmp As Variant, arrTar As Variant
    5.    
    6.     Application.ScreenUpdating = False
    7.    
    8.     Set Sht = Sheets("sheet1")
    9.    
    10.     '取数据行数,以 B 列为基准
    11.     iRow = Sht.cells(Rows.Count, 2).End(xlUp).Row - 3
    12.    
    13.     '动态调整结果数组的长度,并初始化赋值 0
    14.     ReDim arrTar(1 To iRow)
    15.     For n = 1 To iRow
    16.         arrTar(n) = 0
    17.     Next
    18.    
    19.     For i = 1 To 7
    20.         'M2 赋值给 N2,将 S 列的计算结果读入临时数组(二维)
    21.         Sht.Range("N2") = Sht.Range("M2").Value
    22.         arrTmp = Sht.Range("S4").Resize(iRow, 1)
    23.         
    24.         For n = 1 To iRow
    25.             '找最大值
    26.             If arrTar(n) < arrTmp(n, 1) Then arrTar(n) = arrTmp(n, 1)
    27.         Next
    28.     Next
    29.    
    30.     '输出结果到 AF 列
    31.     Sht.Range("AF4").Resize(iRow, 1) = WorksheetFunction.Transpose(arrTar)
    32.    
    33.     Set Sht = Nothing
    34.     Application.ScreenUpdating = True
    35. End Sub
    复制代码
    回复

    使用道具 举报

     楼主| 发表于 2019-8-25 23:24 | 显示全部楼层
    rardge2015 发表于 2019-8-25 21:41
    是不是该这么理解你的需求:
    保留  N、Q、S 列,还是用你原来的方法,用程序控制 7 次,将 M2 复制给 N2, ...

    万分感谢!!!是的,就是这样!辛苦了!这是怪我,我表达得不好。
    回复

    使用道具 举报

     楼主| 发表于 2019-8-26 00:20 | 显示全部楼层
    本帖最后由 青龙北斗星 于 2019-8-26 00:33 编辑
    青龙北斗星 发表于 2019-8-25 23:24
    万分感谢!!!是的,就是这样!辛苦了!这是怪我,我表达得不好。


    回复

    使用道具 举报

     楼主| 发表于 2019-8-26 11:53 | 显示全部楼层
    本帖最后由 青龙北斗星 于 2019-8-26 13:20 编辑


    回复

    使用道具 举报

    发表于 2019-8-26 12:33 | 显示全部楼层
    本帖最后由 rardge2015 于 2019-8-26 12:41 编辑

    改以下代码:
    1. iRow = Sht.cells(Rows.Count, 2).End(xlUp).Row - 3
    复制代码
    把 2 改掉,Cells 语法是Cells(行,列),B 在英文排序中是 2,所以写 2,AAA 可以直接写“AAA”,也可以写 703(= 26 + 26 × 26 + 1)。
    1. iRow = Sht.cells(Rows.Count, "AAA").End(xlUp).Row - 3
    复制代码
    我在定义 iRow 的时候用的是 Long 型变量,这个类型的最大值是 2,147,483,647,你可以处理这么多行,足够了吧。如果你说数据上万条,那其实都不需要用 Long 型,Integer 型就够了,上限是 32,767。


    补充提醒:
    建议取数据的行数,最好是在原始数据区域取值,不要用动态产生过程的列,比如 S 列。
    如果数据量真的很大,几万条,那你在表格中大量的公式,会拖慢速度,包括打开文件的速度,也会增加 Excel 文件的体积。对变成熟悉一点后,尽量把计算公式放在程序中,然后把结果输出到表上,表上都是纯数值。

    回复

    使用道具 举报

     楼主| 发表于 2019-8-26 19:59 | 显示全部楼层
    本帖最后由 青龙北斗星 于 2019-8-26 22:40 编辑
    rardge2015 发表于 2019-8-26 12:33
    改以下代码:
    把 2 改掉,Cells 语法是Cells(行,列),B 在英文排序中是 2,所以写 2,AAA 可以直接写“ ...
    移值到别的表格会内存溢出,如何解决?
    回复

    使用道具 举报

    发表于 2019-8-27 10:11 | 显示全部楼层
    你数据量和公式很多么?
    用 单步执行 或者 设置断点 试试,看运行到哪里出错。
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-19 14:01 , Processed in 0.265759 second(s), 9 queries , Gzip On, Yac On.

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

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