本帖最后由 弘仁 于 2015-8-13 22:31 编辑
各位前辈:
请帮忙优化下代码,谢谢!
Sub 格式转换()Dim col_cnt, row_cnt As Integer
Dim qty As Double
On Error GoTo err_processing
row_cnt = 3
While ThisWorkbook.Sheets("中转").Cells(row_cnt, 1) <> ""
row_cnt = row_cnt + 1
Wend
row_cnt = row_cnt - 1
Debug.Print col_cnt, row_cnt
ThisWorkbook.Sheets("输出").Cells(1, 1) = "客户"
ThisWorkbook.Sheets("输出").Cells(1, 2) = "零件号"
ThisWorkbook.Sheets("输出").Cells(1, 3) = "日期"
ThisWorkbook.Sheets("输出").Cells(1, 4) = "数量"
k = 2
For i = 3 To row_cnt
For j = 3 To col_cnt
qty = ThisWorkbook.Sheets("中转").Cells(i, j)
If ThisWorkbook.Sheets("中转").Cells(i, 2) = 0 Then
Exit For
End If
' If qty = 0 Then
' GoTo next_j
' End If
ThisWorkbook.Sheets("输出").Cells(k, 1) = UCase(ThisWorkbook.Sheets("中转").Cells(i, 1))
ThisWorkbook.Sheets("输出").Cells(k, 2) = UCase(ThisWorkbook.Sheets("中转").Cells(i, 2))
ThisWorkbook.Sheets("输出").Cells(k, 3) = ThisWorkbook.Sheets("中转").Cells(2, j)
ThisWorkbook.Sheets("输出").Cells(k, 4) = qty
k = k + 1
next_j:
Next j
Next i
ThisWorkbook.Sheets("输出").Select
Columns("C:C").Select
Selection.NumberFormatLocal = "yyyymmdd"
Cells.Select
Selection.ColumnWidth = 16
GoTo sub_end
sub_end:
End Sub
Sub Macro1()
Dim arr, brr, i&, j&, k%, s&
arr = Sheet1.Range("a1").CurrentRegion
ReDim brr(1 To 60000, 1 To 4)
For i = 3 To UBound(arr)
For j = 3 To UBound(arr, 2)
If arr(i, j) > 0 Then
n = arr(2, j)
x = arr(i, j) \ n: y = arr(i, j) Mod n
For k = 0 To n - 1
s = s + 1
brr(s, 1) = arr(i, 1)
brr(s, 2) = arr(i, 2)
brr(s, 3) = DateAdd("d", k, arr(1, j))
brr(s, 4) = IIf(k = 0, x + y, x)
Next
End If
Next
Next
Sheet2.Activate
ActiveSheet.UsedRange.ClearContents
[a1:d1] = Array("客户", "零件号", "日期", "数量")
Range("a2").Resize(s, 4) = brr
End Sub
|