人法地,地法天,天法道,道法自然
分类:
2009-07-03 16:01:14
昨天有个网友在对excel操作时,将每个款号的对应栏位的数据要调到同一行单元格中,再打印,由于数据量大,排版时太麻烦。而该excel文件是由进销存系统导出,生成的文件也是定制了。为此可写一段VBA代码来快速处理。
其处理思想如下:
1、 将原始文件复制一份到另一个Sheet表中命名为[原始文件的复件];保持原始数据不变;
2、 对复制的Sheet表[原始文件的复件],将空行删除使之不再有空行,这样便于VBA处理;
3、 对Sheet表[原始文件的复件]中的数据处理,生成新的Sheet表[进销存打印排版];
VBA代码如下:
Sub 进销存排版打印()
Dim i, j, k, n, s, e, p As Integer Dim lastRows As Long Dim nowRow As Long Dim num As Integer
Application.ScreenUpdating = False '屏蔽屏幕更新 ' lastRows = Sheets("Sheet1").[A65536].End(xlUp).Row '获取数据范围
num = Sheets.Count '统计工作表个数 For i = 1 To num If Sheets(i).Name = "进销存打印排版" Then '如果存在工作表[进销存打印排版],删除,重新建立 Sheets(i).Delete Exit For End If Next i
num = Sheets.Count '统计工作表个数 For i = 1 To num If Sheets(i).Name = "原始文件的复件" Then '如果存在工作表[原始文件的复件],删除,重新建立 Sheets(i).Delete Exit For End If Next i
Worksheets.Add '增加一个新的Sheet表,用来存储原始数据,其作用是不影响原来的数据,这样可以进行对比 ActiveSheet.Name = "原始文件的复件" Worksheets.Add '增加一个新的Sheet表,用来存放处理后的原始文件,也是最终要打印的文件 ActiveSheet.Name = "进销存打印排版"
'将Sheet1中的数据复制到[原始文件的复件]表中 Sheets("Sheet1").Select Cells.Select Selection.Copy
Sheets("原始文件的复件").Select Range("A1").Select ActiveSheet.Paste Range("A7").Value = "将Sheet1中的数据复制到此表中" Range("A8").Value = "得到数据后将空行删除" Range("A1").Select
'复制后获取数据范围 LastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
' Sheets("原始文件的复件").Activate
'将空行删除 With Application .Calculation = xlCalculationManual .ScreenUpdating = False '将屏幕更新关掉
For nowRow = LastRow To 1 Step -1 If Application.WorksheetFunction.CountA(Rows(nowRow)) = 0 Then Rows(nowRow).Delete End If Next nowRow .Calculation = xlCalculationAutomatic .ScreenUpdating = True End With
Application.ScreenUpdating = False '屏蔽屏幕更新
Sheets("Sheet1").Activate
Range("A1").Select '将表头复制到Sheet3工作簿中 Sheets("Sheet1").Range("A1:I9").Copy Sheets("进销存打印排版").Paste Destination:=Sheets("进销存打印排版").Range("A1") j = 9 '写入[进销存打印排版]中的起始位置的前一行 lastRows = Sheets("Sheet1").[A65536].End(xlUp).Row
With Worksheets("进销存打印排版")
For i = 10 To lastRows Step 2
k = i + 1 j = j + 1
.Range("A" & j).Value = Sheets("原始文件的复件").Range("A" & i).Value '地点/款号 .Range("B" & j).Value = Sheets("原始文件的复件").Range("B" & k).Value '承上 .Range("C" & j).Value = Sheets("原始文件的复件").Range("C" & k).Value '购货 .Range("D" & j).Value = Sheets("原始文件的复件").Range("D" & k).Value '销售 .Range("E" & j).Value = Sheets("原始文件的复件").Range("E" & k).Value '消耗 .Range("F" & j).Value = Sheets("原始文件的复件").Range("F" & k).Value '更正 .Range("G" & j).Value = Sheets("原始文件的复件").Range("G" & k).Value 'D_IN .Range("H" & j).Value = Sheets("原始文件的复件").Range("H" & k).Value 'D_OUT .Range("I" & j).Value = Sheets("原始文件的复件").Range("I" & k).Value '结余
Next i
End With
Application.ScreenUpdating = True
ActiveWorkbook.Save '保存
End Sub |