iT邦幫忙

0

VBA 非連續儲存格Range.value 問題

  • 分享至 

  • xImage

各位IT大:

小弟想把VBA的Range轉成Array

但卡在我的Range可能是非連續儲存格

如果用 arr = rng.value 只會得到一小部分的值

例如 set rng = Range("A1:A3, A5:A7")有我要的值

但我用 arr = rng.value只會得到 "A1:A3" 的值而已

請問有解嗎?或其他可行的方法?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
rain_yu
iT邦研究生 5 級 ‧ 2024-02-07 08:31:11
最佳解答

您可以使用 Range.Value 屬性來將非連續儲存格的值轉換為陣列。但是,由於非連續儲存格包含多個範圍,您需要將每個範圍的值分開處理。以下是一個示例程式碼,可將非連續儲存格的值轉換為陣列:

Sub ConvertRangeToArray()
    Dim rng As Range
    Dim areas As Range
    Dim arr() As Variant
    Dim i As Long, j As Long, k As Long
    
    ' 設定 Range
    Set rng = Range("A1:A3, A5:A7")
    
    ' 取得所有區域
    Set areas = rng.Areas
    
    ' 計算陣列大小
    k = 0
    For Each rng In areas
        k = k + rng.Rows.Count
    Next rng
    
    ' 重新設定陣列大小
    ReDim arr(1 To k, 1 To 1)
    
    ' 將值複製到陣列中
    i = 1
    For Each rng In areas
        For j = 1 To rng.Rows.Count
            arr(i, 1) = rng.Cells(j, 1).Value
            i = i + 1
        Next j
    Next rng
    
    ' 輸出陣列值
    For i = 1 To k
        Debug.Print arr(i, 1)
    Next i
End Sub

這個程式碼會將非連續儲存格中的值複製到 arr 陣列中,然後您可以根據需要進一步處理這個陣列。請注意,這個程式碼假設您的非連續儲存格垂直排列。如果儲存格是水平排列,您需要調整程式碼中的索引。

neil524 iT邦新手 5 級 ‧ 2024-02-07 10:35:10 檢舉

原來要一個區域一個區域抓出才能值帶入值
這樣以後我就知道之後要怎應用了~
感謝您!解決我的問題!!!

rain_yu iT邦研究生 5 級 ‧ 2024-02-07 11:43:01 檢舉

/images/emoticon/emoticon42.gif

我要發表回答

立即登入回答