市区县分离

  1. Sub 1()
  2. Dim s
  3. For i = 1 To 56
  4. Set s = Range("B" & i)
  5. 城市 = InStr(s, "市")
  6. 区县 = InStr(s, "区")
  7. Range("E" & i) = Left(s, 城市)
  8. Range("F" & i) = Replace(Left(s, 区县), Left(s, 城市), "")
  9. Range("G" & i) = Right(s, Len(s) - 区县)
  10. Next
  11. End Sub

在多个工作簿多个工作表中找到汇总表中缺失的值并进行填充(一次v多列)

  1. Sub shishi()
  2. arr = Range("A1").CurrentRegion
  3. For j = 2 To UBound(arr, 1)
  4. If arr(j, 2) = "" Then
  5. sn = arr(j, 1)
  6. Call 查找(sn, j)
  7. End If
  8. Next
  9. End Sub
  10. Sub 查找(sn, j)
  11. Application.ScreenUpdating = False '屏幕刷新关闭
  12. Set 总表 = ThisWorkbook.Sheets("Sheet1")
  13. Set FSO对象 = CreateObject("Scripting.FileSystemObject")
  14. Set 文件夹 = FSO对象.GetFolder("F:\新建文件夹")
  15. For Each i In 文件夹.Files
  16. Set 工作簿 = Workbooks.Open(i)
  17. For Each 工作表 In 工作簿.Worksheets
  18. Set 结果 = Sheets(工作表.Name).UsedRange.Find(sn)
  19. If Not 结果 Is Nothing Then
  20. 地址 = Replace(结果.Address, "$", "")
  21. 总表.Range("B" & j) = Sheets(工作表.Name).Range(地址).Offset(0, 1)
  22. 总表.Range("C" & j) = Sheets(工作表.Name).Range(地址).Offset(0, 2)
  23. 总表.Range("D" & j) = Sheets(工作表.Name).Range(地址).Offset(0, 3)
  24. 总表.Range("E" & j) = Sheets(工作表.Name).Range(地址).Offset(0, 4)
  25. 总表.Range("F" & j) = Sheets(工作表.Name).Range(地址).Offset(0, 5)
  26. 总表.Range("G" & j) = Sheets(工作表.Name).Range(地址).Offset(0, 6)
  27. 总表.Range("H" & j) = Sheets(工作表.Name).Range(地址).Offset(0, 7)
  28. GoTo 关闭
  29. End If
  30. Next
  31. 关闭: 工作簿.Close 0
  32. Next
  33. Application.ScreenUpdating = True '屏幕刷新关闭
  34. End Sub

在所有表中Vlookup想要的结果

  1. Sub shishi()
  2. Dim I
  3. i= 2
  4. Do While Range("A" & I) <> " "
  5. 单元格 = "C" & I
  6. Call 查找(Range("A" & I), 单元格)
  7. i= i+ 1
  8. Loop
  9. End Sub
  10. Sub 查找(形参, 单元格)
  11. For Each 工作表 In Worksheets
  12. if 工作表.Name <> "总表" Then
  13. Set 区域 = Sheets(工作表.Name).Cells.Find(形参)
  14. If Not 区域 is Nothing Then
  15. 行号 = Mid(区域.Address, InStrRev(区域.Address,"$")+ 1)
  16. Set 区域2 = Sheets(工作表.Name).Rows(1).Find("分数")
  17. 截取 = Mid(区域2.Address, 2)
  18. 个数 = InStr(截取, "$") -1
  19. 列号 = Mid(截取, 1, 个数)
  20. Sheets("总表").Range(单元格) = Sheets(工作表.Name).Range(列号 & 行号)
  21. Exit For
  22. End If
  23. End If
  24. Next
  25. End Sub

不同工作簿的对应工作表的叠加求和

  1. Sub shishi()
  2. Excel.Application.ScreenUpdating = False
  3. Set FSO对象 = CreateObject("Scripting.FileSystemObject")
  4. Set 文件夹 = FSO对象.GetFolder("F:\新建文件夹")
  5. For Each i In 文件夹.Files
  6. Set 工作簿 = Workbooks.Open(i)
  7. For Each sh In 工作簿.Worksheets
  8. Set 工作表 = 工作簿.Worksheets(sh.Name)
  9. Set 合并表 = ThisWorkbook.Worksheets(sh.Name)
  10. 工作表.Range("A1").CurrentRegion.Copy
  11. 合并表.Range("A1").PasteSpecial xlPasteAll, xlPasteSpecialoprationadd
  12. Next
  13. 工作簿.Close
  14. Next
  15. Excel.Application.ScreenUpdating = True
  16. End Sub

季度汇总

  1. Sub 季度汇总()
  2. Dim i, k, name
  3. Dim w As Worksheet, r As Worksheet
  4. Set r = Worksheets("季度汇总")
  5. '循环扫描汇总表中的每一行,记住每次要查找的姓名
  6. For i = 3 To 10
  7. name = r.Cells(i, 2)
  8. '循环扫描所有工作表,并用 w 指向该工作表
  9. For Each w In Worksheets
  10. '如果该工作表名字以“月”结尾,则认为是月报表
  11. If Right(w.name, 1) = "月" Then
  12. '循环扫描该月报表的每一行,判断其姓名列是否等于name
  13. k = 3
  14. Do While w.Cells(k, 2) <> ""
  15. '如果第k行姓名等于Name,则将该行累加到汇总表第i行
  16. If LCase(Trim(w.Cells(k, 2))) = LCase(Trim(name)) Then
  17. '以下四行代码可以用循环的方式改写,更加方便
  18. r.Cells(i, 3) = r.Cells(i, 3) + w.Cells(k, 3)
  19. r.Cells(i, 4) = r.Cells(i, 4) + w.Cells(k, 4)
  20. r.Cells(i, 5) = r.Cells(i, 5) + w.Cells(k, 5)
  21. r.Cells(i, 6) = r.Cells(i, 6) + w.Cells(k, 6)
  22. End If
  23. k = k + 1
  24. Loop
  25. End If
  26. Next w
  27. Next i
  28. End Sub

九九乘法表

  1. Sub 九九乘法表()
  2. Dim a, b
  3. For a = 1 To 9
  4. For b = 1 To 9
  5. If a < b Then
  6. Cells(a + 1, b) = ""
  7. Else
  8. Cells(a + 1, b) = a & "x" & b & "=" & a * b
  9. End If
  10. Next
  11. Next
  12. End Sub

求平均分()

  1. Sub 平均分()
  2. Dim i, 总分, 计数
  3. 总分 = 0
  4. 计数 = 0
  5. i = 2
  6. Do While Cells(i, 1) <> ""
  7. 总分 = 总分 + Cells(i, 2)
  8. 计数 = 计数 + 1
  9. i = i + 1
  10. Loop
  11. If 计数 > 0 Then
  12. Cells(4, 4) = Int(总分 / 计数)
  13. End If
  14. End Sub

生日函数

  1. Function 生日(x)
  2. 生日 = DateSerial(Mid(x, 7, 4), Mid(x, 11, 2), Mid(x, 13, 2))
  3. End Function


删除当前工作表中的所有形状:

  1. Sub DeleteAllShapesInWorksheet()
  2. Dim shp As Shape
  3. For Each shp InActiveSheet.Shapes
  4. shp.Delete
  5. Next shp
  6. End Sub

下面的代码删除指定类型形状(图表和单元格批注)
之外的所有形状:

  1. Sub 删除指定类型形状()
  2. Dim shp As Shape
  3. For Each shp InActiveSheet.Shapes
  4. If shp.Type <>msoChart And shp.Type <> msoComment Then
  5. '删除图标和批注
  6. shp.Delete
  7. End If
  8. Next shp
  9. End Sub

image.png