2013-07-25 61 views
0

我有2個範圍變量。我想有一個循環,它接受一個範圍變量的第一行並將其添加到另一個範圍變量的末尾。Excel VBA - 從一個範圍取第一行,並將其放到另一個範圍的末尾。陣列?

即:

rng1 = Range("1:10") 
rng2 = Range("11:20") 

我想從RNG2採取行11,並給它RNG1這樣的結果是:

rng1 = Range("1:11") 
rng2 = Range("12:20") 

每個迴路運行時,它會從時間rng2的頂部,並給出rng1的結尾。

我試圖用Union或Resize做到這一點,但它並不按照我需要的方式工作。在Java中,我知道這可以通過使用數組完成,但我不知道如何在VBA中進行佈局。

Set rng1 = rng1.Resize(rng1.Rows.Count + 1, rng1.Columns.Count) 
Set rng2 = rng2.Resize(rng2.Rows.Count - 1, rng2.Columns.Count) 

任何建議將大大appriciated。

+2

'設置rng2 = rng2.offset(1,0).Resize(rng2.Rows.Count - 1,rng2.Columns.Count)' –

回答

1

Resize修改範圍的大小(因此在這裏是最後一行)。它在第二行不起作用,因爲你不想改變最後一行,而是開始一行;您可以重新定義rng2以符合預期條件。通過增加rowsToAddrng1最後一行,並同步,重新定義rng2使得rowsToAdd被添加到它的第一行:

Dim rowsToAdd As Integer: rowsToAdd = 1 
Dim colName As String: colName = "A" 
Set rng1 = rng1.Resize(rng1.Rows.Count + rowsToAdd, rng1.Columns.Count) 
Set rng2 = Range(colName & CStr(rng2.Row + rowsToAdd) & ":" & colName & CStr(rng2.Row + rng2.Rows.Count - 1)) 

此代碼提供在實施例中所示的功能,即是。最後一行rng2保持不變。

請記住,這是一個更適應性的結構,而不僅僅是「從這個範圍內的行並將其放入另一個」。它期望行的變量名將被添加到最後一行rng1和第一行rng2

+0

這將是EntireRow在這些範圍的每個範圍內,因此可以留下colName出。因此,這將採用rng2的第一行,以便它不再計入rng2變量中,並將其放在rng1的最後一行上? – user1305569

+0

@ user1305569建議的代碼執行所需的操作。請不要盲目使用它;但瞭解它的功能以及它爲什麼這樣做。在Tim Williams的評論中,你可以看到不同的方式來實現你想要的東西(不能只依靠調整大小;但是也可以重新定義範圍)。依靠你喜歡的方法,但主要是想法清楚:記住你在兩種不同的現實中使用相同的代碼。如果讓你有一個合適的圖片,寫一點長的代碼會好1000倍。 PS:最好包括列信以避免問題。 – varocarbas

相關問題