臨時接到一個Excel表,要執行統計工作,手工做法很麻煩,應用VBA稍微熟悉一點。
很長時間不做的話就會陌生,寫一點記錄以備後查。
1、在一個模塊中定義結構體,用於記錄數據,一般是針對一行一個結構體。
'定義物料編碼的結構體
Public Type WZStruct
WLBM As String '物料編碼
WLZ As String '物料組
WLMS As String '物料描述
DW As String '單位
WLSum2017 As Single '計算統計的和
WLSum2018 As Single '計算統計的和
WLSum2019 As Single '計算統計的和
WL2017 As Integer '統計2017個數
WL2018 As Integer '統計2018個數
WL2019 As Integer '統計2019個數
End Type
Public WZYQCY(6639) As WZStruct '6639行數據
2、常用的操作記錄:
'補全信息
'先搜索2017表
Sheets("2017年消耗").Activate
For IFor = 1 To MaxFor
DoEvents
'1.取列表的物料編碼
WZYQCY(IFor).WLBM = ListBox1.List(IFor)
'搜索物料編碼所在的行
Set FindCellOK = Worksheets("2017年消耗").Columns("B").Find(what:=WZYQCY(IFor).WLBM)
If Not FindCellOK Is Nothing Then
'2.物料組
Range("A" + Trim(Str(FindCellOK.Cells.Row))).Select
WZYQCY(IFor).WLZ = Selection.Formula
'3.物料描述
Range("C" + Trim(Str(FindCellOK.Cells.Row))).Select
WZYQCY(IFor).WLMS = Selection.Formula
'4.單位
Range("D" + Trim(Str(FindCellOK.Cells.Row))).Select
WZYQCY(IFor).DW = Selection.Formula
'5.統計消耗量
'WZYQCY(IFor).WLSum = Application.SumIf(Sheets("2017年消耗").Range("B2:B4386"), WZYQCY(IFor).WLBM, Sheets("2017年消耗").Range("F2:F4386"))
'6.統計個數
'WZYQCY(IFor).WL2017 = Application.CountIf(Sheets("2017年消耗").Range("B2:B4386"), WZYQCY(IFor).WLBM)
End If
Next
3、一般可以錄製宏以後然後修改錄製的編碼,但是VBA裏面略有不同。
'插入形成的數據行
Sheets("小修1").Activate
For IFor = 1 To MaxFor
'插入一個新行
Range("A" + Trim(Str(IFor + 2))).Select
Selection.Insert Shift:=xlDown
'更新數據
'序號
Range("A" + Trim(Str(IFor + 2))).Select
Selection.Formula = Str(IFor)
'物料組
Range("B" + Trim(Str(IFor + 2))).Select
Selection.Formula = WZYQCY(IFor).WLZ
'物料編碼
Range("C" + Trim(Str(IFor + 2))).Select
Selection.Formula = WZYQCY(IFor).WLBM
'物料描述
Range("D" + Trim(Str(IFor + 2))).Select
Selection.Formula = WZYQCY(IFor).WLMS
'單位
Range("E" + Trim(Str(IFor + 2))).Select
Selection.Formula = WZYQCY(IFor).DW
'2017年數據
Range("G" + Trim(Str(IFor + 2))).Select
Selection.Formula = WZYQCY(IFor).WL2017
'2018年數據
Range("H" + Trim(Str(IFor + 2))).Select
Selection.Formula = WZYQCY(IFor).WL2018
'2019年數據
Range("I" + Trim(Str(IFor + 2))).Select
Selection.Formula = WZYQCY(IFor).WL2019
Next