2012-12-26 40 views
2

請問您可以如何將Excel範圍(「G2:AA1000」)分配給2D陣列?如果可能的話,在該二維數組上執行一些操作後,如何將該二維數組返回到相同範圍?將範圍賦值給二維數組後,將如何從該二維矩陣中識別每一行?如何將Excel範圍分配給2D數組?

謝謝,通過一系列循環

回答

3

有一種簡單的方法可以使用數組對某個區域進行更改,並將其寫出到相同的地方或其他地方。

此示例代碼將從一個區域到另一個複製數據,使用陣列:

Sub example() 
Dim testdata() 
testdata = Range("A1:B13") 
Range("D1:E13") = testdata ' simple copy 
Range("G1") = testdata ' copy only 1 cell 
Range("I1:K22") = testdata 'try to copy too much 
End Sub 

testdata陣列從開始,將延伸到的範圍內指定的列和行數。在這種情況下,testdata(1,1)是指從A1獲得的數據,testdata(1,2)B1,與testdata(13,1)參照A13,和testdata(13,2)參照B13整理起來。

設置範圍等於下一行中的數組將數組複製到指定的位置。

  • 如果該區域小於原始數組,它將僅複製足夠的數組以填充該空間,因此Range("D1")=testdata將只在該工作表上放置一個單元格。
  • 如果指定較大的區域,那麼#N/A將填充不在數組元素所覆蓋空間的區域,因此Range("A1:A3")=testdata將填充來自數組的數據的A1和A2,但A3將具有#N/A

結果示例程序:
注:A1:B13是原始數據,而它與隨後range(??)=testdata Result of above code

+0

不錯的解釋,但最後兩點並不太清楚。 '#N/A'是什麼? –

+1

**#N/A **是在沒有可用信息時由excel產生的錯誤。請參見[wikipedia]上的第一個定義(https://en.wikipedia.org/ wiki/N/a) – SeanC

+0

我不清楚still.Any圖形演示文稿可以有道理我認爲是這樣的! –

0

的一種方法是使用與小區物業的For ... Next循環。使用Cells屬性,可以將循環計數器(或其他變量或表達式)替換爲單元格索引號。在下面的例子中,變量計數器代替了行索引。該過程在範圍C1:C20中循環,將其絕對值小於0.01的任何數字設置爲0(零)。

Sub RoundToZero1() 
    For Counter = 1 To 20 
     Set curCell = Worksheets("Sheet1").Cells(Counter, 3) 
     If Abs(curCell.Value) < 0.01 Then curCell.Value = 0 
    Next Counter 
End Sub 
+0

我不是找這個複製!我正在尋找可以通過單一語句完成的任務!和'Range(「G2:AA1000」)'應該看起來像這樣,不僅僅是一列! –

+0

爲什麼你使用'0.01'的價值,想知道邏輯 - 內涵是什麼? –

1

下面是一個從工作表中讀取一系列數據,操作數組,然後將其寫回到同一工作表的解決方案示例。

Sub RangeArray() 

    Dim Rng As Range 
    Dim Arr() 
    Dim ArrItem 
    Dim i As Long, j As Long 
    Dim rUB as Long, cUB as Long 

    Set Rng = Worksheets("Sheet1").Range("A1:G19") 
    rUB = Rng.Rows.Count 'Row upper bound 
    cUB = Rng.Columns.Count ' Column upper bound 

    ReDim Arr(1 To rUB, 1 To cUB) 

    'Read worksheet range into array 
    For i = 1 To rUB 
     For j = 1 to cUB 
      Arr(i, j) = Rng.Cells(i, j).Value 
     Next 
    Next 

    'Do something to array 
    For i = 1 To rUB 
     For j = 1 To cUB 
      If i <> j Then 
      Arr(i, j) = Arr(i, j)/(i * j) 
      End If 
     Next 
    Next 

    'Write array back to worksheet 
    Set Rng = Worksheets("Sheet1").Range("I1") 
    For i = 1 To rUB 
     For j = 1 To cUB 
      Rng.Offset(i - 1, j - 1).Value = Arr(i, j) 
     Next 
    Next 

    End Sub 
+0

是否有可能沒有循環? –

+0

其實,是的,@Tukai。使用數組是一個古老的習慣。這也可以工作: Sub RangeArray() Dim A() A = Sheet1.Range(「A1。G19「) '用數組做什麼 Sheet1.Range(」i1.i19「)。Value = A End Sub – chuff

+0

可以請你給我一個投票嗎? –

相關問題