Select Case Sheets.Count Case 5 MsgBox "不用刪喇" Case 28 MsgBox "表數過多,要刪喔"For i = 2 To Sheets.Count - 4 Sheets(2).Select
以string做辨別+Case Else的用法:
For i = 2 To Range("A2").End(xldown).rowSelect Case Cells(i, 2).Value Case 小明 MsgBox "叫小明的資料不用刪" Case Else Cells(i, 2).Value MsgBox "其他的資料須刪除"'刪除工作表 ActiveWindow.SelectedSheets.DeleteNext '迴圈結尾 Application.DisplayAlerts = True Case Else EndEnd Select 'Select結尾
Sub 關鍵字比對()Dim 關鍵字 AsObjectDim temp, Str AsStringtemp = ""Set 關鍵字 = CreateObject("VBScript.RegExp") Sheets("含有關鍵字的工作表").Select'關鍵字起始列至結束列For i = 2 To 1719 temp = temp & Range("A" & i) & "|"Next i temp = "(" & temp & Range("A" & ActiveSheet.UsedRange.Rows.Count).Value & ")"'所有的關鍵字格式: "(A|B|C)" ,以此類推 Debug.Print temp 關鍵字.Pattern = temp Sheets("欲對照檔案").Select n = Range("a1").End(xlDown).RowFor k = 2 To n'假設要測D欄 Str = Range("D" & k)If 關鍵字.test(Str) Then Debug.Print k & ":OK"Else Debug.Print k & ":" & StrEnd IfNext kEnd Sub
方法2
Sub sol2()'另一種尋找關鍵字的方法,把要找的字串跟keyword都變成array會比較快Dim key key = Array("要找的關鍵字")for i = 0 to 0If InStr(1, Range("A1"), key, vbBinaryCompare) Then Debug.Print "OK"End Ifnext iEnd sub
Sub 項次加合併()'終點列都是C欄enddown'標項次Dim cc = 1ThisWorkbook.ActivateFor i = 2 To Range("C2").End(xlDown).RowIf Range("B" & i) <> ""ThenRange("A" & i) = cc = c + 1End IfNext'----'第一項值合併Dim n'為了防止最後一列明明不用合併還合併,終點設倒數第二列For i = 2 To Range("C2").End(xlDown).Row - 1n = 1If Range("B" & i) <> ""And Range("B" & i + 1) = ""ThenDoRange("B" & i & ":B" & i + n).Selectn = n + 1Debug.Print nIf i + n > Range("C2").End(xlDown).Row Then Exit DoLoop Until Range("B" & i + n).Value <> ""End IfSelection.MergeNext'------'項次合併'為了防止最後一列明明不用合併還合併,終點設倒數第二列For i = 2 To Range("C2").End(xlDown).Row - 1n = 1If Range("A" & i) <> ""And Range("A" & i + 1) = ""ThenDoRange("A" & i & ":A" & i + n).Selectn = n + 1Debug.Print n'需要強制結束迴圈If i + n > Range("C2").End(xlDown).Row Then Exit DoLoop Until Range("A" & i + n).Value <> ""End IfSelection.MergeNextEnd Sub
Sub 列出所有交叉篩選器()'Description: List all slicers and sheet names in the Immediate window'Author: Jon Acampora, Excel Campus'Source: https://www.excelcampus.com/vba/vba-macro-list-all-slicers/Dim sc As SlicerCacheDim sl As Slicer'SlicerCache.Name = 程式裡的交叉篩選器名稱'Slicer.Parent.Name = 交叉篩選器所在表名For Each sc In ActiveWorkbook.SlicerCachesFor Each sl In sc.SlicersFor Each si In sc.SlicerItemsIf si.Selected = TrueThen Debug.Print sl.Parent.Name & " | " & sl.Name & "|" & si.NameEnd If'sl.Caption = slicer header caption'sl.Parent.Name = worksheet nameNext siNext slNext scEnd Sub
copy上一列
相當於整列選取後使用Crlt+D
Sub copy上一列() Rows("100:100").Select Application.CutCopyMode = False Selection.FillDownEnd Sub
列出所有資料夾
Sub 純print()Dim folderPath AsStringDim filename, filetype, start_cell, end_col AsStringDim wb As Workbook''1. 選取檔案所在的資料夾,作為路徑Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)'2. Optional: Properties fDialog.Title = "請選擇資料夾"'3. 如果有選完資料夾,便生成路徑變數If fDialog.Show = -1 Then folderPath = fDialog.SelectedItems(1) & "\"End Iffilename = Dir(folderPath & filetype)Do While filename <> ""Debug.Print filenamefilename = DirLoopEnd Sub
寫在工作表的版本:
Sub 寫在格子裡()Dim folderPath AsStringDim filename, filetype, n, colDim wb As Workbook'1. 選取檔案所在的資料夾,作為路徑Set fDialog = Application.FileDialog(msoFileDialogFolderPicker)'2. Optional: PropertiesfDialog.Title = "請選擇資料夾"'3. 如果有選完資料夾,便生成路徑變數If fDialog.Show = -1 Then folderPath = fDialog.SelectedItems(1) & "\"End Iffilename = Dir(folderPath & filetype)col = InputBox("請選擇放檔名的欄位", "欄位?", "A")If IsEmpty(Range(col & 2)) = TrueThen n = 2 Else n = Range(col & 2).End(xlDown).Offset(1, 0).RowDo While filename <> ""Range(col & n).Value = filenamen = n + 1filename = DirLoopEnd Sub
資料reshape
Sub 一行變成矩陣()'情境:資料全擠在A欄Dim j, n, stj = 0n = Range("A1").End(xlDown).Rowst = CInt(InputBox("要隔幾筆資料一列?,結果顯示在D2", "隔幾筆", "5"))Debug.Print n'step: 從第1列到下一列開始貼的列隔多少'i + (最後要選取的列 - 一開始選取的列)For i = 1 To n Step stDebug.Print i Range(Cells(i, 1), Cells(i + st - 1, 1)).Select Selection.Copy Range("D" & i - (st - 1) * j + 1).Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _False, Transpose:=True j = j + 1NextEnd Sub
Sub 一列變成矩陣()'情境:資料全擠在第一列Dim j, n, stj = 0n = Range("A1").End(xlToRight).Columnst = CInt(InputBox("要隔幾筆資料一列?,結果顯示在A2", "隔幾筆", "5"))For i = 1 To n Step stDebug.Print 2 + i - (st - 1) * j Range(Cells(1, i), Cells(1, i + st - 1)).Select Selection.Copy Range("A" & 2 + i - (st - 1) * j).SelectActiveSheet.PasteDebug.Print 2 + i - (st - 1) * j j = j + 1NextEnd Sub