使用VBA實現Excel合併相同內容的相鄰單元格

2021-06-29 01:14:49 字數 1690 閱讀 3276

寫演算法的資料分析時生成了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...