日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c修改datatable单元格的值_神奇的VBA编程:批量拆分单元格数据

發(fā)布時間:2024/9/19 编程问答 125 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c修改datatable单元格的值_神奇的VBA编程:批量拆分单元格数据 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

批量對單元格區(qū)域內(nèi)每個單元格中的數(shù)據(jù)按照一定的規(guī)則進行拆分是職場工作中經(jīng)常碰到的操作。Excel數(shù)據(jù)選項卡中“分列”提供了基礎的功能。能幫助用戶通過鼠標快速分列數(shù)據(jù)。

本篇《神奇的VBA》將介紹幾種通過Excel VBA編程來拆解分列單元格中的數(shù)據(jù)的思路。

案? ?例?

將下圖中B列中的生產(chǎn)編號按照"-"號進行拆分,并將拆分后的非空數(shù)據(jù)逐一放入右邊的列中。

注:表中B列,有約3萬1千行數(shù)據(jù)。

思路1:也是所有初學者的思路, 逐一遍歷單元格區(qū)域中的所有單元格, 將單元格中的文本進行分裂,并再次遍歷分裂后的數(shù)組元素放置在右邊的單元格中。

Sub 思路1()Dim str As StringDim x As IntegerDim rng As RangeSet rng = Range("B3:B" & Range("B1048576").End(xlUp).Row)For Each cell In rng str = Replace(Replace(Replace(cell.Text, "---", "-"), "--", "-"), " ", "") c = 3 r = cell.Row For Each e In Split(str, "-") Cells(r, c) = e c = c + 1 NextNextSet rng = NothingEnd Sub

代碼中使用多層嵌套的Replace函數(shù)對單元格數(shù)據(jù)進行了集中清洗,過濾掉了多余的“-”符號和多余的空格。

經(jīng)過運行驗證,思路1代碼完全符合要求,代碼也簡短但是卻遇到最大的問題,“速度太慢”。在思路1代碼中加入Timer計時器,

Sub 思路1()t1 = Time........................................t2 = TimeMsgBox "用時" & DateDiff("s", t1, t2) & "秒"End Sub

重新運行,3萬1千行數(shù)據(jù),整體耗時約30秒左右,太慢了。慢的原因是思路1代碼在大量地操作單元格區(qū)域。數(shù)據(jù)量少還可以,一旦量大就會遇到該瓶頸。??

思路2:將單元格區(qū)域一次性放入動態(tài)數(shù)組中, 在數(shù)組中遍歷,增加程序的運行效率,增強體驗!

Sub 思路2()Dim str As StringDim x As IntegerDim arrDim brrarr = Range("B3:B" & Range("B1048576").End(xlUp).Row)n = UBound(arr) - LBound(arr) + 1ReDim brr(1 To n, 1 To 20)For r = 1 To UBound(arr, 1) For c = 1 To UBound(arr, 2) str = Replace(Replace(Replace(arr(r, c), "---", "-"), "--", "-"), " ", "") x = 1 For Each e In Split(str, "-") brr(r, x) = e x = x + 1 Next NextNextRange("C3").Resize(UBound(brr, 1), UBound(brr, 2)) = brrEnd Sub

上面的代碼對VBA使用者有一定的要求,要求對數(shù)組有一定的認知,可以參閱《神奇的VBA》插件學習數(shù)組的相關知識。數(shù)組是很多編程語言中的必備的結構。數(shù)組的操作在內(nèi)存中進行, 所以運行速度和效率上遠比在單元格區(qū)域上操作要高的多。經(jīng)過運行驗證, 思路2的代碼運行總速度由30秒轉(zhuǎn)為1秒。

拆分文本的思路有很多。本篇神奇的VBA最后再提供另一個取巧的思路。

思路3:巧妙運用Excel自帶的分列功能。通過錄制宏,獲取宏碼, 稍作修改就可以重復使用。

Sub 思路3()Dim TargetRange As RangeSet TargetRange = Range("B3:B" & ActiveSheet.Rows.Count)TargetRange.TextToColumns Destination:=TargetRange.Cells(1).Offset(0, 1), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _ Semicolon:=False, Comma:=False, Space:=True, Other:=True, OtherChar:= _ "-", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), _ Array(6, 1), Array(7, 1), Array(8, 1)), TrailingMinusNumbers:=TrueSet TargetRange = NothingEnd Sub

錄制的宏碼,看著啰嗦。使用者可以靈活裁剪可選參數(shù),精簡代碼。經(jīng)過運行,速度也非常的快!1秒鐘也搞定了。

本篇內(nèi)容《神奇的VBA》就分享就到這里。如果您有更好的方法,歡迎留言告知。文末最后留一個問題。

在思路1和思路2中,嵌套運用了多個Replace函數(shù)替換多個字符。有沒有更好的思路更高效更精簡的替換方法嗎?

?------? ?結語???------本篇的分享就到這里!上面三種思路的VBA代碼實現(xiàn)方法具有一定的通用性,職場人可以直接拿來稍微修改即可為你所用。?如果覺得本篇主題對您的工作有幫助,還請關注點贊收藏轉(zhuǎn)發(fā)至朋友圈點擊“在看”分享給更多的人?------? ?更多文章? ?------《神奇的VBA》編程:另存工作表《神奇的VBA》編程:禁止修改Excel工作表名稱《神奇的VBA》編程:監(jiān)控表格單元格值的變化《神奇的VBA》編程:提取身份證號碼中的性別信息《神奇的VBA》編程:隨機生成彩票數(shù)據(jù)《神奇的VBA》編程:報表插入空白行《神奇的VBA》編程:工作表數(shù)據(jù)的拆分-001《神奇的VBA》編程:工作表數(shù)據(jù)的拆分-002Power Click插件發(fā)布-開放下載!神奇的vba

總結

以上是生活随笔為你收集整理的c修改datatable单元格的值_神奇的VBA编程:批量拆分单元格数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。