vba二维数组初始化_将工作表数据写入VBA数组
大家好,最近推出的內(nèi)容是“VBA信息獲取與處理”中的部分內(nèi)容,這套教程面向中高級人員,涉及范圍更廣,實(shí)用性更強(qiáng),現(xiàn)在的內(nèi)容是第四個(gè)專題“EXCEL工作表數(shù)據(jù)的讀取、回填和查找”的內(nèi)容。
第二節(jié) 將工作表數(shù)據(jù)寫入VBA數(shù)組
在上一節(jié)中我們講了實(shí)現(xiàn)工作表數(shù)據(jù)與VBA代碼間傳輸?shù)膸追N方法,這講我將我們將著重講解如何將工作表的數(shù)據(jù)寫入數(shù)組。
1 讀取工作表上的范圍并將其放入數(shù)組
在VBA中,可以直接讀取工作表上的范圍并將其放入數(shù)組,這種方法非常簡單。例如,
Dim Arr() As Variant
Arr = Range("A1:C5")
上述代碼中首先聲明一個(gè)變體型可變數(shù)組變量,然后將這個(gè)變量指向指定的區(qū)域,如果我們不能確定這個(gè)區(qū)域的大小,或者這個(gè)區(qū)域是可變的,我們可以利用下面的語句;
① myarr = Sheets("41").UsedRange
② myarr = Sheets("40").[a1].CurrentRegion
③ myarr = Range("a2:c" & Range("c2").End(xlDown).row)
④ myarr = Range("a1:a" & Cells(Rows.Count, 1).End(xlUp).row)
⑤ myarr = Range("a2:f" & [a65536].End(xlUp).Row)
⑥ myarr1 = Range([A2], [A65536].End(xlUp))
上面的各種寫法均是我的第三套教程《VBA數(shù)組與字典解決方案》中的一些實(shí)際寫法,第一種表示整個(gè)工作表的使用區(qū)域,第二種是以“A1”單元格為起點(diǎn)的矩形區(qū)域,第三種是表示A2到C列最后一個(gè)不為空的單元格的矩形區(qū)域,第四種是表示A列的使用區(qū)域(含空格),第五種是A2到F列的最后使用單元格的區(qū)域(適用于低版本的excel),第六種是A列第二個(gè)單元格之下的使用區(qū)域(含空單元格)
2 讀取工作表上指定范圍獲得數(shù)組后維數(shù)的確認(rèn)
利用上述方案將工作表中的數(shù)據(jù)引入VBA數(shù)組后,我們要注意該數(shù)組始終是二維的。第一個(gè)維度是行,第二個(gè)維度是列。因此,下面的例子:
Dim Arr() As Variant
Arr = Range("A1:C5")
Arr被隱式地調(diào)整為Arr(1 to 5,1 to 3),其中5是行數(shù),3是列數(shù)。即使工作表數(shù)據(jù)位于一行或一列(例如,Arr(1 to 10,1 to 1))中,也會創(chuàng)建二維數(shù)組。加載工作表數(shù)據(jù)的數(shù)組始終具有等于1的下限(LBound),而不管模塊中可能具有什么選項(xiàng)基指令。你不能改變這種行為。例如:
Dim Arr() As Variant
Arr = Range("A1:A10")
這里,Arr由VBA自動標(biāo)注為Arr(1 to 10,1 to 1)。您可以使用如下代碼在工作表值數(shù)組中循環(huán):
Sub MYNZC()
Dim Arr() As Variant
Arr = Range("A1:B10")
Dim R As Long
Dim C As Long
For R = 1 To UBound(Arr, 1) ' 數(shù)組第一維表示行.
For C = 1 To UBound(Arr, 2) '數(shù)組第二維表示列
Debug.Print Arr(R, C)
Next
Next
End Sub
代碼截圖:
代碼的運(yùn)行:
3 工作表上指定范圍如果是一個(gè)單元格時(shí)
在將指定的范圍數(shù)據(jù)引入數(shù)組時(shí)很多的時(shí)候我們會遇到一種特例,就是只用一個(gè)單元格,這個(gè)時(shí)候往往利用上述方法會報(bào)錯(cuò),有的時(shí)候是數(shù)組的賦值報(bào)錯(cuò),有的時(shí)候是數(shù)組的上下標(biāo)報(bào)錯(cuò),視具體的代碼應(yīng)用而定。這個(gè)錯(cuò)誤該該如何處理呢?我們可以利用下面的代碼:
Sub MYNZD() '當(dāng)工作表上的區(qū)域是單個(gè)單元格時(shí)
Dim Arr As Variant
Sheets("Sheet3").UsedRange.Select
m = Selection.Cells.Count
If m = 1 Then
ReDim Arr(1 To 1, 1 To 1)
Arr(1, 1) = Sheets("Sheet3").UsedRange
MsgBox Arr(1, 1)
Else
Arr = Sheets("Sheet3").UsedRange
MsgBox Arr(1, 1)
End If
End Sub
代碼截圖:
上面的代碼成功的避免了這種錯(cuò)誤。大家在利用這種數(shù)組賦值時(shí)避免這類錯(cuò)誤的發(fā)生。
本節(jié)知識點(diǎn)回向:讀取指定范圍的數(shù)據(jù)到數(shù)組有哪些方法可以利用?讀取后的數(shù)組是幾維數(shù)組?如何避免指定范圍只有一個(gè)單元格的情況?
本專題參考程序文件:004工作表.XLSM
VBA是利用Office實(shí)現(xiàn)自己小型辦公自動化的有效手段,這是我對VBA的應(yīng)用界定。在取代OFFICE新的辦公軟件沒有到來之前,誰能在數(shù)據(jù)處理方面做到極致,誰就是王者。其中登峰至極的技能非VBA莫屬!學(xué)習(xí)VBA是個(gè)過程,也需要經(jīng)歷一種枯燥的感覺,如太白詩云:眾鳥高飛盡,孤云獨(dú)去閑。相看兩不厭,只有敬亭山。
“水善利萬物而不爭”,綿綿密密,微則無聲,巨則洶涌。學(xué)習(xí)亦如此,知道什么是自己所需要的,不要蜷縮在一小塊自認(rèn)為天堂的世界里,待到暮年時(shí)再去做自欺欺人的言論。要努力提高自己,用一顆充滿生機(jī)的心靈,把握現(xiàn)在,這才是進(jìn)取。越是有意義的事情,困難會越多。愿力決定始終,智慧決定成敗。不管遇到什么,都是風(fēng)景。看淡紛爭,看輕得失。茶,滿也好,少也好,不要計(jì)較;濃也好,淡也好,其中自有值得品的味道。去感悟真實(shí)的時(shí)間,靜下心,多學(xué)習(xí),積累福報(bào)。而不是天天混日子,也不是天天熬日子。在后疫情更加嚴(yán)峻的存量殘殺世界中,為自己的生存進(jìn)行知識的儲備,特別是新知識的儲備。學(xué)習(xí)時(shí)微而無聲,利用時(shí)則巨則洶涌。
我記得20年前自己初學(xué)VBA時(shí),那時(shí)的資料甚少,只能看源碼自己琢磨,真的很難。20年過去了,為了不讓學(xué)習(xí)VBA的朋友重復(fù)我之前的經(jīng)歷,我根據(jù)自己多年VBA實(shí)際利用經(jīng)驗(yàn),推出了六部VBA專門教程。
第一套:VBA代碼解決方案 是VBA中各個(gè)知識點(diǎn)的講解,覆蓋絕大多數(shù)的VBA知識點(diǎn),初學(xué)必備;
第二套:VBA數(shù)據(jù)庫解決方案 數(shù)據(jù)庫是數(shù)據(jù)處理的專業(yè)利器,教程中詳細(xì)介紹了利用ADO連接ACCDB和EXCEL的方法和實(shí)例操作,適合中級人員的學(xué)習(xí)。
第三套:VBA數(shù)組與字典解決方案 數(shù)組和字典是VBA的精華,字典是VBA代碼水平提高的有效手段,值得深入的學(xué)習(xí),是初級及中級人員代碼精進(jìn)的手段。
第四套:VBA代碼解決方案之視頻 是專門面向初學(xué)者的視頻講解,可以快速入門,更快的掌握這門技能。
第五套:VBA中類的解讀和利用 這是一部高級教程,講解類的虛無與肉身的度化,類的利用雖然較少,但仔細(xì)的學(xué)習(xí)可以促進(jìn)自己VBA理論的提高。
第六套教程:《VBA信息獲取與處理》,這是一部高級教程,涉及范圍更廣,實(shí)用性更強(qiáng),面向中高級人員。教程共二十個(gè)專題,包括:跨應(yīng)用程序信息獲得、隨機(jī)信息的利用、電子郵件的發(fā)送、VBA互聯(lián)網(wǎng)數(shù)據(jù)抓取、VBA延時(shí)操作,剪切板應(yīng)用、Split函數(shù)擴(kuò)展、工作表信息與其他應(yīng)用交互,FSO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定制工作表信息函數(shù)等等內(nèi)容。如需要可以可以WeChat: NZ9668
學(xué)習(xí)的過程也是修心的過程,修一個(gè)平靜的心。在代碼的世界中,心平靜了,心情好了,身體自然而然就好。心靜則正,內(nèi)心里沒有那么多邪知邪見,也就沒有那么多妄想。利人就是利己。這些教程也是為幫助大家起航,助上我自己之力,我的上述教程是我多的經(jīng)驗(yàn)的傳遞,大家可以根據(jù)以上資料1,3,2,6,5或者是4,3,2,6,5的順序逐漸深入的逐漸學(xué)習(xí)。
每一分收獲都是成長的記錄,怎無憑,正是這種執(zhí)著,成就了朝霞的燦爛。最后將一闕詞送給致力于VBA學(xué)習(xí)的朋友,讓大家感受一下學(xué)習(xí)過程的枯燥與執(zhí)著:
浮云掠過,暗語無聲,
唯有清風(fēng),驚了夢中啼鶯。
望星,疏移北斗,
奈將往事雁同行。
阡陌人,昏燈明暗,
忍顧長亭。
多少VBA人,
暗夜中,悄聲尋夢,盼卻天明。
怎無憑!
分享成果,隨喜正能量
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的vba二维数组初始化_将工作表数据写入VBA数组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学历提升行业怎么找精准客户?
- 下一篇: win10系统重装卡住了怎么办 Win1