excel根据条件列转行_Excel vba-根据不同筛选条件筛选后,拆分成新的excel工作簿...

本文介绍了一个使用VBA自动化Excel的工作案例,通过代码实现了根据A列单位名称筛选数据,创建新的Excel工作簿并按C列命名,每个工作簿包含交易、往来、现金流三个工作表,大大提高了工作效率。
摘要由CSDN通过智能技术生成

以下代码为工作中的真实案例(不是真实数据~~~),本人是销售方,每季度都要和关联方进行对账,这工作量大的可怕估计有五六十家关联方,我又不能把所有数据都发送给关联方,最好是根据每个关联方的名字来进行筛选,然后将交易、往来、现金流三个表格的数据发送给对方。这样每家就只能看到每家的数据,我也不用重复做工作,筛选然后复制,要新建60个工作表,每家要粘贴三遍,那就是180遍~~我感觉我几天就没有了~~~

为了增加我工作效率,我研究了一晚上,写了以下代码。

新建一个excel,在sheet1里A列列明要查找的单位名称,C列则用来对新建的excel命名,用于区分是服务还是生产类公司。sheet2里复制粘贴“交易”数据,sheet3复制粘贴“往来”数据,sheet4“复制粘贴现金流”数据。在sheet1里新建了一个commandbutton。输入以下代码。

c681d66fe2bc3cd1ed3a22898b61751b.png

5e4b974fd4149fb1cb5b486d45624848.png
代码
Private Sub CommandButton1_Click()
Dim iPath$, ifilename$, iName$, ibook As Workbook
Dim i, n
Dim myNewWorkbook As Integer ' 定义新workbook为整数
Dim shname As Variant

以上为定义各个变量

For n = 2 To Application.WorksheetFunction.CountA(Range("A:A"))

此句为设定n为2到a列最后一个非空单元格的行数

ifilename = Sheet1.Cells(n, 3)

将sheet1里c列的单元值赋值给新建工作簿名字

shname = Array("交易", "往来", "现金流")
myNewWorkbook = Application.SheetsInNewWorkbook '新生成的工作簿里面的sheet
Application.SheetsInNewWorkbook = 3 '定义新工作簿里有3个sheet
Set ibook = Workbooks.Add '新增一个worksheet
With ibook
For i = 1 To 3
With .Sheets(i)
     .name = shname(i - 1)
End With
Next i   '将三个工作sheet命名到新workbook中

将交易往来现金流赋值给shname

定义新的工作簿里有三张工作表

新增一个工作表

定义i从1到3

此过程为实现新建个工作簿按照c列命名,并建立三张工作表,分别命名为交易、往来、现金流

ThisWorkbook.Activate
iName = ThisWorkbook.Sheets(1).Cells(n, 1)
ActiveWorkbook.Sheets(2).Select
With Selection
             .AutoFilter
             .AutoFilter field:=6, Criteria1:=iName
             .CurrentRegion.Select
             .SpecialCells(xlCellTypeVisible).Copy
End With
.Sheets(1).Range("A1").PasteSpecial xlPasteColumnWidths
.Sheets(1).Range("A1").PasteSpecial xlPasteAll


ThisWorkbook.Activate
iName = ThisWorkbook.Sheets(1).Cells(n, 1)
ActiveWorkbook.Sheets(3).Select
With Selection
             .AutoFilter
             .AutoFilter field:=6, Criteria1:=iName
             .CurrentRegion.Select
             .SpecialCells(xlCellTypeVisible).Copy
End With
.Sheets(2).Range("A1").PasteSpecial xlPasteColumnWidths
.Sheets(2).Range("A1").PasteSpecial xlPasteAll


ThisWorkbook.Activate
iName = ThisWorkbook.Sheets(1).Cells(n, 1)
ActiveWorkbook.Sheets(4).Select
With Selection
             .AutoFilter
             .AutoFilter field:=5, Criteria1:=iName
             .CurrentRegion.Select
             .SpecialCells(xlCellTypeVisible).Copy
.Sheets(3).Range("A1").PasteSpecial xlPasteColumnWidths
.Sheets(3).Range("A1").PasteSpecial xlPasteAll

以上三段为基本相同的语句,将a列单元格作为筛选条件,命名给iname,选中sheet2中所有单元格,筛选,第6个,条件为a列条件,复制可视单元格,粘贴新的工作簿中的sheet1。以此类推

.SaveAs Filename:=ThisWorkbook.Path & "" & ifilename & ".xlsx"
.Close Savechanges:=True
End With
Next n
End Sub

粘贴格式至新的工作表,粘贴内容至新的工作表,存储新的工作簿至本表相同路径下,关闭工作簿

使用 VBA 可以轻松地将 Excel 表格中筛选的内容保存成新表。 以下是一个简单的示例,演示如何使用 VBAExcel 表格中筛选的内容保存成新表: ```vba Sub FilterAndSave() ' 定义变量 Dim wb As Workbook Dim ws As Worksheet Dim new_ws As Worksheet Dim filter_range As Range Dim last_row As Long ' 打开当前工作簿 Set wb = ThisWorkbook ' 选择要筛选工作表 Set ws = wb.Worksheets("Sheet1") ' 定义筛选范围并执行筛选操作 Set filter_range = ws.Range("A1:D10") filter_range.AutoFilter Field:=1, Criteria1:="筛选条件" ' 创建新工作表并将筛选结果复制到新工作表 Set new_ws = wb.Worksheets.Add last_row = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row filter_range.SpecialCells(xlCellTypeVisible).Copy Destination:=new_ws.Range("A1") ' 关闭自动筛选 ws.AutoFilterMode = False ' 保存新工作表并关闭 new_ws.Name = "筛选结果" new_ws.Activate ActiveWorkbook.SaveAs Filename:="筛选结果.xlsx", FileFormat:=xlOpenXMLWorkbook ActiveWorkbook.Close End Sub ``` 上面的代码中,`Set ws = wb.Worksheets("Sheet1")` 用于选择要筛选工作表。`Set filter_range = ws.Range("A1:D10")` 定义了筛选范围,可以根据实际情况进行修改。`filter_range.AutoFilter Field:=1, Criteria1:="筛选条件"` 用于执行筛选操作,其中 `Field` 参数表示要筛选号,`Criteria1` 参数表示筛选条件。`Set new_ws = wb.Worksheets.Add` 用于创建新工作表,`filter_range.SpecialCells(xlCellTypeVisible).Copy Destination:=new_ws.Range("A1")` 将筛选结果复制到新工作表中。最后,`ActiveWorkbook.SaveAs Filename:="筛选结果.xlsx", FileFormat:=xlOpenXMLWorkbook` 用于保存新工作表为一个新的 Excel 文件。 需要注意的是,上述代码中的 `Sheet1` 和 `筛选条件` 需要根据你的具体情况进行替换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值