|
使用 range.find 的方法来做的查找
使用时,运行 CC 就行了
- Sub cc()
- Dim Arr(), Brr(), Nm As String, Wb As Workbook, Rng As Range
- Dim Sa As Long, Ea As Long, X As Long, Hx As Long
- With Sheets("Sheet1") '指定 操作的表
- Set Rng = .Range("A1:G1") '提取标题行
- X = .Range("A65536").End(xlUp).Row '提A列取最后一个非空行位置
- With .Range("A2:G" & X) '指定操作数据源
- Arr = .Value '将值放到数组,后面会重新写回到单元格
- .Sort .Cells(1, 1), 1 '排序
- For Hx = 1 To UBound(Arr) '在数组中循环
- Nm = ThisWorkbook.Path & "" & Arr(Hx, 1) & ".xls" '设置文件保存路径及 文件名称 .xls 是后面另存时设置的格式
- If Len(Dir(Nm)) > 0 Then Kill Nm '如果文件已经存在,则删除已存在的文件
- Sa = Ro(Arr(Hx, 1), 1) '提取 第一个数据位置
- Ea = Ro(Arr(Hx, 1), 2) '提取 最后一个数据位置
- Brr = Range(Cells(Sa, "A"), Cells(Ea, "G")).Value '将数据区域放到数组
- Set Wb = Workbooks.Add(xlWBATWorksheet) '新建一个 工作薄
- Wb.SaveAs Nm, 56 '工作薄另存为 xls 格式
- With Wb.Sheets(1) '指定操作该工作薄的第一个工作表
- .Range("A1:G1").Value = Rng.Value '写入表头
- .Range("A2").Resize(UBound(Brr), UBound(Brr, 2)).Value = Brr '写入数据
- .Range("B2").Resize(UBound(Brr), UBound(Brr, 2) - 2).Style = "Percent" '设置 单元格格式 %
- End With
- Wb.Close True '关闭文件并保存
- Hx = Ea '重置 hx 的值
- Next Hx
- .Value = Arr '将数据写回单元格,对于用作排序后数据还原
- End With
- End With
- MsgBox "数据拆分完毕!!"
- End Sub
- Private Function Ro(ByVal Zhi As String, Fx As Byte) '根据参数查找 数据位置
- Ro = Sheet1.Range("A:A").Find(Zhi, , , 1, , Fx).Row
- End Function
复制代码 |
|