本文涉及到的內容包括vba陣列、從單元格讀取值填充二維陣列、取excel檔案的有效行、多檔案合併等內容。
首先,有檔案1、檔案2、檔案3,檔案1的名字為"合併.xls",檔案2、檔案3等的檔名隨意定。但他們的格式需要一致,如下圖所示:
現在,把檔案2、檔案3的內容合併到合併.xls檔案中。由於檔案2、檔案3等檔案的檔名不固定,因此,需要定義二維陣列,在陣列中動態識別檔名,因此,在合併.xls檔案開乙個工作表,專門存放檔名,如下所示
首先,定義乙個陣列
dim myarr(), myrng as range
把單元格的內容讀入陣列,
set myrng = workbooks("合併.xls").sheets("sheet2").range("a1:b4")
myarr = myrng
使用迴圈,完成從多個檔案向乙個檔案的合併,
開啟需要合併的檔案
workbooks.open filename:=xx & myarr(filename, 2) & ".xls "
得到需要合併的檔案的有效行數(不是excel的65536行)
irowto = activesheet.range("a65536").end(-4162).row
設定目標檔案為活動檔案
workbooks("合併.xls").activate
得到目標檔案的有效行數
irowfrom = activesheet.range("a65536").end(-4162).row
如果是第乙個需要合併的檔案,則直接從目標檔案的第三行開始貼上
if filename = 1 then
workbooks(myarr(filename, 2) & ".xls").sheets("sheet1").range("a3:f" & irowto).copy
workbooks("合併.xls").sheets("sheet1").range("a3:f" & irowto).pastespecial paste:=xlpastevalues
else
如果不是第乙個需要合併的檔案,則需要找到上一次貼上完成後的最後一行,接著往下貼
a = irowfrom + 1
b = irowfrom + irowto - 1
workbooks(myarr(filename, 2) & ".xls").sheets("sheet1").range("a3:f" & irowto).copy
workbooks("合併.xls").sheets("sheet1").range("a" & a & ":f" & b).pastespecial paste:=xlpastevalues
end if
完整的程式**如下:
如果檔案中,存在多個工作表,則不能用這種思路,因為在vba中,再設定工作薄的當前活動工作表時有bug,當你設定sheet1為當前活動工作表,取sheet1的當前有效行數,但結果往往不是你想要的sheet1的行數,而是其它表的行數。如果檔案存在多表,則可以利用單元格來賦值。直接貼**上來
Office Excel VBA學習 高階
1.輸入和絕對值 sub qingwuabs dim a,b as integer a inputbox 請輸入乙個負數 提示 b abs a msgbox 你輸入數的絕對值為 b end sub 2.if結構 sub testif a1 35 if a1 30 then msgbox 30 els...
靜態聯編與動態聯編
在c 中,多型性主要是通過函式過載實現的。過載函式是指程式中對同名函式進行呼叫時,編譯器會根據函式引數的型別和個數,決定該呼叫哪一段函式 來處理這個函式呼叫。這種把函式呼叫與適當的函式 相對應的動作,叫做聯編。聯編分為靜態聯編和動態聯編。在編譯階段決定執行哪個同名的被呼叫函式,稱為靜態聯編。在編譯階...
靜態聯編和動態聯編
聯編是指乙個電腦程式自身彼此關聯 使乙個 源程式經過編譯 連線,成為乙個可執行程式 的過程,在這個聯編過程中,需要確定程式中的操作呼叫 函式呼叫 與執行該操作 函式 的 段之間的對映關係,按照聯編所進行的階段不同,可分為靜態聯編和動態聯編。靜態聯編 呼叫函式和被調函式在程式編譯時,他們在記憶體中的位...