第一天
Sub demo_2()
' 删除C列到E列,并将其内容左移,覆盖掉C列
Range("C:E").Delete shift:=xlToLeft
' 将G列的内容剪切到剪贴板
Range("G:G").Cut
' 将剪贴板中的内容粘贴到B列,并将原来的内容右移,覆盖掉B列
Range("B:B").Insert shift:=xlToRight
' 对A1到H114范围应用自动筛选,仅显示第7列中大于200的值
Range("A1:H114").AutoFilter Field:=7, Criteria1:=">200"
End Sub`
Sub demo3()
' 声明一个整型变量i,用于循环计数
Dim i As Integer
' 开始循环,从1到6
For i = 1 To 6
' 选择第i号工作表
Sheets(i).Select
' 删除C列到E列,并将其内容左移,覆盖掉C列
Range("C:E").Delete shift:=xlToLeft
' 将G列的内容剪切到剪贴板
Range("G:G").Cut
' 将剪贴板中的内容粘贴到B列,并将原来的内容右移,覆盖掉B列
Range("B:B").Insert shift:=xlToRight
' 对A1到H114范围应用自动筛选,仅显示第7列中大于200的值
Range("A1:H114").AutoFilter Field:=7, Criteria1:=">200"
Next i
End Sub
添加颜色_全部
Sub demo_添加颜色_全部()
' 定义循环计数变量 i
Dim i As Integer
' 循环从1到449,每次增加2,以便每隔一个单元格填充一次颜色
For i = 1 To 449 Step 2
' 设置选定单元格的背景颜色
With Selection.Interior
.Pattern = xlSolid ' 背景填充样式为实心填充
.PatternColorIndex = xlAutomatic ' 自动选择背景填充颜色
.Color = 255 ' 设置背景颜色为RGB色值255(纯红色)
.TintAndShade = 0 ' 不设置色调和阴影
.PatternTintAndShade = 0 ' 不设置图案的色调和阴影
End With
' 将当前活动单元格向下偏移2行,然后选中A1单元格,以准备填充下一个单元格的颜色
ActiveCell.Offset(2, 0).Range("A1").Select
Next i
End Sub
星期
Sub 星期()
' 定义循环计数变量 i
Dim i As Integer
' 循环从1到449,每次增加7,以便跳过6个单元格来填充星期颜色
For i = 1 To 449 Step 7
' 设置选定单元格的背景颜色为RGB色值 5287936(浅绿色,用于星期的第一个单元格)
With Selection.Interior
.Pattern = xlSolid ' 背景填充样式为实心填充
.PatternColorIndex = xlAutomatic ' 自动选择背景填充颜色
.Color = 5287936 ' 设置背景颜色为浅绿色
.TintAndShade = 0 ' 不设置色调和阴影
.PatternTintAndShade = 0 ' 不设置图案的色调和阴影
End With
' 将当前活动单元格向下偏移3行,然后选中A1单元格,以准备填充星期第二个单元格的颜色
ActiveCell.Offset(3, 0).Range("A1").Select
' 设置选定单元格的背景颜色为RGB色值 65535(黄色,用于星期的第二个单元格)
With Selection.Interior
.Pattern = xlSolid ' 背景填充样式为实心填充
.PatternColorIndex = xlAutomatic ' 自动选择背景填充颜色
.Color = 65535 ' 设置背景颜色为黄色
.TintAndShade = 0 ' 不设置色调和阴影
.PatternTintAndShade = 0 ' 不设置图案的色调和阴影
End With
' 将当前活动单元格向下偏移4行,然后选中A1单元格,以准备填充星期第三个单元格的颜色
ActiveCell.Offset(4, 0).Range("A1").Select
' 设置选定单元格的背景颜色为RGB色值 5287936(浅绿色,用于星期的第三个单元格)
With Selection.Interior
.Pattern = xlSolid ' 背景填充样式为实心填充
.PatternColorIndex = xlAutomatic ' 自动选择背景填充颜色
.Color = 5287936 ' 设置背景颜色为浅绿色
.TintAndShade = 0 ' 不设置色调和阴影
.PatternTintAndShade = 0 ' 不设置图案的色调和阴影
End With
Next i
End Sub
相对引用插入表头
Sub 相对引用插入表头()
' 定义循环计数变量 i
Dim i As Integer
' 循环从1到10
For i = 1 To 10
' 选定当前活动单元格的第一行,并复制该行内容
ActiveCell.Rows("1:1").EntireRow.Select
Selection.Copy
' 将复制的内容插入到当前活动单元格下方的两行
ActiveCell.Offset(2, 0).EntireRow.Select
Selection.Insert shift:=xlDown
Next
End Sub
相对引用删除表头
Sub 相对引用删除表头()
' 定义循环计数变量 i
Dim i As Integer
' 循环从第3行到第12行
For i = 3 To 12
' 删除第 i 行(即当前行),并将其上方的行往上移动以填补空缺
Range("A" & i).EntireRow.Delete shift:=xlUp
Next
End Sub
绝对引用插入表头
Sub 绝对引用插入表头()
' 定义循环计数变量 i
Dim i As Integer
' 循环从第3行到第22行,每隔2行插入一次表头
For i = 3 To 22 Step 2
' 复制第1行的内容
Range("1:1").Copy
' 将复制的内容插入到第 i 行(即当前行)的上方,其余行往下移动以腾出空间
Range("A" & i).EntireRow.Insert shift:=xlDown
Next
End Sub
绝对引用删除表头
Sub 绝对引用删除表头()
' 定义循环计数变量 i
Dim i As Integer
' 逆向循环,从第22行到第2行
For i = 22 To 2 Step -1
' 检查当前行(第 i 行)的第1列(A列)是否包含"姓名"
If Range("A" & i).Value = "姓名" Then
' 如果找到了包含"姓名"的单元格,则删除当前行,并将上方的行往上移动以填补空缺
Range("A" & i).EntireRow.Delete shift:=xlUp
End If
Next
End Sub
填充专业代号
Sub 填充专业代号()
' 定义循环计数变量 i
Dim i As Integer
' 循环从第2行到第64行
For i = 2 To 64
' 检查当前行(第 i 行)的第2列(B列)的内容
If Range("B" & i) = "理工" Then
' 如果"B"列的内容是"理工",则在当前行的第3列(C列)填充"LG"
Range("C" & i) = "LG"
ElseIf Range("B" & i) = "文科" Then
' 如果"B"列的内容是"文科",则在当前行的第3列(C列)填充"WK"
Range("C" & i) = "WK"
ElseIf Range("B" & i) = "财经" Then
' 如果"B"列的内容是"财经",则在当前行的第3列(C列)填充"CJ"
Range("C" & i) = "CJ"
End If
Next
End Sub
填充称呼
Sub 填充称呼()
' 定义循环计数变量 i
Dim i As Integer
' 循环从第2行到第64行
For i = 2 To 64
' 检查当前行(第 i 行)的第5列(E列)的内容
If Range("E" & i) = "男" Then
' 如果"E"列的内容是"男",则在当前行的第6列(F列)填充"先生"
Range("F" & i) = "先生"
ElseIf Range("E" & i) = "女" Then
' 如果"E"列的内容是"女",则在当前行的第6列(F列)填充"女士"
Range("F" & i) = "女士"
End If
Next
End Sub
删除姓名为空的行
Sub 删除姓名为空的行()
' 定义循环计数变量 i
Dim i As Integer
' 逆向循环,从第64行到第2行
For i = 64 To 2 Step -1
' 检查当前行(第 i 行)的第4列(D列)的内容是否为空
If Range("D" & i).Value = "" Then
' 如果"D"列的内容为空,则删除当前行
Range("D" & i).EntireRow.Delete
End If
Next
End Sub
填充并汇总所有数据
Sub 填充并汇总所有数据()
' 定义循环计数变量 r
Dim r As Integer
Dim i As Integer
' 循环遍历所有工作表
For r = 1 To Sheets.Count
' 在每个工作表中的"H2"单元格填充"地理位置"
Range("H2") = "地理位置"
' 循环从最后一行(非空行)到第2行
For i = Range("A65535").End(xlUp).Row To 2 Step -1
' 检查当前行(第 i 行)的第2列(B列)的内容
If Range("B" & i) = "理工" Then
' 如果"B"列的内容是"理工",则在当前行的第3列(C列)填充"LG"
Range("C" & i) = "LG"
ElseIf Range("B" & i) = "文科" Then
' 如果"B"列的内容是"文科",则在当前行的第3列(C列)填充"WK"
Range("C" & i) = "WK"
ElseIf Range("B" & i) = "财经" Then
' 如果"B"列的内容是"财经",则在当前行的第3列(C列)填充"CJ"
Range("C" & i) = "CJ"
End If
' 检查当前行(第 i 行)的第5列(E列)的内容
If Range("E" & i) = "男" Then
' 如果"E"列的内容是"男",则在当前行的第6列(F列)填充"先生"
Range("F" & i) = "先生"
ElseIf Range("E" & i) = "女" Then
' 如果"E"列的内容是"女",则在当前行的第6列(F列)填充"女士"
Range("F" & i) = "女士"
End If
' 检查当前行(第 i 行)的第4列(D列)的内容是否为空
If Range("D" & i).Value = "" Then
' 如果"D"列的内容为空,则删除当前行
Range("D" & i).EntireRow.Delete
End If
' 将当前工作表的名称填充到当前行的地理位置列(第8列,H列)
Range("H" & i) = Sheets(r).Name
Next
Next
' 定义循环计数变量 r
Dim c As Integer
' 在工作簿中添加一个名为"汇总"的新工作表,并将其命名为"汇总"
Sheets.Add after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "汇总"
' 将第一个工作表(第1个工作表)的第1行内容复制到"汇总"工作表的第1行
Sheets(1).Range("A1:H1").Copy Sheets("汇总").Range("A1")
' 循环从第一个工作表(第1个工作表)到倒数第二个工作表(Sheet.Count - 1)
For r = 1 To Sheets.Count - 1
' 获取当前工作表的最后一行的行号
x = Sheets(c).Range("A65535").End(xlUp).Row
' 获取"汇总"工作表的最后一行的行号,并将复制的内容从"汇总"工作表的下一行开始粘贴
y = Sheets("汇总").Range("A65535").End(xlUp).Row + 1
' 将当前工作表的第2行到最后一行的数据复制到"汇总"工作表的对应位置
Sheets(c).Range("A2:H" & x).Copy Sheets("汇总").Range("A" & y)
Next
End Sub
把所有内容汇总起来
Sub 把所有内容汇总起来()
' 定义循环计数变量 r
Dim r As Integer
' 在工作簿中添加一个名为"汇总"的新工作表,并将其命名为"汇总"
Sheets.Add after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "汇总"
' 将第一个工作表(第1个工作表)的第1行内容复制到"汇总"工作表的第1行
Sheets(1).Range("A1:H1").Copy Sheets("汇总").Range("A1")
' 循环从第一个工作表(第1个工作表)到倒数第二个工作表(Sheet.Count - 1)
For r = 1 To Sheets.Count - 1
' 获取当前工作表的最后一行的行号
x = Sheets(r).Range("A65535").End(xlUp).Row
' 获取"汇总"工作表的最后一行的行号,并将复制的内容从"汇总"工作表的下一行开始粘贴
y = Sheets("汇总").Range("A65535").End(xlUp).Row + 1
' 将当前工作表的第2行到最后一行的数据复制到"汇总"工作表的对应位置
Sheets(r).Range("A2:H" & x).Copy Sheets("汇总").Range("A" & y)
Next
End Sub
填充并汇总所有数据
Sub 填充并汇总所有数据()
' 定义循环计数变量 r 和 c
Dim r As Integer
Dim c As Integer
' 在工作簿中添加一个名为"汇总"的新工作表,并将其命名为"汇总"
Sheets.Add after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "汇总"
' 循环遍历所有工作表,填充数据并删除姓名为空的行
For r = 1 To Sheets.Count - 1
' 切换到当前工作表
Sheets(r).Activate
' 在每个工作表中的"H2"单元格填充"地理位置"
Range("H2") = "地理位置"
' 循环从最后一行(非空行)到第2行
For i = Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
' 检查当前行(第 i 行)的第2列(B列)的内容
If Range("B" & i) = "理工" Then
' 如果"B"列的内容是"理工",则在当前行的第3列(C列)填充"LG"
Range("C" & i) = "LG"
ElseIf Range("B" & i) = "文科" Then
' 如果"B"列的内容是"文科",则在当前行的第3列(C列)填充"WK"
Range("C" & i) = "WK"
ElseIf Range("B" & i) = "财经" Then
' 如果"B"列的内容是"财经",则在当前行的第3列(C列)填充"CJ"
Range("C" & i) = "CJ"
End If
' 检查当前行(第 i 行)的第5列(E列)的内容
If Range("E" & i) = "男" Then
' 如果"E"列的内容是"男",则在当前行的第6列(F列)填充"先生"
Range("F" & i) = "先生"
ElseIf Range("E" & i) = "女" Then
' 如果"E"列的内容是"女",则在当前行的第6列(F列)填充"女士"
Range("F" & i) = "女士"
End If
' 检查当前行(第 i 行)的第4列(D列)的内容是否为空
If Range("D" & i).Value = "" Then
' 如果"D"列的内容为空,则删除当前行
Rows(i).EntireRow.Delete
End If
' 将当前工作表的名称填充到当前行的地理位置列(第8列,H列)
Range("H" & i) = Sheets(r).Name
Next
Next
' 将第一个工作表(第1个工作表)的第1行内容复制到"汇总"工作表的第1行
Sheets(1).Range("A1:H1").Copy Sheets("汇总").Range("A1")
' 循环从第一个工作表(第1个工作表)到倒数第二个工作表(Sheet.Count - 1)
For c = 1 To Sheets.Count - 1
' 切换到当前工作表
Sheets(c).Activate
' 获取当前工作表的最后一行的行号
x = Range("A" & Rows.Count).End(xlUp).Row
' 获取"汇总"工作表的最后一行的行号,并将复制的内容从"汇总"工作表的下一行开始粘贴
y = Sheets("汇总").Range("A" & Rows.Count).End(xlUp).Row + 1
' 将当前工作表的第2行到最后一行的数据复制到"汇总"工作表的对应位置
Range("A2:H" & x).Copy Sheets("汇总").Range("A" & y)
Next
End Sub
填充并汇总
Sub 填充并汇总()
Dim r As Integer
Dim i As Integer
' 建立汇总表
Sheets.Add after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "汇总"
'开启表间循环,填充并复制粘贴
For r = 1 To Sheets.Count - 1
' 填充地理位置表头
Sheets(r).Range("h1") = "地理位置"
' 开启表内记录的循环,填充内容
For i = Sheets(r).Range("a65535").End(xlUp).Row To 2 Step -1
Sheets(r).Select
' 填充专业代号
If Range("b" & i) = "理工" Then
Range("c" & i) = "LG"
ElseIf Range("b" & i) = "文科" Then
Range("c" & i) = "WK"
ElseIf Range("b" & i) = "财经" Then
Range("c" & i) = "CJ"
End If
' 填充称呼
If Range("e" & i) = "男" Then
Range("f" & i) = "先生"
ElseIf Range("e" & i) = "女" Then
Range("f" & i) = "女士"
End If
' 填充地理位置
Sheets(r).Range("h" & i) = Sheets(r).Name
' 根据性名列进行删除
If Range("d" & i) = "" Then
Range("d" & i).EntireRow.Delete shift:=xlUp
End If
Next
' 复制当前工作表中的内容到汇总表中
x = Sheets(r).Range("a65535").End(xlUp).Row
y = Sheets("汇总").Range("a65535").End(xlUp).Row + 1
Sheets(r).Range("a2:h" & x).Copy Sheets("汇总").Range("a" & y)
Next
'给汇总表添加表头
Sheets(1).Range("a1:h1").Copy Sheets("汇总").Range("a1")
End Sub
操作工作表
' 插入30张表
Sub 插入30张表()
Dim i As Integer
' 循环插入30张表
For i = 1 To 30 Step 1
Sheets.Add after:=Sheets(Sheets.Count) ' 在当前活动工作表后插入一张新表
Sheets(Sheets.Count).Name = "第" & i & "张表" ' 将新表命名为 "第i张表"
Next
End Sub
' 填充内容到表中
Sub 填充内容()
Dim i As Integer
' 循环在每张表的对角线位置填充内容为 "刘蔚"
For i = 4 To 33
Sheets(i).Cells(i - 3, i - 3) = "刘蔚"
Next
End Sub
' 删除已建好的表(第4至第33张表)
Sub 删除建好的表()
Dim i As Integer
Application.DisplayAlerts = False ' 禁止弹出确认对话框
' 循环删除第4至第33张表
For i = 4 To 33
Sheets(4).Delete ' 删除第4张表
Next
Application.DisplayAlerts = True ' 恢复弹出确认对话框
End Sub
' 删除第一张表之外的表
Sub 删除第一张表之外的表()
Dim sht As Worksheet
Application.DisplayAlerts = False ' 禁止弹出确认对话框
' 循环遍历所有工作表
For Each sht In Sheets
If sht.Name <> Sheets(1).Name Then
sht.Delete ' 删除除第一张表之外的其他表
End If
Next
Application.DisplayAlerts = True ' 恢复弹出确认对话框
End Sub
复制内容到第一张表
'复制内容到第一张表
Sub 复制内容()
Dim i As Integer
Sheets(2).Range("1:1").Copy Sheets(1).Range("a1")
For i = 2 To Sheets.Count
x = Sheets(i).Range("a65535").End(xlUp).Row
y = Sheets(1).Range("a65535").End(xlUp).Row + 1
Sheets(i).Range("a2:z" & x).Copy Sheets(1).Range("a" & y)
Next
End Sub
去表名
Sub 去表名()
Dim i As Integer
Sheets(1).Range("A1") = "部门名称"
For i = 2 To sheets.count
Sheets(1).Range("A" & i) = Sheets(i).Name
Next
End Sub
第二天
插入部门名称
Sub 插入部门名称()
Dim i As Integer
' 循环遍历所有工作表
For i = 2 To Sheets.Count
' 获取第 i 个工作表的最后一行的行号
x = Sheets(i).Range("A" & Rows.Count).End(xlUp).Row
' 在第 i 个工作表的"A1"单元格插入"部门名称"
Sheets(i).Range("A1") = "部门名称"
' 在第 i 个工作表的"A2"到最后一行的"A"列填入工作表的名称,作为部门名称填充
Sheets(i).Range("A2:A" & x) = Sheets(i).Name
Next
End Sub
汇总到部门
Sub 汇总到部门()
Dim r As Integer
' 循环遍历所有工作表,将工作表名称作为部门名称填充到各自的"A2:A"列中
For r = 2 To Sheets.Count
x = Sheets(r).Range("A65535").End(xlUp).Row
Sheets(r).Range("A1") = "部门名称"
Sheets(r).Range("A2:A" & x) = Sheets(r).Name
Next
' 将第一个工作表(第2个工作表)的第1行内容复制到"部门"工作表的第1行
Sheets(2).Range("A1:D1").Copy Sheets("部门").Range("A1")
' 循环从第一个工作表(第2个工作表)到最后一个工作表(Sheet.Count)
For r = 2 To Sheets.Count
' 获取当前工作表的最后一行的行号
x = Sheets(r).Range("A65535").End(xlUp).Row
' 获取"部门"工作表的最后一行的行号,并将复制的内容从"部门"工作表的下一行开始粘贴
y = Sheets("部门").Range("A65535").End(xlUp).Row + 1
' 将当前工作表的第2行到最后一行的数据复制到"部门"工作表的对应位置
Sheets(r).Range("A2:H" & x).Copy Sheets("部门").Range("A" & y)
Next
End Sub
汇总到部门_正确简单
Sub 汇总到部门_2()
Dim i As Integer
' 循环遍历每个工作表,从第二个工作表开始
For i = 2 To Sheets.Count
' 找到当前工作表中列A的最后使用行
x = Sheets(i).Range("A65535").End(xlUp).Row
' 在当前工作表的开头插入一列
Sheets(i).Range("A:A").Insert shift:=xlRight
' 在当前工作表的A1单元格添加标题"部门名称"
Sheets(i).Range("A1") = "部门名称"
' 将工作表名称填充到A2到最后使用行的范围
Sheets(i).Range("A2:A" & x) = Sheets(i).Name
' 找到第一个工作表中列A的最后使用行
y = Sheets(1).Range("A65535").End(xlUp).Row + 1
' 将当前工作表的A2到E最后使用行范围的数据复制到第一个工作表的从行y开始的范围
Sheets(i).Range("A2:E" & x).Copy Sheets(1).Range("A" & y)
Next
' 将第二个工作表的A1到E1范围的标题复制到第一个工作表的A1范围
Sheets(2).Range("A1:E1").Copy Sheets(1).Range("A1")
End Sub
插入月报
代码的功能是根据输入的月份,在第一个工作表的后面插入当月每一天的月报表,表名格式为"月份+月+日期+号月报"。
Sub 插入月报()
Dim sht As Worksheet
Dim m As Integer
Dim d As Integer
Dim i As Integer
Application.DisplayAlerts = False
' 删除无用表
For Each sht In Sheets
If sht.Name <> Sheets(1).Name Then
sht.Delete
End If
Next
' 输入月份
m = InputBox("请输入月份:")
' 判断输入的月份是否合法
If m = 1 Or m = 3 Or m = 5 Or m = 7 Or m = 9 Or m = 11 Then
d = 31
ElseIf m = 4 Or m = 6 Or m = 8 Or m = 10 Or m = 12 Then
d = 30
ElseIf m = 2 Then
d = 28
Else
MsgBox ("月份有误,请重新输入:")
Exit Sub
End If
' 插入月报表
For i = 1 To d
Sheets(1).Copy after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = m & "月" & i & "号月报"
Next
Application.DisplayAlerts = True
MsgBox ("OK!")
End Sub
汇总日报
Sub 汇总日报()
Dim i As Integer
Dim str As String
' 循环遍历每个工作表,从第二个工作表开始
For i = 2 To Sheets.Count
' 将第i个工作表的E5单元格的值复制到第一个工作表的B(i+8)单元格
Sheets(1).Range("B" & i + 8) = Sheets(i).Range("E5")
' 将第i个工作表的E6单元格的值复制到第一个工作表的C(i+8)单元格
Sheets(1).Range("C" & i + 8) = Sheets(i).Range("E6")
' 将第i个工作表的E44单元格的值复制到第一个工作表的D(i+8)单元格
Sheets(1).Range("D" & i + 8) = Sheets(i).Range("E44")
Next
' 在第一个工作表的E5单元格中输入公式"=today()"
Sheets(1).Range("E5") = "=TODAY()"
' 弹出输入框,要求用户输入审核人姓名
str = InputBox("请输入审核人姓名:")
' 将输入的审核人姓名赋值给第一个工作表的E6单元格
Sheets(1).Range("E6") = str
End Sub
识别指定路径下的文件并复制
代码的功能是在指定路径下搜索以".xl"或".xlsx"为扩展名的文件,并将它们的第一个工作表复制到当前工作簿的最后一个工作表后面,并将复制的工作表重命名为去掉扩展名的文件名部分。
Sub 识别指定路径下的文件并复制()
' 定义变量
Dim str As String
Dim i As Integer
Dim wb As Workbook
' 获取指定路径下的第一个文件名
str = Dir("F:\lunwzy_zj\智动数据\智动内训\VBA宏\data\*.xl*")
' 循环复制文件
For i = 1 To 100
' 打开当前文件
Set wb = Workbooks.Open("F:\lunwzy_zj\智动数据\智动内训\VBA宏\data\" & str)
' 复制当前文件的第一个工作表到当前工作簿的最后一个工作表后面
wb.Sheets(1).Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
' 将新复制的工作表重命名为去掉扩展名的文件名部分
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = Split(wb.Name, ".")(0)
' 关闭当前文件
wb.Close
' 获取指定路径下的下一个文件名
str = Dir
' 判断是否到达文件列表的末尾
If str = "" Then
Exit For
End If
Next
End Sub
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vsLoatrx-1691724842157)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20230803135410862.png)]
识别指定路径下的文件并复制
Sub 识别指定路径下的文件并复制()
' 定义变量
Dim str As String
Dim i As Integer
Dim wb As Workbook
Dim bz_str As Workbook
Application.DisplayAlerts = False
Application.ScreenUpdating = False
' 获取指定路径下的第一个文件名
str = Dir("F:\lunwzy_zj\智动数据\智动内训\VBA宏\data\*.xl*")
' 循环复制文件
For i = 1 To 100
' 打开当前文件
Set wb = Workbooks.Open("F:\lunwzy_zj\智动数据\智动内训\VBA宏\data\" & str)
' 复制当前文件的第一个工作表到当前工作簿的最后一个工作表后面
wb.Sheets(1).Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
' 将新复制的工作表重命名为去掉扩展名的文件名部分
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = Split(wb.Name, ".")(0)
' 关闭当前文件
wb.Close
' 获取指定路径下的下一个文件名
str = Dir
' 判断是否到达文件列表的末尾
If str = "" Then
Exit For
End If
Next
' 删除无用表
Sheets("sheets9").Delete
str = InputBox("请输入保存路径:")
ThisWorkbook.Sheets(1).SaveAs Filename:=str & "\" & ThisWorkbook.Sheets(1).Name
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
识别指定路径下的文件并复制_正确_完整 (找到sub_汇总)
Sub 识别指定路径下的文件并复制()
Dim str As String
Dim i As Integer
Dim wb As Workbook
str = Dir("D:\桌面\数分第二个月\第二周VBA-stu\03\data\*.xl*")
For i = 1 To 100
Set wb = Workbooks.Open("D:\桌面\数分第二个月\第二周VBA-stu\03\data\" & str)
wb.Sheets(1).Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = Split(wb.Name, ".")(0)
wb.Close
str = Dir
' 退出程序
If str = "" Then
Exit For
End If
Next
End Sub
Sub 保存到指定的路径里面()
Dim str As String
Application.ScreenUpdating = False
str = InputBox("请输入保存的路径:")
ThisWorkbook.Sheets(1).SaveAs Filename:=str & "\" & ThisWorkbook.Sheets(1).Name & ".xlsx"
Application.ScreenUpdating = True
End Sub
Sub 汇总()
Dim str As String
Dim str1 As String
Dim str2 As String
Dim i As Integer
Dim i2 As Integer
Dim wb As Workbook
Dim sht As Worksheet
Application.DisplayAlerts = False
Application.ScreenUpdating = False
' 将指定路径下的内容汇总到当前工作簿中
str = InputBox("请输入汇总的路径:")
str1 = Dir(str & "\*.xl*")
For i = 1 To 100
Set wb = Workbooks.Open(str & "\" & str1)
wb.Sheets(1).Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = Split(wb.Name, ".")(0)
wb.Close
' 再次从指定路径下取文件
str1 = Dir
' 循环结束程序
If str1 = "" Then
Exit For
End If
Next
'将所有工作表中的内容汇总到第一个工作表中
'先将sheet1的名称进行修改
Sheets(1).Name = "汇总"
' 设置表间循环进行复制粘贴
For i2 = 2 To Sheets.Count
x = Sheets(i2).Range("a65535").End(xlUp).Row
y = Sheets(1).Range("a65535").End(xlUp).Row + 1
'填充地区名称
Sheets(i2).Range("h1") = "地区"
Sheets(i2).Range("h2:h" & x) = Sheets(i2).Name
'开始复制粘贴
Sheets(i2).Range("a2:h" & x).Copy Sheets(1).Range("a" & y)
Next
' 给汇总表添加表头
Sheets(2).Range("a1:h1").Copy Sheets(1).Range("a1")
'删除无用表
For Each sht In Sheets
If sht.Name <> Sheets(1).Name Then
sht.Delete
End If
Next
'保存到指定的路径
str2 = InputBox("请输入保存的路径:")
ThisWorkbook.Sheets(1).SaveAs Filename:=str2 & "\" & ThisWorkbook.Sheets(1).Name & ".xlsx"
'清空当前工作表内容并退出
Sheets(1).Range("a1:z65535").ClearContents
Application.Quit
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
多个表格拆分成多个工作簿
Sub 多个表格拆分成多个工作簿()
Dim str As String
Dim sht As Worksheet
Application.ScreenUpdating = False
str = InputBox("请输入保存的路径: ")
For Each sht In Sheets
sht.Copy
ActiveWorkbook.SaveAs Filename:=str & "\" & sht.Name & ".xlsx"
ActiveWorkbook.Close
Next
MsgBox ("OK!")
Application.ScreenUpdating = True
End Sub
第三天
逐行复制
代码的功能是将第1个工作表中的数据逐行复制到其他工作表中,同时将第1个工作表的表头复制到所有工作表中。请注意,代码中假设第1个工作表中的"D"列包含目标工作表的名称。
Sub 逐行复制()
' 定义变量
Dim i As Integer
Dim i2 As Integer
Dim x As Long
' 逐行复制数据
For i = 2 To Sheets(1).Range("a65535").End(xlUp).Row
' 获取目标工作表的最后一行的行号,并在该行的下一行进行复制
x = Sheets(Sheets(1).Range("d" & i).Value).Range("a65535").End(xlUp).Row + 1
' 复制当前行的整行数据到目标工作表的下一行
Sheets(1).Range("d" & i).EntireRow.Copy Sheets(Sheets(1).Range("d" & i).Value).Range("a" & x)
Next
' 复制表头到所有工作表
For i2 = 2 To Sheets.Count
' 复制第1个工作表的表头(第1行的A列到F列)到当前工作表的第1行
Sheets(1).Range("a1:f1").Copy Sheets(i2).Range("a1")
Next
' 显示消息框
MsgBox ("ok!")
End Sub
恢复
代码功能是删除所有工作表(从第2个工作表开始)中的数据,范围为"A1:F65535"。
Sub 恢复()
' 定义变量
Dim i As Integer
' 删除其他工作表中的数据(从第2个工作表开始)
For i = 2 To Sheets.Count
' 删除第i个工作表中的"A1:F65535"范围的数据
Sheets(i).Range("A1:F65535").Delete
Next
End Sub
筛选复制
代码的功能是在第一个工作表中使用筛选器,根据第4列的值来筛选数据,并将筛选后的数据复制到其他工作表中(从第二个工作表开始)。
Sub 筛选复制()
' 定义变量sht,表示工作表
Dim sht As Worksheet
' 循环遍历所有工作表
For Each sht In Sheets
' 检查当前工作表是否为第一个工作表
If sht.Name <> Sheets(1).Name Then
' 在第一个工作表中使用筛选器,筛选第4列的值等于当前工作表的名称
Sheets(1).Range("1:1").AutoFilter field:=4, Criteria1:=sht.Name
' 复制第一个工作表中筛选后的数据到当前工作表的第1行
Sheets(1).Range("A1:F65535").Copy sht.Range("A1")
End If
Next
' 关闭筛选器,显示所有数据
Sheets(1).Range("1:1").AutoFilter
' 显示消息框,提示完成
MsgBox ("OK!")
End Sub
' 删除无用表
For Each sht In Sheets
If sht.Name <> Sheets(1).Name Then
sht.Delete
End If
Next
删除第一张表之外的表
代码的功能是删除第一个工作表之外的所有工作表。
Sub 删除第一张表之外的表()
' 定义变量sht,表示工作表
Dim sht As Worksheet
' 关闭删除工作表时的警告提示
Application.DisplayAlerts = False
' 循环遍历所有工作表
For Each sht In Sheets
' 检查当前工作表是否为第一个工作表
If sht.Name <> Sheets(1).Name Then
' 删除除了第一个工作表之外的其他工作表
sht.Delete
End If
Next
' 打开删除工作表时的警告提示
Application.DisplayAlerts = True
End Sub
建表并拆分成工作薄
Sub 建表并拆分成工作薄()
' 定义变量str,表示保存的路径
Dim str As String
' 定义变量i,表示循环计数
Dim i As Integer
' 定义变量sht,表示工作表
Dim sht As Worksheet
' 关闭屏幕更新以提高执行效率
Application.ScreenUpdating = False
' 循环遍历第一个工作表的数据
For i = 2 To Sheets(1).Range("A65535").End(xlUp).Row
' 定义变量k并初始化为"开"
Dim k As String
k = "开"
' 循环遍历所有工作表,检查是否已经存在同名的工作表
For Each sht In Sheets
If sht.Name = Sheets(1).Range("D" & i).Value Then
' 如果找到同名的工作表,将k设置为"关"
k = "关"
End If
Next
' 如果k为"开",表示该工作表名在当前工作簿中尚未存在
If k = "开" Then
' 在当前工作簿中添加新的工作表,并命名为对应的部门名称
Sheets.Add after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = Sheets(1).Range("D" & i).Value
End If
Next
' 循环遍历所有工作表,根据部门名称拆分数据到对应的工作薄中
For Each sht In Sheets
If sht.Name <> Sheets(1).Name Then
' 使用AutoFilter筛选出对应部门名称的数据,并复制到目标工作表中
Sheets(1).Range("1:1").AutoFilter Field:=4, Criteria1:=sht.Name
Sheets(1).Range("A1:F65535").Copy sht.Range("A1")
' 关闭AutoFilter
Sheets(1).Range("1:1").AutoFilter
End If
Next
' 提示用户输入保存路径
str = InputBox("请输入保存的路径: ")
' 循环遍历所有工作表,将每个工作表保存成独立的工作薄
For Each sht In Sheets
sht.Copy
' 将工作表另存为对应的文件名,并保存到指定的路径下
ActiveWorkbook.SaveAs Filename:=str & "\" & sht.Name & ".xlsx"
ActiveWorkbook.Close
Next
' 显示提示信息
MsgBox ("OK!")
' 打开屏幕更新
Application.ScreenUpdating = True
End Sub
拆分工具
Sub 拆分工具()
Dim sht As Worksheet
Dim sht2 As Worksheet
Dim sht3 As Worksheet
Dim sht4 As Worksheet
Dim i As Integer
Dim i2 As Integer
Dim str As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
' 删除无用表
For Each sht In Sheets
If sht.Name <> Sheets(1).Name Then
sht.Delete
End If
Next
' 设置开关判断表是否已经存在
i = InputBox("请输入依据第几列建表:")
For i2 = 2 To Sheets(1).Range("a65535").End(xlUp).Row
k = "开"
For Each sht2 In Sheets
If sht2.Name = Sheets(1).Cells(i2, i).Value Then
k = "关"
End If
Next
' 依据k值进行建表
If k = "开" Then
Sheets.Add after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = Sheets(1).Cells(i2, i).Value
End If
Next
' 将对应表上的记录复制粘贴
For Each sht3 In Sheets
If sht3.Name <> Sheets(1).Name Then
Sheets(1).Range("1:1").AutoFilter Field:=i, Criteria1:=sht3.Name
Sheets(1).Range("a1:f65535").Copy sht3.Range("a1")
End If
Next
' 保存到指定的路径
str = InputBox("请输入保存的路径:")
For Each sht4 In Sheets
If sht4.Name <> Sheets(1).Name Then
sht4.Copy
ActiveWorkbook.SaveAs Filename:=str & "\" & sht4.Name & ".xlsx"
ActiveWorkbook.Close
End If
Next
MsgBox ("ok!")
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
汇总
Sub 汇总()
Dim str As String
Dim str1 As String
Dim str2 As String
Dim i As Integer
Dim i2 As Integer
Dim wb As Workbook
Dim sht As Worksheet
Application.DisplayAlerts = False
Application.ScreenUpdating = False
' 将指定路径下的内容汇总到当前工作簿中
str = InputBox("请输入汇总的路径:")
str1 = Dir(str & "\*.xl*")
For i = 1 To 100
Set wb = Workbooks.Open(str & "\" & str1)
wb.Sheets(1).Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = Split(wb.Name, ".")(0)
wb.Close
' 再次从指定路径下取文件
str1 = Dir
' 循环结束程序
If str1 = "" Then
Exit For
End If
Next
'将所有工作表中的内容汇总到第一个工作表中
'先将sheet1的名称进行修改
Sheets(1).Name = "汇总"
' 设置表间循环进行复制粘贴
For i2 = 2 To Sheets.Count
x = Sheets(i2).Range("a65535").End(xlUp).Row
y = Sheets(1).Range("a65535").End(xlUp).Row + 1
'开始复制粘贴
Sheets(i2).Range("a2:h" & x).Copy Sheets(1).Range("a" & y)
Next
' 给汇总表添加表头
Sheets(2).Range("a1:h1").Copy Sheets(1).Range("a1")
'删除无用表
For Each sht In Sheets
If sht.Name <> Sheets(1).Name Then
sht.Delete
End If
Next
'保存到指定的路径
str2 = InputBox("请输入保存的路径:")
ThisWorkbook.Sheets(1).SaveAs Filename:=str2 & "\" & ThisWorkbook.Sheets(1).Name & ".xlsx"
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
第8题_汇总
Sub 汇总()
Dim str As String
Dim str1 As String
Dim i As Integer
Dim wb As Workbook
Dim sht As Worksheet
Application.DisplayAlerts = False
Application.ScreenUpdating = False
' 将指定路径下的内容汇总到当前工作簿中
str = InputBox("请输入汇总的路径:")
str1 = Dir(str & "\*.xl*")
For i = 1 To 10
Set wb = Workbooks.Open(str & "\" & str1)
wb.Sheets(1).Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = Split(wb.Name, ".")(0)
wb.Close
' 再次从指定路径下取文件
str1 = Dir
' 循环结束程序
If str1 = "" Then
Exit For
End If
Next
' 将所有工作表中的内容汇总到第一个工作表中
' 先将Sheet1的名称进行修改
Sheets(1).Name = "汇总"
' 设置表间循环进行复制粘贴
For i = 2 To Sheets.Count
x = Sheets(i).Range("A65535").End(xlUp).Row
y = Sheets(1).Range("A65535").End(xlUp).Row + 1
' 开始复制粘贴
Sheets(i).Range("A2:Q" & x).Copy Sheets(1).Range("A" & y)
Next
' 给汇总表添加表头
Sheets(2).Range("A1:Q1").Copy Sheets(1).Range("A1")
' 删除无用表
For Each sht In Sheets
If sht.Name <> Sheets(1).Name Then
sht.Delete
End If
Next
' 循环插入2张表
For i = 1 To 2 Step 1
Sheets.Add after:=Sheets(Sheets.Count) ' 在当前活动工作表后插入一张新表
Sheets(Sheets.Count).Name = "Sheet_" & i & "表"
Next
' 使用AutoFilter筛选出对应部门名称的数据,并复制到目标工作表中
Sheets(1).Range("1:1").AutoFilter Field:=7, Criteria1:=1
Sheets(1).Range("A1:Q65535").Copy Sheets("Sheet_1表").Range("A1")
' 关闭AutoFilter
Sheets(1).Range("1:1").AutoFilter
' 使用AutoFilter筛选出对应部门名称的数据,并复制到目标工作表中
Sheets(1).Range("1:1").AutoFilter Field:=7, Criteria1:=0
Sheets(1).Range("A1:Q65535").Copy Sheets("Sheet_2表").Range("A1")
' 关闭AutoFilter
Sheets(1).Range("1:1").AutoFilter
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub