寫演算法的資料分析時生成了csv檔案,為了方便檢視需要對部分單元格進行合併。
原始的csv檔案用excel開啟有大量如下形式的子表:
而我希望處理之後變成如下格式:
在網上搜尋了很久,大多只能對某一列進行操作,而我需要對整個**的行列都進行這個操作。
除此之外,因為是資料分析的**,我還希望只對非數字開頭的單元格進行合併,即行列標題。
經過多次嘗試,終於在以前從來沒用過vba的情況下把這個問題解決了……
(寫程式的過程中發現vba的if居然沒有短路操作,只好一層一層巢狀)
有兩個值得注意的地方是,
首先,excel中合併之後的單元格只有左上角的單元格儲存的數值,所以需要從右下角往左上角合併;
其次,如果先合併了列,再合併行的話,會把當前單元格左上角的單元格也一起合併,而事實上那個單元格可能與當前單元格值不相同,
這時需要自己選擇乙個優先順序,優先對行合併還是優先對列合併。
sub mergecellswithsamevalue()
dim r as integer
dim c as integer
for r = sheet1.usedrange.rows.count to 1 step -1
for c = sheet1.usedrange.columns.count to 1 step -1
if not isempty(cells(r, c)) then
if not isnumeric(left(cells(r, c).value, 1)) then
if r > 1 then
if not isempty(cells(r - 1, c).value) then
if cells(r, c) = cells(r - 1, c) then
range(cells(r, c), cells(r - 1, c)).merge
goto nextloop
end if
end if
end if
if c > 1 then
if not isempty(cells(r, c - 1).value) then
if cells(r, c) = cells(r, c - 1) then
range(cells(r, c), cells(r, c - 1)).merge
goto nextloop
end if
end if
end if
end if
end if
nextloop:
next
next
sheet1.usedrange.entirerow.autofit
sheet1.usedrange.entirecolumn.autofit
sheet1.usedrange.horizontalalignment = xlcenter
sheet1.usedrange.verticalalignment = xlcenter
end sub
excel 2013中測試有效。 使用VBA合併多個Excel工作簿
有許多實現excel工作簿合併的方法,在 將多個工作簿中的資料合併到乙個工作簿 中介紹過合併工作簿的示例。下面再列舉幾個示例,供有興趣的朋友參考。例如,需要將多個excel工作簿中的工作表合併到乙個工作簿。這裡假設需要合併的工作簿在 d 示例 資料記錄 資料夾中,含有兩個工作簿test1.xls t...
vba合併多個Excel文件
引用自 僅適用於每個sheet的第一行是資料頭,資料從第二行開始。sub 合併工作簿 dim fileopen dim x as integer remexcel 97 2003 工作簿 xls xls multiselect true,title 請選擇需要合併的工作簿 x 1 if typena...
VBA 通過VBA實現EXCEL真正的全屏顯示
說明 通過vba實現真正的全屏顯示excel介面。測試 private sub commandbutton1 click if commandbutton1.caption 全屏顯示 then displayfullscreen true 基本全屏 commandbars 1 enabled fal...