VBA進階 | 數組基礎06: 與數組相關的函數——Array函數與IsArray函數

2021-02-20 完美Excel

微信公眾號:excelperfect

本文系因違規而刪除的2017年10月24日推送文章經修改後重新推送,已看過的朋友可直接飄過,免得浪費時間。

 

在某些情形下,可以使用Array函數方便地填充數組。例如,下面的代碼:

 

Dim myArray

myArray =Array("國慶節", "中秋節", "元旦", "春節")

 

等價於:

 

Dim myArray(3)

myArray(0) = "國慶節"

myArray(1) = "中秋節"

myArray(2) = "元旦"

myArray(3) = "春節"

 

因此,Array函數可以將一組值批量賦給一個數組。

 

Array函數語法

Array函數返回一個Variant型數組,該數組由傳遞給該函數的參數組成。其語法為:

Array([元素1],[元素2],…,[元素n])

其中:

元素1~n可以是任意數據類型,代表賦給數組元素的數據。

由Array函數返回的數組只可賦值給一個Variant型變量,不能賦值給已聲明為數組變量的變量。

Array函數返回的數組中元素的順序與傳遞給函數的參數值的順序相同。

Array函數總是返回Variant類型的數組,但元素的數據類型可以不同,這取決於傳遞給該函數的數值類型。例如Array("One", 2, 3.14)返回的數組中,第1個元素是String型,第2個是Integer型,第3個是Double型。

Array函數創建的數組下限由Option Base確定。若忽略該語句,則數組下限值為0。

若Array函數沒有任何參數,則會創建一個空數組。

Array函數返回的數組是動態數組,其初始大小是Array函數的參數數量,可以使用ReDim、ReDim Preserve來對所創建的數組重新定義維數。

如果使用VBA.Array(),例如

Dim myArray As Variant

myArray = VBA.Array(「國慶節」,」中秋節」,」元旦」)

那麼數組的基數總是0,與Option Base的設置無關。即Option Base 1時,myArray(1)的值仍然是「中秋節」。

 

編程技巧

1. 在已確定元素內容時,使用Array函數更有效率。例如:

Dim myArray AsVariant

myArray =Array("國慶節", "中秋節", "元旦", "春節")

 

2. 可以使用Array函數創建多維數組,例如:

Dim myArray AsVariant

   

myArray =Array(Array("One", "Two", "Three"), _

                  Array("Four","Five", "Six"), _

                  Array("Seven","Eight", "Nine"))

創建了一個3行3列的二維數組。

然而,要訪問這個數組中的元素,例如第2行第3列的元素數據「Six」,不能夠使用:

myArray(1, 2)

這樣,將產生「下標越界」錯誤。

而應該使用:

myArray(1)(2)

或者,先聲明一個Variant型變量,然後將相應行的第1維賦值給該變量,再使用該變量來訪問相應列的元素數據,例如:

Dim vElement AsVariant

vElement =myArray(1)

   

MsgBox vElement(2)

 

3. 可以使用Array函數來為ActiveX 列表框或組合框控制項賦值,例如:

Me.ListBox1.List =Array("國慶節", "中秋節", "元旦", "春節")

給列表框添加了4個節日名。

 

4. 可以使用Array函數創建控制項數組,即將控制項名稱作為Array函數的參數。然後,可以將數組元素當作相應的控制項對象來使用,例如:

Private SubCommandButton1_Click()

    Me.ListBox1.Clear

    Me.ListBox1.List = Array("國慶節", "中秋節", "元旦", "春節")

    Me.ListBox1.ListIndex = 0

End Sub

 

Private SubCommandButton2_Click()

    Dim myArray As Variant

    myArray = Array(ListBox1, CommandButton1)

    MsgBox myArray(0).Text

End Sub

運行後的結果如下圖1所示。

 圖1

 

示例

示例1使用Array函數創建數組

Sub TestArray()

    Dim myArray() As Variant

 

    '從逗號分隔的字符串列表中創建數組

    myArray = Array("One","Two", "Three")

    '顯示數組元素

    MsgBox myArray(0) & vbCr &myArray(1) & vbCr & myArray(2)

    '也可以使用數值作為參數

    myArray = Array(10, 20, 30)

    '顯示數組元素

    MsgBox myArray(0) & vbCr &myArray(1) & vbCr & myArray(2)

End Sub

 

示例2:下面的示例先使用Array函數將一組值賦給變量myArray,然後將該變量中的值輸入到工作表Sheet1的第1行。

Option Base 1

Sub ArrayTest()

Dim myArray As Variant

Dim iCount As Integer

 

myArray = Array("姓名",」性別」,」成績」)

 

With Worksheets(「Sheet1」)

    ForiCount = 1 To UBound(myArray)

       .Cells(1,iCount).Value = myArray(iCount)

    NextiCount

End With

End Sub

運行代碼後的結果如圖2所示。

 圖2

  

在某些情形下,需要檢驗某個變量是否為數組,以便於後續操作,此時,可以使用IsArray函數。

 

IsArray函數語法

IsArray函數返回一個Boolean值,表明傳遞給該函數的變量是否為數組。其語法為:

IsArray(varname)

其中:

 

編程技巧

在不確定使用的變量是否為數組時,如果試圖訪問不存在的數組中的元素或者對其使用數組函數(如LBound或者UBound),就會導致錯誤。此時,可以先使用IsArray函數來確定其是否為數組,然後再進行後續相應的操作。

例如,下面的代碼段檢查變量myArray是否為數組,若不是則退出:

If NotIsArray(myArray) Then Exit Sub

 

 

相關連結:

VBA進階 | 數組基礎01: 用最淺顯的介紹來幫助你認識數組

VBA進階 | 數組基礎02: 簡單的數組操作

VBA進階 | 數組基礎03: 二維數組

VBA進階 | 數組基礎04: 運用數組處理工作表數據

VBA進階 | 數組基礎05: 動態數組

 

 

本文屬原創文章,轉載請註明出處。

歡迎在下面留言,完善本文內容,讓更多的人學到更完美的知識。

歡迎關注[完美Excel]微信公眾號:

方法1—在微信「添加朋友」或者通訊錄中搜索「完美Excel」或者「excelperfect」後點擊關注。

方法2—掃一掃下面的二維碼

相關焦點

  • Excel函數公式:你不知道的SUMPRODUCT函數
    Excel中的SUMPRODUCT函數是個乘法累加函數,其實這個函數還有查詢,統計,條件統計等各種用法,今天,我們就來探討一下這些用法!一、SUMPRODUCT函數語法。作用:在給定的幾組數組中,將數組間對應的元素相乘,並返回乘積之和。語法:SUMPRODUCT(array1, [array2], [array3], ...)Array1    必需。 其相應元素需要進行相乘並求和的第一個數組參數。
  • Excel教程:函數VLOOKUP實用技巧
    其中的VLOOKUP函數是工作中最常用的一種查找函數,掌握好VLOOKUP函數能夠極大提高工作的效率。也是大部分小夥伴接觸的第一個函數,幾乎每天都在用,頻率很高。但是,大部分小夥伴都是停留在基本的用法上,而且也發現了VLOOKUP函數的一些缺點,比如:不能逆向查找、不能多條件查找、不能返回多列等問題。下面我就和大家分享一下VLOOKUP函數的一些使用技巧,解決這些貌似不能的問題。
  • Excel函數匯總:T開頭函數釋義
    TT 函數將參數轉換為文本T.DIST 函數返回學生的 t 分布的百分點(概率)T.DIST.2T 函數返回學生的 t 分布的百分點(概率)T.DIST.RT 函數返回學生的 t 分布T.INV 函數返回作為概率和自由度函數的學生 t 分布的 t 值T.INV.2T 函數返回學生的 t 分布的反函數T.TEST 函數返回與學生的 t 檢驗相關的概率
  • Excel公式技巧53: 使用TEXTJOIN函數反轉文本
    ROW函數組合,可以生成從大到小的連續整數,再將其與MID配合,則可從結尾至開頭逐個取出文本中的字符。函數組合技術並利用TEXTJOIN函數來反轉文本。)))+1生成從大到小的連續整數組成的數組,最大值為單元格A1中文本字符串的長度,最小值為1。
  • 每日一題:Excel函數與公式(4)-AND和OR!
    在Excel中如果需要用多個條件進行判斷時,必須使用AND或OR函數來完成,像下圖中的公式,不可能得到正確的結果的。如果把上面的兩個公式合併到一起,就需要使用OR函數,公式如下:=IF(OR(AND(C2="男",D2>=60),AND(C2="女",D2>=50)),"符合",""),利用OR函數,把兩個條件合併到一起,OR
  • Excel進階:如何自定義一個函數?
    Excel大約有500個函數,對於一般的辦公場景而言,單獨使用+組合使用能衍生出很多無數種函數,但是對於複雜的問題,往往函數十分複雜
  • Excel教程:你確定你會用函數COUNTIFS嗎?
    助力春季就業,越努力越幸運特推超級會員限時瘋狂搶購點擊了解支持微信公眾號+小程序+APP+PC網站多平臺學習函數函數COUNTIFS:對滿足多個條件的單元格計數。COUNTIFS(條件區域1,條件1,……,條件區域n,條件n)1、統計空單元格的個數
  • Excel函數應用篇:提高效率的常用8個函數
    在工作中,我們真正用到的Excel函數通常在50個,常常用到的函數則更少,通常也就10來個,因此我們有必要選擇一些最為常用的Excel函數來進行學習
  • Excel函數公式:Excel 2016新增函數DATEDIF超級實用技巧解讀
    三、DATEDIF函數:獲取兩個日期之間的相差「月」份。四、DATEDIF函數:獲取兩個日期之間的相差天數。五、DATEDIF函數:獲取兩個日期之間的相隔周數。解讀:利用DATEDIF函數獲取相隔天數,然後除以7就是相隔周數。六、DATEDIF函數:獲取不計年數的間隔天數。
  • TEXT函數:Excel文本格式的終結者
    上周在介紹用Excel將公曆轉換為陰曆時,火箭君給大家介紹使用了TEXT函數。不過啊,TEXT函數的實力可不止這麼一點,本期就讓火箭君帶著大家來全面地認識一下TEXT函數的能耐。雖然TEXT函數的表達式非常簡單,但這功能可真不簡單!還是讓我們細細道來吧!>>>轉換數字格式
  • 自學Excel:跟四捨五入相關的幾個函數
    在Excel中,通常要對一個數據進行計算的時候四捨五入,大家都知道可以用ROUND函數進行計算但也有的時候需要對數據進行向下捨入,
  • Excel函數公式:關於數據排序的函數和操作技巧,全在此篇
    "Excel函數公式        提起排序,大家想到的肯定是系統再帶的排序功能、Rank函數和Sumproduct函數,其實除常規的這三個功能之外,我們還可以在行內進行排序或自定義排序。一、常規排序。
  • Excel函數公式:SUMIF函數使用技巧範例合集
    條件求和是Excel中應用非常廣泛的,常用函數為SUMIF,可以對數據源範圍內符合指定條件的值求和。
  • 每天學一點excel:IF函數的使用方法
    大家好,今天小慄教大家怎麼使用if函數。在excel中,if函數的使用頻率是很高的,在條件判斷的時候,使用它,會大大的提高工作效率。下面我們來具體探討一下這個函數。IF 函數最簡單的形式表示:如果(內容為 True,則執行某些操作,否則就執行其他操作)因此 IF 語句可能有兩個結果。
  • 函數 | Datedif/Today計算年齡不求人
    TODAY 函數可以獲取電腦的當天日期,DATEDIF 函數返回兩個日期之間的年月日間隔數。它的基本語法是:DATEDIF(日期1,日期2,間隔類型)。小知識:DATEDIF 函數可以解決很多很多日期差的計算問題,比如計算工齡,忽略年份計算相差月數、天數,忽略月份計算相差天數等等等等。可是這個函數在 Excel 裡卻被隱藏起來了,Excel 的工程師是不是很壞壞?周歲是算出來了,那虛歲該怎麼算呢?
  • 教你一招 Python: 函數參數魔法
    文 | FunHacks函數參數在 Python 中,定義函數和調用函數都很簡單,但如何定義函數參數和傳遞函數參數,如果在調用函數的時候沒有傳遞該參數,則自動使用默認值,否則使用傳遞時該參數的值。我們在調用函數的時候沒有傳遞參數,那麼就默認使用 L=[],經過處理,L 應該只有一個元素,怎麼會出現調用函數兩次,L 就有兩個元素呢?原來,L 指向了可變對象 [],當你調用函數時,L 的內容發生了改變,默認參數的內容也會跟著變,也就是,當你第一次調用時,L 的初始值是 [],當你第二次調用時,L 的初始值是 [『END』],等等。
  • Excel教程:最常用日期函數匯總(收藏篇)
    支持微信公眾號+小程序+APP+PC網站多平臺學習在我們的實際工作中,經常需要用到日期函數日期函數那麼多,你還只會用函數TODAY嗎?那你就OUT了。今天一起來看下常用日期函數的用法!1、DATE函數DATE:返回在日期時間代碼中代表日期的數字。函數語法:DATE(year,month,day)函數DATEVALUE:將存儲為文本的日期轉換為Excel識別為日期的序列號。
  • Excel技巧:VLOOKUP函數如何返回多列
    最近,小編幫朋友解決了一個VLOOKUP函數返回多列的問題,感覺很實用,今天分享給大家。