秦時明月漢時圓 秦時明月漢時圓
关注数: 1 粉丝数: 215 发帖数: 6,938 关注贴吧数: 7
测试VBA代码去重复效率,求解优化代码 RT,今天测试了200000组数据,随机值为区间范围[200,720]的随机整数,测试结果如图:代码如下: Sub 命令式去重复() Dim arr, r As Long, t As Single t = Timer r = Cells(Rows.Count, 1).End(xlUp).Row arr = Range("a3:a" & r) Range("b2:b" & r).ClearContents [b3].Resize(UBound(arr)) = arr Range("b3:b" & r).RemoveDuplicates _ Columns:=1, Header:=xlNo [b2] = Format(Timer - t, "0.0000秒") End Sub Sub 字典法去重复() Dim arr, dic_keys Dim r As Long Dim t As Single Dim dic As Object t = Timer Set dic = CreateObject("Scripting.Dictionary") r = Cells(Rows.Count, 1).End(xlUp).Row arr = Range("a3:a" & r) For i = 1 To UBound(arr) dic(arr(i, 1)) = "" Next dic_keys = dic.Keys ReDim brr(1 To dic.Count, 1 To 1) For i = 1 To dic.Count brr(i, 1) = dic_keys(i - 1) Next Range("c2:c" & r).ClearContents [c3].Resize(dic.Count) = brr [c2] = Format(Timer - t, "0.0000秒") End Sub Sub 数组法去重复() Dim arr, brr, tmp Dim i As Long, n As Long Dim r As Long, t As Single t = Timer r = Cells(Rows.Count, 1).End(xlUp).Row arr = Range("a3:a" & r) ReDim brr(1 To UBound(arr), 1 To 1) For i = 1 To UBound(arr) tmp = arr(i, 1) For j = 1 To i If brr(j, 1) = tmp Then GoTo line Next n = n + 1 brr(n, 1) = tmp line: Next Range("d2:d" & r).ClearContents [d3].Resize(n) = brr [d2] = Format(Timer - t, "0.0000秒") End Sub Sub 标记法去重复() Dim arr, brr, tmp Dim i As Long, found As Long Dim t As Single, r As Long t = Timer r = Cells(Rows.Count, 1).End(xlUp).Row arr = Range("a3:a" & r) ReDim brr(1 To UBound(arr), 1 To 1) For i = 1 To UBound(arr) tmp = arr(i, 1) For j = 1 To i If arr(j, 1) = tmp Then found = found + 1 End If Next If found = 1 Then n = n + 1 brr(n, 1) = tmp End If found = 0 Next Range("e2:e" & r).ClearContents [e3].Resize(n) = brr [e2] = Format(Timer - t, "0.0000秒") End Sub Sub 生成随机数() Dim i As Long, arr(1 To 200000, 1 To 1) For i = 1 To 200000 Randomize arr(i, 1) = 520 * Rnd \ 1 + 200 Next [a3:a200002].ClearContents [a3].Resize(200000) = arr End Sub 目前看来当关键字很少,字典取重复效率最高。那么问题来了,如果不用字典,请问代码怎么优化?
矩阵转换VBA代码,喜欢的小伙伴拿去用 实际请根据需求适当修改代码,这里源数据按列从到右存放。如果源数据是按行从上往下存放,请先转置。 VBA代码如下: Sub New_Trans() Call MyTrans(0) '0按列匹配数据,1按行匹配数据 End Sub Sub MyTrans(ByVal MatchOrder As Integer) Dim rng As Range, arr, temp, myarr Dim i&, j&, m&, n&, r&, c& Sheet1.Activate '默认原始数据在shee1工作表 Set rng = Application.InputBox(prompt:="请选择源数据区域", _ Title:="数据转换", Type:=8) r = rng.Rows.Count c = rng.Columns.Count arr = rng ReDim temp(1 To r * c) For j = 1 To c For i = 1 To r temp((j - 1) * r + i) = arr(i, j) Next Next m = Application.InputBox(prompt:="请输入转换后的行数", _ Title:="数据转换", Type:=1) n = Application.InputBox(prompt:="请输入转换后的列数", _ Title:="数据转换", Type:=1) If UBound(temp) <= m * n Then ReDim myarr(1 To m, 1 To n) If MatchOrder = 0 Then For j = 1 To n For i = 1 To m If UBound(temp) >= (j - 1) * m + i Then myarr(i, j) = temp((j - 1) * m + i) End If Next Next ElseIf MatchOrder = 1 Then For i = 1 To m For j = 1 To n If UBound(temp) >= (i - 1) * n + j Then myarr(i, j) = temp((i - 1) * n + j) End If Next Next End If Sheet2.Activate '默认转换后的数据放入sheet2工作表,如果转换后的数据还在sheet1, 请删掉这句 [a1].CurrentRegion.ClearContents '默认清空A1单元格周围所有数据 [a1].Resize(m, n) = myarr '默认从A1开始放数据 Else MsgBox prompt:="数据输入错误", Title:="数据转换" Exit Sub End If End Sub
新手小白成长史,一条公式提取缺号号码 首先感谢硫酸下,花间一壶酒,夜尘无星等大神(大神太多,名字有疏漏的请见谅),是他们直接或间接的无私帮助,让我这个新手小白对excel有着浓厚的兴趣。 规则:A列有编好号的号码1-100号,其中缺了几个号码,B列是完整的1-100编号,现在我们要找出缺号的号码,把它放在C2:C101,不缺号的号码显示为空,如图:先表明一点,我的公式不一定是最优的,只是个人的一些理解,说的不对的地方请各位大神批评指正。我的版本为excel 2007,2003版本的童鞋请升级到高版本。看到这么长的公式不要懵(其实也不是很长),我们分步走。 这个思路很简单,就是在A列里面查找B列,找不到的就是缺号号码。最简单的函数VLOOKUP,我想大家首先会想到这个。 C2输入公式=VLOOKUP(B2,A:A,1,0)后回车,然后下拉填充到C101单元格。现在缺号的号码会显示错误值,我们先去掉错误值用空值代替,改写公式: =IFERROR(VLOOKUP(B2,A:A,1,0),””) 这里缺号的号码为空值,不缺号的正常显示。这个不是我们需要的,我们需要缺号的号码显示值,正常号码显示为空。继续改写公式: =IF(IFERROR(VLOOKUP(B2,A:A,1,0),””)=””,B2,””) 这里就达到了我们第一步要求,但是缺号的号码不是集中在一起,中间有很多空值,我们可以通过筛选-文本筛选—不包含—空值(不填写数据代表空值)来去掉空值,也可以高级筛选—选择不重复记录去掉空值。 童鞋们可能要问,不是一条公式达到这个效果,你这里还用了那么多操作,差评!大家莫着急,我们慢慢来,继续改写公式为数组公式: 首先选择C2:C101这100个单元格,然后输入 = IF(IFERROR(VLOOKUP(B2:B101,A2:A101,1,0),””)=””,B2:B101,””) 如果直接在刚才的基础上修改,记得选择C2:C101的同时,再全选公式,然后CTRL+SHIFT+ENTER同时按,这样就直接得到100个单元格的值;如果是输入公式,直接CTRL+SHIFT+ENTER同时按就可以。 这一步完成,再来下一步,如何用公式提取缺号号码值? 这里大家可以先百度,关键字为:INDEX+SMALL,选择第一条记录:Excel一对多查询(index+small+if)。百度解释的比较清楚,我就不再赘述。 参看了百度,我们现在可以写出公式啦。这里就是一对多的查找,查找C2:C101里面不等于空值的数值,并把他们集中放在一起,例如放在F2:F101单元格。 数组公式,F2:F101输入 =IFERROR(INDEX(C2:C101,SMALL(IF(C2:C101<>"",ROW(1:100),4^8),ROW(1:100))),""),然后CTRL+SHIFT+ENTER,这里仍然用IFERROR去掉错误值,用空值代替。 好啦,到此基本完成,两个公式整合在一起,把C2:C101替换为IF(IFERROR(VLOOKUP(B2:B101,A2:A101,1,0),””)=””,B2:B101,””)就可以。眼尖的童鞋又要问,怎么不是图片的公式呢?这里说到另外一个思路,在A列里面统计B列出现的次数,显然次数为1的代表正常值,为0的代表缺号。 普通公式:=IF(COUNTIF(A:A,B2),””,B2) 数组公式:选择E2:E101单元格,输入=IF(COUNTIF(A2:A101,B2:B101),””,B2:B101), ,然后CTRL+SHIFT+ENTER 最后一条公式得到结果,选择G2:G101,输入数组公式 =IFERROR(INDEX(IF(COUNTIF(A2:A101,B2:B101),"",B2:B101),SMALL(IF(IF(COUNTIF(A2:A101,B2:B101),"",B2:B101)<>"",ROW(1:100),4^8),ROW(1:100))),"") 然后CTRL+SHIFT+ENTER,就可以得到我们想要的结果。
道士发展攻略 道士是很多人的最爱,包括笔者,想当初热血传奇第一个号就是道士。闲话不多说,进入正题。 首先我们要了解本传奇道士的职业特性。道士灵魂火符攻击不高,恢复能力超强(治愈术+瞬回术,做了丹药传承任务恢复能力更强),还有强力的bb火力输出或者牵制。道士最大的优点是省钱,后期不需要搬砖(法师或者战士中后期都是专业搬砖的,道士中期还需要搬砖)。唯一缺点没有群攻技能,打boss需要走位或者卡位,然后上毒+bb助攻(ctrl+s锁定怪物,这需要一些操作,不像战士无脑), 前期比较慢。 1-10级,跟着任务走+砍多钩猫。11-15砍骷髅(打到的宝石换经验,开地图看到一个中间的点那个就是换东西的npc),这个时 间段多攒点钱吧。.15-18级,多买红药下僵尸洞砍僵尸,打技能书,打到的铁矿换经验(开地图看到一个中间的点那个就是换东西的npc)。18级以后, 打尸王,目标是白色玉璞,打到的金矿留10块做任务。打到白色玉璞可以下幻境1(点新手村村长).18级下幻境1有点慢,19级去安全一点。26以前练级 主要是幻境1和铁矿换经验。 26以后可以带双骷髅,僵尸洞练到7级(5级其实够啦,偶有强迫症),运气一下开个双(打紫色或者黄色的僵尸洞以上地图的怪有几率开双倍爆率,紫色30分钟,黄色60分钟。开双最效率的是蜈蚣洞,进去后隐身找有颜色的怪物,如果没有找到退出洞口再进入,反复进行直到出 双。7级骷髅扛不住一群蜈蚣,注意拉骷髅),然后去土城下沃玛寺庙(有一个沃玛护卫,需要等1分多钟刷出来)。沃玛大殿还是别去啦,去啦也不效率 (打沃玛教主运气差啦会被暴击死,自己不死也很费操作)。此刻的目标就是沃玛套+绿色玉璞(可以下幻境2和幻境3)。26-35主要在幻境2升级(一次 大概6万多经验),幻境3勉强可以下(全清大概是11万左右经验,双骷髅卡位沃玛教主注意上毒,教主召唤的小弟也要毒。卡位点在入口处,刷出紫色以上沃玛教主建议回城,双骷髅扛不住。) 35-40,35 级以后可以召唤1个狗+1只骷髅,狗练到最高级(35+级3级狗,37+级5级狗),骷髅练到7级,开双下猪洞。猪洞主要打邪恶蝎蛇,目标祖玛套+绿色玉璞 (土城城主下幻境),褐色玉璞也会爆(不建议去幻境4,boss触龙神不吃魔法攻击,打起来很累,骷髅也不能抗)。这是一个漫长的过程,玩道士的朋友要慢慢忍耐 哦。 40以后,小小翻身,可是别开心的太早,只是召唤两只狗而已,还不会太轻松,bb攻击还太低。把狗狗练到7级,然后去蜈蚣洞开双下骨魔洞(骨魔开双不一定能爆出祈祷套,笔者的祈祷套有三件不是开双打到的),目标祈祷套+赤色玉璞(武器需要祈祷之刃,不是祈祷玉刃看清楚哦)。骨魔洞可以卡位 (ctr+A定住bb,ctrl+Z拉回),有两个卡位点,地图左下角和地图右上角。两个卡位点来说地图左下角更好。左下角地图引来黄泉教主(先上毒然后自己跑开,大概是10秒内他会自动瞬移到你身边攻击你),可以ctrl+A让BB打,你放火符也不会被攻击到。(特殊情况bb会移开一格,速度ctrl+Z拉回,否则教主瞬移到这一格你就会被攻击到)。地图右上角卡位就不能让bb帮忙你打,只能自己火符输出。打到的赤色玉璞就下幻境6,幻境6可 以卡位祖玛教主(地图入口处),目标龙纹剑(龙纹剑还是下幻境6靠谱,隐藏属性提高召唤神兽的攻击)。这是一个费力的过程,笔者打出祈祷套用了10+小 时。好了,祈祷套+龙纹在手,道士初步成型。 下面的发展方向有两个,第一条线继续骨魔洞(卡位太安逸啦),目标赤色玉璞,下幻境6,7,8,9,其中幻境6,7,8的boss爆40级新衣服,幻境9爆逍遥扇。幻境9先在左下角清理所有怪(放心,赤月恶魔刷出来也不会攻击你),然后走到赤月恶魔旁边,召唤bb过来打,注意调整位置,位置不好就只有一只bb输出,自己瞬回不停就行,顺带放火符。 第二条线牛魔大厅,目标赤色玉璞+逍遥扇。牛魔王也可以卡位(参考法师卡位),不过道士纯卡位火符输出太低,除非是黄色的牛魔王,一般不卡位,跑位配合狗狗输出。 其中,逍遥扇幻境9爆率最高。想打牛魔王出扇子,就看看你的rp够强大否。幻境6,7,8全清大概是30多万经验,50以前就来这里升级,顺带涨丹药经验。 打到扇子以后,两条发展路线。第一条,祖玛套直接转真魂套。先做任务开地图到魔龙,然后去天煞大殿刷天煞,直接打真魂套。这条路可行,但是安全性低一些,对操作要求比较高,喜欢挑战的可以尝试。这条线路的优点是直接跳了两套套装,打到真魂一套就是春天。缺点是安全性实在太低,操作牛的你可以尝试。 第二条路线,稳扎稳打型,笔者比较喜欢这么玩,套装一套套打。先去赤月打赤月恶魔,可以卡位。(先站在左下角定住bb,最好打个防,然后把怪全部引来让bb吸引火力,再把三只钢牙蜘蛛引到赤月恶魔刷新点口子左边,然后拉狗。不会卡位的请咨询群里的大神,赤月卡位技术含量有点高,说起来或许简单。)基本上赤月套(极品获得率+2这个是看点)毕业啦,丹药都1级啦,再去刷魔龙教主。魔龙教主爆嗜血术和无极真气,这两个技能满级的道士是另外一种局面,不过无极真气的爆率我只能呵呵啦。道士技能优先于装备,这就是一些人直接祖玛套后打天煞的一个原因。魔龙教主一般人不喜欢打,因为卡位比较麻烦,而且比较慢,无真魂套杀一只大概是5分钟左右,包括最后清理小弟。卡位好以后先打个防,至少3分钟的防才行,然后上毒,火符输出。魔龙教主会在低于4800血召唤两只法师小弟,你杀了会继续召唤,所以只能顶着小弟的火力杀,注意喝药和瞬回。杀死教主以后随机回来,然后拉开距离杀死魔龙教主召唤的小弟,注意瞬回bb,再重新卡位,看准机会捡东西。如果怪物分布不好(多只蛾子和力士),建议回城再来。这是刷魔龙教主比较麻烦和比较慢的原因,也是一些人不喜欢刷的原因。 光芒套齐啦可以去刷天煞,光芒套刷天煞有跑速+3的优势(记得领取时装),更容易躲掉天煞的三道剑气,也更容易卡位天煞。当然缺点是这套获得有些难度(主要是衣服难爆),喜欢挑战的你可以试一下(你喜欢先刷天煞也行,注意走位和隐身)。天煞这货唯一优点是经验值特别高,51级以后练级刷天煞。缺点是爆率是个大坑,做好每天开双刷两小时,刷半个月以上的准备先。终极目标召唤月灵3本,玄天,凤天魔甲(衣)。相对来说天煞出真魂套比较容易,花费500万合成一套吧,配合逍遥扇幸运+4(40%几率打出最大伤害)。刷天煞来说,无真魂套无月灵,熟练卡位和跑位操作的前提下,大概是4分钟左右。打法是先上毒吸引天煞,然后ctrl+s锁定,bb上前输出,自己在后面放火符,注意走位,防止天煞的三道剑气。基本上天煞的三道剑气一出bb差不多就死啦,所以打天煞不用练bb,不断召唤就行。天煞会瞬移4次,分别是低于7500血,低于5500血,低于3800血,低于1800血,其中天煞在低于1800血会召唤2小弟,注意躲避跑开。为了打的稍微快一点,可以刷一个右上角没有弓箭手的地图,卡位天煞。打死天煞后,记得清理小弟。道士魔龙教主卡位和天煞卡位可以参考法师卡位,请参看游戏自带帮助文档。
法师发展攻略(套装到祖玛套) 1-17级,跟着任务走,到17级出1级雷电就去混僵尸洞尸王(1级雷电有点慢,慢慢磨吧,3级雷电僵尸洞就好混啦)。17-26级,继续僵尸洞,铁矿和金矿换经验卷轴,尸王和骷髅精灵爆出的白玉就去混幻境1练级。26以后,学会三级诱惑之光,去白日门找到天子,从他后面的门进入召唤2个虎卫。 好了,有虎卫啦,法师终于有肉盾抗怪啦,泪流满面呀,练到满级吧(不知道是不是3级,颜色只变化3次,但最高级又是传奇bb7级的颜色)。这个时候有两种选择,混蜈蚣洞或者混沃玛大厅。蜈蚣洞由于此刻没盾,操作需要注意补血和风骚的走位。沃玛大厅就是风骚走位,火墙+雷电输出。26-29级需要慢慢练级,打到灰色玉(尸王,邪恶钳虫,沃玛护卫爆)就去幻境2吧。幻境2注意走位和拉bb ,边走位边铺满火墙,可以保证安全。 29级以后有2级火墙要好点,还是需要练级到31。31级只能学会1级魔法盾,安全很多,继续幻境2练级,33级学会3级火墙,34级学会2级魔法盾,3级地狱雷光。好了34级以后,有3级火墙和2级魔法盾混沃玛和幻境2、3就很安逸啦。幻境3注意沃玛教主的狂暴,边电边拉开距离,走位的时候注意补魔法盾。装备尽量保证沃玛套+1(特别提醒:魔杖的话先不要强化,等做了新手村的武器任务得到魔龙杖后再强化(强化后的魔杖合成魔龙杖没有额外的强化属性哦).。魔龙杖,50万+魔杖,3级装备,属性为魔攻2-5,幸运+1。)其他装备,道头强化+2魔法,魔法长袍强化+2魔法,运气好爆个+3的当然最好,没有不强求。到36级以后,负重才够穿恶魔长袍哦,幻境2、3加油练级吧。 36级对法师来说是转折点,因为36级可以穿恶魔长袍,还可以诱惑900血的半兽人勇士。半兽人勇士特点是物防超高,魔防很低,建议一切高魔攻怪都不要用英半兽人勇士去顶,不然会死的很快。900血的巨型多甲虫33级就可以去白日门左侧诱惑,特点是魔防超高,物防低的吓人。半兽人勇士满级可以抗狂暴紫色祖玛教主,狂暴黄色祖玛教主扛不住。去白日门右侧,诱惑900血的半兽人勇士吧,先电一下看看,不是900血重进白日门或者杀死等刷新。(建议重进白日门)召唤2只拉风的900血半兽人勇士练到满级,混猪洞吧。建议先去蜈蚣洞开个双倍爆率哦(极品颜色的怪物有几率爆,蜈蚣洞最容易,因为法师有群杀的火墙哦),打装备事半功倍。猪洞能够卡位,可以做到2白猪和一邪恶蝎蛇一起群杀(3级冰咆哮要好群杀点,3级地雷范围太小,勉强可以)。此刻就是打装备,打钱,打灰玉下幻境2、3练级,如果打到褐玉不建议去幻境4、5,因为幻境4的触龙神太恶心,魔防太高,打的太慢。幻境4是死亡棺材模型,幻境5是猪洞模型。练到38级有3级盾,就可以去混祖玛教主啦,祖玛教主也可以卡位哦。 练到40级,负重才可以穿起祖玛套(3件)+恶魔长袍+一个思贝尔手镯+一个红宝石戒指。这个时候的发展方向就是打钱打装备。装备方向是祖玛套+祖玛勋章,武器方向是赤血魔剑。这是一个漫长的过程哦,需要好几天哦,慢慢忍难吧。这些都有啦,可以考虑做任务进军赤月啦。
1 下一页