网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月04日漏签0天
excel吧 关注:281,447贴子:1,551,363
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 53回复贴,共1页
<<返回excel吧
>0< 加载中...

一万行3列的数据计算一轮要多久呢,处理大数据的朋友可以进来看

  • 只看楼主
  • 收藏

  • 回复
  • 雷锋excel高手
  • E知半解
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1.A , B,C 三列 随机产生10000行的算式  10000X3=30000个数据
格式为: XXX 加 XXX=?? 或 XXX减XXX=??
2. 计算结果后把结果填在??号处.
3. 测试结果 3 秒左右 . 本机配置 cpu 2.66G 内存 4G



  • AllenSyney
  • E夫当关
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
目测不应超过0.1秒


2025-08-04 06:57:24
广告
不感兴趣
开通SVIP免广告
  • 雷锋excel高手
  • E知半解
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
本机为10年前的老爷机,有点慢
现在加3倍数据量,30000行,3列 一共9万个 测试
1.随机填90000格 算式,中间符号用中文"加“和”减”
2.计算结果填入?号处
3.测试2次的结果 都为 6秒左右
第一次

第二次


  • ChinaMagicHerb
  • E通百通
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

笔记本电脑内存16G,你的电脑上跑应该会慢一点


  • ChinaMagicHerb
  • E通百通
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

动态图片比较真实


  • 雷锋excel高手
  • E知半解
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
测试要求:
1.要把符号换成“加”和“减”,不能直接用“+”“-”,用“+””-“少了几十万次运算了
2. 先随机产生算式,再计算 只记录计算的时间


  • ChinaMagicHerb
  • E通百通
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

+-改为中文加减确实慢了大概0.1秒,没有慢100倍。
动态截图你也看到了,我生成题目跟计算答案是在两个不同的过程进行的,并没有在生成题目时将数字写入内存。


  • AllenSyney
  • E夫当关
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
保持对他人的敬畏,你可以学的更多


2025-08-04 06:51:24
广告
不感兴趣
开通SVIP免广告
  • 硫酸下
  • E夫当关
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
生成时间0.6秒多,计算时间差不多多一点0.7秒多三万行。我贴下计算过程的代码,班门弄斧一下吧,默认30000行,我的电脑耗时是0.7秒多,各位看看哪里需要优化。
右边都是=??的话。
Sub answer()
t = Timer
arr = Range("a1:c30000")
For i = 1 To 3
For j = 1 To 30000
 k = Left(arr(j, i), Len(arr(j, i)) - 3)
 c = InStr(k, "加")
 If c > 0 Then
  arr(j, i) = k & "=" & Left(k, c - 1) * 1 + Mid(k, c + 1, 99)
 Else
  c = InStr(k, "减")
  arr(j, i) = k & "=" & Left(k, c - 1) * 1 - Mid(k, c + 1, 99)
 End If
Next j, i
Range("a1:c30000") = arr
MsgBox Timer - t
End Sub


  • siaojun哥
  • 以E待劳
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Sub test2()
Dim t1: t1 = Timer
Dim i%, j%, str$, output%
Dim rng As Range: Set rng = Range("a1:c30000")
Dim arr(): arr = rng
Dim RE As Object
Set RE = CreateObject("vbscript.regexp")
RE.Global = True
RE.Pattern = "[0-9]+"
For i = 1 To 30000
For j = 1 To 3
str = arr(i, j)
Set matches = RE.Execute(str)
If InStr(str, "加") Then
output = matches(0).Value * 1 + matches(1).Value
Else
output = matches(0).Value * 1 - matches(1).Value
End If
arr(i, j) = Replace(str, "??", output)
Next
Next
Range("e1:g30000") = arr
Range("h1") = Timer - t1
End Sub


  • siaojun哥
  • 以E待劳
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
上面正则果然比较慢,这回放弃了正则,我的电脑跑1.62秒。
Sub test2b()
Dim t1: t1 = Timer
Dim i%, j%, a%, b%, str$, output%
Dim rng As Range: Set rng = Range("a1:c30000")
Dim arr(): arr = rng
For i = 1 To 30000
For j = 1 To 3
str = arr(i, j)
If InStr(str, "加") Then
strs = Split(str, "加")
a = strs(0)
b = Split(strs(1), "=")(0)
output = a + b
Else
strs = Split(str, "减")
a = strs(0)
b = Split(strs(1), "=")(0)
output = a - b
End If
arr(i, j) = Replace(str, "??", output)
Next
Next
Range("e1:g30000") = arr
Range("h1") = Timer - t1
End Sub


  • ChinaMagicHerb
  • E通百通
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
试了一下,3W行数据时,split处理字符串(本机测试1.8秒~1.9秒)会比12楼硫酸兄的left mid 慢大概0.2秒。
Sub t3() '2D array
Dim a, b, c(1 To 30000, 1 To 3), s$, t#, i&, j%
t = Timer
a = Me.Range("A1:C30000").Value
For j = 1 To 3
For i = 1 To 30000
s = Replace(a(i, j), "=??", "")
If InStr(s, "加") Then
b = Split(s, "加")
c(i, j) = b(0) & "加" & b(1) & "=" & CInt(b(0)) + CInt(b(1))
Else
b = Split(s, "减")
c(i, j) = b(0) & "减" & b(1) & "=" & b(0) - b(1)
End If
Next i
Next j
Me.Range("E1:G30000").Value = c
MsgBox Timer - t
End Sub


  • siaojun哥
  • 以E待劳
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
最后这次了,甚么花巧都白干,最原始的方法最有效。
这次1.0703125秒,若按琉大侠帮我做的测试比例计,可能在0.65秒上下。
Sub test_most_simple()
Dim t1: t1 = Timer
Dim i%, j%, d1%, d2%, a%, b%, str$
Dim rng As Range: Set rng = Range("a1:c30000")
Dim arr(): arr = rng
For i = 1 To 30000
For j = 1 To 3
str = arr(i, j)
d1 = InStr(str, "加") + InStr(str, "减")
d2 = InStr(str, "=")
a = 1 * Left(str, d1 - 1)
b = 1 * Mid(str, d1 + 1, d2 - d1 - 1)
If InStr(str, "减") Then b = -b
arr(i, j) = Left(str, Len(str) - 2) & a + b
Next
Next
Range("e1:g30000") = arr
Range("h1") = (Timer - t1)
End Sub


  • 硫酸下
  • E夫当关
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我知道了,原来定义也可以提速,提速0.1秒。比生成数据速度都要快一些了。
Sub an()
Dim i%, j%, c%, k$, arr()
t = Timer
arr = Range("a1:c30000")
For i = 1 To 3
For j = 1 To 30000
 k = Left(arr(j, i), InStr(arr(j, i), "=") - 1)
 c = InStr(k, "加")
 If c > 0 Then
  arr(j, i) = k & "=" & Val(k) + Mid(k, c + 1, 99)
 Else
  c = InStr(k, "减")
  arr(j, i) = k & "=" & Val(k) - Mid(k, c + 1, 99)
 End If
Next j, i
Range("a1:c30000") = arr
MsgBox Timer - t
End Sub


2025-08-04 06:45:24
广告
不感兴趣
开通SVIP免广告
  • 雷锋excel高手
  • E知半解
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
各位大神 牛!!!学习了


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 53回复贴,共1页
<<返回excel吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示