删除B列中字符串数值少于21的单元格所在的行Sub 删除行()r = Range("B65536").End(xlUp).Row '行数For h = r To 1 Step -1If Cells(h, 2) < 21 Then Cells(h, 2).EntireRow.DeleteNextEnd Sub-------------------------【工作表合并】将同一工作簿中的所有工作表合并到一个工作表中新建一个工作表,写入代码[在新建的工作表标签处右键查看代码(找不到的直接按一下alt+F11) 把下面的代码复制进去然后点上面的运行运行子程序即可]:Sub 合并当前工作簿下的所有工作表()Application.ScreenUpdating = FalseFor j = 1 To Sheets.CountIf Sheets(j).Name <> ThenX = Range("A65536").End(xlUp).Row + 1Sheets(j).UsedRange.Copy Cells(X, 1)End IfNextRange("B1").SelectApplication.ScreenUpdating = TrueMsgBox "当前工作簿下的全部工作表已经合并完毕!", vbInformation, "提示"End Sub*********************************************************代码这样写也行:Sub c()For i = Sheets.Count To 2 Step -1Sheets(i).SelectSheets(i).UsedRange.CopySheets(1).SelectCells(Cells(65000, 1).End(xlUp).Row + 1, 1).SelectActiveSheet.Paste'Sheets(i).DeleteNext iEnd Sub************************************************************把一个工作簿中的所有表单合并成一个表单,怎么去掉重复的表头、标题行?方法如下:Sub c()For i = Sheets.Count To 2 Step -1Sheets(i).UsedRange.Offset(1).Copy Sheets(1).Cells(65536, 1).End(xlUp).Offset(1) Next iEnd Sub说明:函数OFFSET(reference,rows,cols,height,width)以指定的引用为参照系,通过给定偏移量得到新的引用。
返回的引用可以为一个单元格或单元格区域。
并可以指定返回的行数或列数。
通俗的讲就是OFFSET(参考单元格,移动的行数,移动的列数,所要引用的行数,所要引用的列数)参考《关于offset函数》第三行中第一个offset(1)是假设要要去掉的表头行数,如果有2行表头,就改成offset(2),要去掉几行表头括号中的数字就改成几。
第二个offset(1)表示合并以后表格与表格之间要间隔的空行,offset(1)表示不留空行,offset(2)表示间隔1行空行,以此类推。
也可以这样写:Sub c()For i = Sheets.Count To 2 Step -1Sheets(i).UsedRange.Offset(2).Copy Sheets(1).Cells(Cells(65536, 1).End(xlUp).Row + 1, 1).Offset(0) ‘这个offset(0)可以不要Next iEnd Sub****************************************************************或者用以下宏代码将同一工作簿中的所有工作表合并到一个新建的工作表中按ALT+F11调出VBA窗口,插入一个模块,然后把下面的代码复制进去。
Sub hz()Set NewSheet = Sheets.Add(Type:=xlWorksheet) '生成一个新表Sheets(NewSheet.Index).Move Before:=Sheets(1) '将此新表移动到最前面For i = 2 To Worksheets.CountSheets(i).UsedRange.Copy NewSheet.Cells([a65536].End(xlUp).Row + 2, 1) '将其他表的已使用区域复制到新表中Next iMsgBox "合并完成"End Sub这段代码很简单,其中第四行中用FOR循环得到当前工作簿中的所有工作表,第五行中使用UsedRange得到每个工作表的“已使用区域”,然后用copy方法把这些“已使用区域”中的内容复制到新建工作表中。
语句Cells([a65536].End(xlUp).Row + 2, 1)的作用是得到新建工作表的A列中的最后空白单元格(即要在哪个位置粘贴),加2的作用是使每次复制数据间隔2行空格(此处应表示间隔1行空格,加1的话,表示合并的表格与表格之间不留空格)。
回到EXCEL窗口,执行“工具-宏-宏”中的“hz”宏就会自动合并工作表了。
(经本人测试,不能使用右键点击标签查看代码再粘入代码的方式,应该运用菜单栏插入模块的方式)---------------------------------------------------------------【工作簿合并】将需要合并的工作簿文件放置在一个文件夹中,并新建一个工作簿,写入代码:Sub 合并工作薄()Dim FilesToOpenDim x As IntegerOn Error GoTo ErrHandlerApplication.ScreenUpdating = FalseFilesToOpen = Application.GetOpenFilename _(FileFilter:="MicroSoft Excel文件(*.xls), *.xls", _MultiSelect:=True, Title:="要合并的文件")If TypeName(FilesToOpen) = "Boolean" ThenMsgBox "没有选中文件"GoTo ExitHandlerEnd Ifx = 1While x <= UBound(FilesToOpen)Workbooks.Open Filename:=FilesToOpen(x)Sheets().Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)x = x + 1WendExitHandler:Application.ScreenUpdating = TrueExit SubErrHandler:MsgBox Err.DescriptionResume ExitHandlerEnd Sub------------------------显示隐藏的工作表Sub ShowAllSheets() '使当前工作簿中的所有工作表都显示(即将隐藏的工作表也显示)"Dim ws As WorksheetFor Each ws In Sheetsws.Visible = True Next wsEnd Sub--------------------------------------------------------根据Sheet2中的数据,检查Sheet1中的重复数据,并且进行后续的操作(将重复数据删除或者拷贝出来)的操作。
Application.ScreenUpdating = FalseC = 2 '第一个工作表检测B列X = 1 '第一条检测结果放在第1行Count = 1First_sheet_row = Sheets(1).Cells(65536, C).End(xlUp).RowSecond_sheet_row = Sheets(2).Cells(65536, C).End(xlUp).RowDim To_be_deleted(5369) As StringFor j = 1 To 5368To_be_deleted(j) = Trim(CStr(Sheets(2).Cells(j, 2).Value))Next jFor i = 1 To First_sheet_rowFirst_value = Trim(CStr(Sheets(1).Cells(i, C).Value))For j = 1 To 5368'MsgBox To_be_deleted(j)If First_value = To_be_deleted(j) ThenSheets(1).Range("A" & CStr(i) & ":Ag" & i).DeleteSheets(2).Cells(j, 4).Value = "Copied"'Sheets(2).Cells(j, 3).Value = "Copied"'Application.CutCopyMode = False'Sheets(1).Range("A" & CStr(i) & ":Ag" & i).Copy'Sheets(3).Paste Destination:=Sheets(3).Range("A" & i)'Sheets(3).PasteCount = Count + 1i = i - 1End IfNext jNext iApplication.ScreenUpdating = TrueMsgBox "共删除了" & Count这个脚本中有一些优化的地方,原来进行数据比较时,都是使用直接Cell(x,y)的方式访问并对比,另外也是分别循环,效率非常低,Excel一直处于假死的状态。
后来,先将比较小的一份数据拷贝到数组中,然后再进行循环,这样效率就提高了很多。