網站首頁 編程語言 正文
前言
一、錯誤描述
將Excel所有工作表,匯總到一個工作表中:
在thisworkbook中運行如下:
Sub 合并所有工作表_在所有行標注工作表名字_無視空行空列_考慮到不規范的多一點的行和列()
Dim row_num As Long, column_num As Long, row_num_temp As Long, column_num_temp As Long, row_num_merge As Long, column_num_merge As Long, i As Long, arr() As Long
Worksheets.Add.Name = "合并表"
Sheets("合并表").Move before:=Sheets(1)
For i = 2 To Worksheets.Count
Worksheets(i).Activate
'UsedRange.row,代表使用的第一個行數,在有空行的時候體現,同理,UsedRange.column,代表使用的第一個列數,在有空列的時候體現
'那么使用第一行 + 已使用的行數,這樣可以規避頂部/左側有空行,導致獲取已使用行號的數據不符合預期(老趙,如果你看到這里不懂,就自己拆開代碼,加上空行空列體會一下)
row_num = Worksheets(i).UsedRange.Row + Worksheets(i).UsedRange.Rows.Count - 1
column_num = Worksheets(i).UsedRange.Column + Worksheets(i).UsedRange.Columns.Count - 1
'如果格式很不規范,那么獲取的UsedRange.rows.count就可能是整個表格的行數,所以要規避這種情況,如果相同,就讓他減1
If row_num = Worksheets(i).Rows.Count Then row_num = row_num - 1
If column_num = Worksheets(i).Columns.Count Then column_num = column_num - 1
'相當于遍歷所有的列,都按ctrl + ↑,取數組的最大值
ReDim arr(1 To column_num)
For j = LBound(arr) To UBound(arr)
row_num_temp = Worksheets(i).Cells(row_num + 1, j).End(xlUp).Row
arr(j) = row_num_temp
Next
Debug.Print (Application.WorksheetFunction.Max(arr))
row_num_temp = Application.WorksheetFunction.Max(arr) '賦予最大值,確定最大的有數據的行數
'相當于遍歷所有的行,都按ctrl + ←,取數組的最大值
'Erase arr 清空數組,但是也可以不用,直接用ReDim也可以,如果要保留數組內容,需要加一個preserve
ReDim arr(1 To row_num_temp)
For j = LBound(arr) To UBound(arr)
column_num_temp = Worksheets(i).Cells(j, column_num + 1).End(xlToLeft).Column
arr(j) = column_num_temp
Next
Debug.Print (Application.WorksheetFunction.Max(arr))
column_num_temp = Application.WorksheetFunction.Max(arr) '賦予最大值,確定最大的有數據的列數
Worksheets(i).Range(Cells(1, 1), Cells(row_num_temp, column_num_temp)).Select
Selection.Copy Sheets("合并表").Cells(row_num_merge + 1, 2)
Worksheets("合并表").Cells(row_num_merge + 1, 1) = Worksheets(i).Name
row_num_merge = Sheets("合并表").UsedRange.Rows.Count
Next
'將首行標題轉為所有行(選擇空值,=上面的數據)
Worksheets("合并表").Activate
Columns("A:A").Select
Selection.SpecialCells(xlCellTypeBlanks).Select
Application.CutCopyMode = False
Selection.FormulaR1C1 = "=R[-1]C"
Columns("A:A").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
End Sub
新建模塊,運行如下:
二、原因調查
發現是工作表中數據存在異常,例如:
最下面存在個別數據,導致復制粘貼的時候單元格數量不足,形成此錯誤;
總結
分享:
“難道生命這漫長進程中所有的努力和希望,都是為了那飛娥撲火的一瞬間?”“飛蛾并不覺得陰暗,它至少享受了短暫的光明。"
原文鏈接:https://blog.csdn.net/qq_45365214/article/details/127261866
相關推薦
- 2022-10-05 linux查看服務器開放的端口和啟用的端口多種方式_Linux
- 2022-07-07 python?函數定位參數+關鍵字參數+inspect模塊_python
- 2022-11-24 redis使用skiplist跳表的原因解析_Redis
- 2023-10-15 歸并排序三種常見寫法
- 2023-12-20 UML類圖中各箭頭表示總結
- 2023-01-18 解讀Scrapy回調函數callback傳遞參數的方式_python
- 2022-05-22 jQuery常用事件方法mouseenter+mouseleave+hover_jquery
- 2023-10-14 uniapp在Android 10對公共目錄的非媒體文件讀取上傳失敗問題
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支