返回列表 上一主題 發帖

[發問] 不規則資料,如何重整.....

回復 1# b31978


    試試看,也不知對不對!
  1. Public Sub test()
  2. Dim arr()
  3. aa = Cells(Rows.Count, 10).End(xlUp).Row
  4. xx = WorksheetFunction.CountA(Range("J3:J" & aa))
  5. i = 1
  6. ReDim arr(1 To xx, 1 To 4)
  7. For Each Rng In Range("C3:i" & aa)
  8.     If Rng <> "" Then
  9.         ss = Cells(Rng.Row, 1).MergeArea
  10.         arr(i, 1) = ss(1, 1)
  11.         arr(i, 2) = Cells(2, Rng.Column)
  12.         arr(i, 3) = Rng
  13.         arr(i, 4) = Cells(Rng.Row, 10)
  14.         i = i + 1
  15.     End If
  16. Next
  17. Range("M3").Resize(xx, 4) = arr
  18. End Sub
複製代碼

TOP

本帖最後由 lpk187 於 2015-7-23 20:42 編輯

回復 7# t_t7225


    ss = Cells(Rng.Row, 1).MergeArea
        arr(i, 1) = ss(1, 1)
這一段正確是寫成
arr(i, 1) =Cells(Rng.Row, 1).MergeArea(1)
.MergeArea為合併儲存格的Value
既然是合併儲存格也就是多個儲存格組成的一個陣列其陣列一般都只有第一格有其Value
ss = Cells(Rng.Row, 1).MergeArea那ss也是MergeArea的陣列,只是方便在區域變數視窗中觀察MergeArea陣列的維數及內容,無其他意義!
ss會變化其實是MergeArea的陣列在變化

TOP

本帖最後由 lpk187 於 2015-7-23 22:15 編輯

回復 9# t_t7225


    SS只是一個變數,是一個沒有定格子的陣列,每次執行時並不相同
不像arr(1 to 3)這種,而是會像下面例子一樣
把下面代碼執行看看再看區域變數視窗就了解了
Public Sub ex1()
'第一次執行ar
ar = Array("1", "2", "3", "4")
'ar為ar(0)="1",ar(1)= "2" ,ar(2) = "3",ar(3) = "4"
'第二次執行ar
ar = Array("1", "2")
'ar為ar(0)="1",ar(1)= "2"
End Sub
以原來的代碼是跑迴圈的所以執行起來就有點類似上面例子的樣子

TOP

        靜思自在 : 【時日莫空過】一個人在世間做了多少事,就等於壽命有多長。因此必須與時間競爭,切莫使時日空過。
返回列表 上一主題