首页 » 软件开发 » [技术]VBA钢铁企业权威库存数据自动取数与分析报表程序分享(行数变量库存物料大类)

[技术]VBA钢铁企业权威库存数据自动取数与分析报表程序分享(行数变量库存物料大类)

南宫静远 2024-07-24 11:27:19 0

扫一扫用手机浏览

文章目录 [+]

PrivateSub CommandButton6_Click() '库存执行按钮

'删除库存数据中得空行及空列

Dim LastRow As Long, 空行 As Long

[技术]VBA钢铁企业权威库存数据自动取数与分析报表程序分享(行数变量库存物料大类) 软件开发
(图片来自网络侵删)

Dim LastColumn As Long, 空列 As Long

Application.DisplayAlerts = False

Application.ScreenUpdating = False

LastRow = ActiveSheet.UsedRange.Rows.Count

LastRow = LastRow + ActiveSheet.UsedRange.Row - 1

For 空行 = LastRow To 1 Step -1

If WorksheetFunction.CountA(Rows(空行)) = 0 Then Rows(空行).Delete

Next 空行

LastColumn = ActiveSheet.UsedRange.Columns.Count

LastColumn = LastColumn + ActiveSheet.UsedRange.Column

For 空列 = LastColumn To 1 Step -1

If WorksheetFunction.CountA(Columns(空列)) = 0 Then Columns(空列).Delete

Next 空列

'将库存数据第一行所有空格去掉!

Rows("1:1").Select

Selection.Replace What:=" ", Replacement:="", LookAt:=xlPart, _

SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _

ReplaceFormat:=False

'判断有效数据的行数及列数,并把最后一行和前两列删除!

Dim 有效行数, 有效列数

有效行数 = Sheet1.UsedRange.Rows.Count '取数据的有效行数

有效列数 = Sheet1.UsedRange.Columns.Count '取数据有效列数

Rows(有效行数).EntireRow.Delete '删除库存临时表最后行

'Rows(有效行数 - 1).EntireRow.Delete

Range("A:A,B:B").Select '删除A、B两列

Selection.Delete Shift:=xlToLeft

'将物料编码列变成文本格式

Dim 文本格式&

'文本格式 = Application.ActiveSheet.UsedRange.Rows.Count

'Rows(i).Delete

Range("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _

TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _

Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _

:=Array(1, 2), TrailingMinusNumbers:=True

'在库存表增加3列,用存放“物料编码大类”、“计划员”、“备件类别”三列数据!

Columns("B:D").Select

Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

Range("B1").Select

ActiveCell.FormulaR1C1 = "物料编码大类"

Range("C1").Select

ActiveCell.FormulaR1C1 = "计划员"

Range("D1").Select

ActiveCell.FormulaR1C1 = "备件类别"

Range("B1:D1").Select

With Selection.Interior

.Pattern = xlSolid

.PatternColorIndex = xlAutomatic

.Color = 65535

.TintAndShade = 0

.PatternTintAndShade = 0

End With

Range("B8").Select

Columns("B:B").ColumnWidth = 6.13

Columns("C:C").ColumnWidth = 5.88

Columns("D:D").ColumnWidth = 8.13

Columns("G:G").ColumnWidth = 6.25

Columns("H:H").ColumnWidth = 5.75

Columns("D:D").ColumnWidth = 5.75

'取物料编码大类:若物料编码为10位数,则取该编码的前四位数;若物料编码13位且为开头为B0—B6位数,则取该编码的前两位数;

'若物料编码为13位数且为B999开头,则取该编码的前五位数;

有效行数 = Sheet1.UsedRange.Rows.Count

Dim 行数变量 As Long

'插入进度条

For 行数变量 = 2 To 有效行数 Step 1

DoEvents

ProgressBar1.Value = 行数变量 '进度条步行

ProgressBar1.Max = 有效行数 '进度条最大值设置

Label2.Caption = "正在进行物料大类码处理,请稍后..........."

'取物料大类码程序

If Len(Range("A" & 行数变量)) = 10 Then

Range("B" & 行数变量) = Mid(Range("A" & 行数变量), 1, 4)

ElseIf Len(Range("A" & 行数变量)) = 13 And Left(Range("A" & 行数变量), 2) = "B0" Then

Range("B" & 行数变量) = Mid(Range("A" & 行数变量), 1, 2)

ElseIf Len(Range("A" & 行数变量)) = 13 And Left(Range("A" & 行数变量), 2) = "B1" Then

Range("B" & 行数变量) = Mid(Range("A" & 行数变量), 1, 2)

ElseIf Len(Range("A" & 行数变量)) = 13 And Left(Range("A" & 行数变量), 2) = "B2" Then

Range("B" & 行数变量) = Mid(Range("A" & 行数变量), 1, 2)

ElseIf Len(Range("A" & 行数变量)) = 13 And Left(Range("A" & 行数变量), 2) = "B3" Then

Range("B" & 行数变量) = Mid(Range("A" & 行数变量), 1, 2)

ElseIf Len(Range("A" & 行数变量)) = 13 And Left(Range("A" & 行数变量), 2) = "B4" Then

Range("B" & 行数变量) = Mid(Range("A" & 行数变量), 1, 2)

ElseIf Len(Range("A" & 行数变量)) = 13 And Left(Range("A" & 行数变量), 2) = "B5" Then

Range("B" & 行数变量) = Mid(Range("A" & 行数变量), 1, 2)

ElseIf Len(Range("A" & 行数变量)) = 13 And Left(Range("A" & 行数变量), 2) = "B6" Then

Range("B" & 行数变量) = Mid(Range("A" & 行数变量), 1, 2)

ElseIf Len(Range("A" & 行数变量)) = 13 And Left(Range("A" & 行数变量), 4) = "B999" Then

Range("B" & 行数变量) = Mid(Range("A" & 行数变量), 1, 6)

ElseIf Len(Range("A" & 行数变量)) = 13 Then

Range("B" & 行数变量) = Mid(Range("A" & 行数变量), 1, 3)

Else

End If

Next

'根据物料编码大类,取物料大类与计划员、备件类别对应关系

Dim e, sr, sl As Integer

With Sheets("临时表")

'sl = .Range("a65536").End(3).Row '进度条最大值设置

'插入进度条

For e = 2 To 有效行数

DoEvents

ProgressBar1.Value = e '进度条步行

ProgressBar1.Max = 有效行数 '进度条最大值设置

Label2.Caption = "正在进行物料类码与计划员、备件类别对应关系处理,请稍后....."

sr = Cells(e, 2)

Cells(e, 3) = Sheets("物料大类与计划员、备件类别关系").Cells.Find(sr, , , 1).Offset(0, 1)

Cells(e, 4) = Sheets("物料大类与计划员、备件类别关系").Cells.Find(sr, , , 2).Offset(0, 2)

Next

End With

'库存数据统计:分别为按照大类统计库存、按照计划员统计库存、按照备件类别统计库存

Dim arr, brr(1 To 10000, 1 To 5), crr(1 To 10000, 1 To 4), drr(1 To 10000, 1 To 4)

Dim i As Long, j As Long, k As Long, m As Long, n As Long, l As Long, f As Long

Dim d1, d2, d3, s1, s2

Set d1 = CreateObject("scripting.dictionary")

Set d2 = CreateObject("scripting.dictionary")

Set d3 = CreateObject("scripting.dictionary")

arr = Sheets("临时表").Range("a1").CurrentRegion

'插入进度条处理

Dim jdt2%

For jdt2 = 2 To 有效行数 'UBound(arr)

DoEvents

ProgressBar1.Max = 有效行数 'UBound(arr) '设置进度条控件的最大值

ProgressBar1.Value = jdt2 '进度条控件对象的当前值 '用它插入到运行程序的各处。

Label2.Caption = "正在进行库存数据统计处理,请稍后......"

Next

'统计库存数据程序

For i = 2 To UBound(arr)

If d1.exists(arr(i, 2)) Then

m = d1(arr(i, 2))

brr(m, 4) = brr(m, 4) + arr(i, 9) '8

brr(m, 5) = brr(m, 5) + arr(i, 12) '11

Else

j = j + 1

d1(arr(i, 2)) = j

brr(j, 1) = j

brr(j, 2) = arr(i, 2)

brr(j, 3) = arr(i, 3)

brr(j, 4) = arr(i, 9) '8

brr(j, 5) = arr(i, 12) '11

End If

If d2.exists(arr(i, 3)) Then

n = d2(arr(i, 3))

crr(n, 3) = crr(n, 3) + Round(arr(i, 9), 0)

crr(n, 4) = crr(n, 4) + arr(i, 12)

Else

k = k + 1

d2(arr(i, 3)) = k

crr(k, 1) = k

crr(k, 2) = arr(i, 3)

crr(k, 3) = arr(i, 9)

crr(k, 4) = arr(i, 12)

End If

If d3.exists(arr(i, 4)) Then

l = d3(arr(i, 4))

drr(l, 3) = drr(l, 3) + Round(arr(i, 9), 0)

drr(l, 4) = drr(l, 4) + arr(i, 12)

Else

f = f + 1

d3(arr(i, 4)) = f

drr(f, 1) = f

drr(f, 2) = arr(i, 4)

drr(f, 3) = arr(i, 9)

drr(f, 4) = arr(i, 12)

End If

Next

For i = 1 To j

brr(i, 5) = Round(brr(i, 5) / 10000, 2)

s1 = s1 + brr(i, 4)

s2 = s2 + brr(i, 5)

Next

brr(j + 1, 1) = "合计"

brr(j + 1, 4) = s1

brr(j + 1, 5) = s2

s1 = 0: s2 = 0

For i = 1 To k

crr(i, 4) = Round(crr(i, 4) / 10000, 2)

s1 = s1 + crr(i, 3)

s2 = s2 + crr(i, 4)

Next

crr(k + 1, 1) = "合计"

crr(k + 1, 3) = s1

crr(k + 1, 4) = s2

s1 = 0: s2 = 0

For i = 1 To f

drr(i, 4) = Round(drr(i, 4) / 10000, 2)

s1 = s1 + drr(i, 3)

s2 = s2 + drr(i, 4)

Next

drr(f + 1, 1) = "合计"

drr(f + 1, 3) = s1

drr(f + 1, 4) = s2

With Sheets("按照大类统计库存汇总表")

.Range("a3:e65536").ClearContents

.Range("a3").Resize(j + 1, 5) = brr

End With

With Sheets("按照计划员统计库存汇总表")

.Range("a3:d65536").ClearContents

.Range("a3").Resize(k + 1, 4) = crr

End With

With Sheets("按照备件类别统计库存汇总表")

.Range("a3:d65536").ClearContents

.Range("a3").Resize(f + 1, 4) = drr

End With

Label2.Caption = "库存数据统计已完成......"

有效行数 = Sheet1.UsedRange.Rows.Count

有效行数101 = Sheet2.UsedRange.Rows.Count

Label3.Caption = "本次执行的库存行数据共有" & 有效行数 - 1 & "条,库存总金额共计" & Sheets("按照大类统计库存汇总表").Cells(有效行数101, 5) & "万元,请您校验!"

MsgBox "恭喜您,库存数据统计完成"

Application.ScreenUpdating = True

Application.DisplayAlerts = True

End Sub

Private Sub CommandButton6_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)

CommandButton6.BackColor = &H8000000D

End Sub

Private Sub CommandButton7_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single) '库存执行按钮

CommandButton7.BackColor = &H8000000D

End Sub

标签:

相关文章

语言中的借用,文化交融的桥梁

自古以来,人类社会的交流与发展离不开语言的传播。在漫长的历史长河中,各民族、各地区之间的文化相互碰撞、交融,产生了许多独特的语言现...

软件开发 2025-01-01 阅读1 评论0

机顶盒协议,守护数字生活的新卫士

随着科技的飞速发展,数字家庭逐渐走进千家万户。在这个时代,机顶盒成为了连接我们与丰富多彩的数字世界的重要桥梁。而机顶盒协议,作为保...

软件开发 2025-01-01 阅读1 评论0

语言基础在现代社会的重要性及方法步骤

语言是人类沟通的桥梁,是社会发展的基础。语言基础作为语言学习的基石,对于个人、社会乃至国家的发展具有重要意义。本文将从语言基础在现...

软件开发 2025-01-01 阅读2 评论0

粤语电影,传承文化,点亮时代之光

粤语电影,作为中国电影产业的一朵奇葩,以其独特的地域特色、丰富的文化内涵和鲜明的艺术风格,赢得了广大观众的喜爱。本文将从粤语电影的...

软件开发 2025-01-01 阅读5 评论0

苹果游戏语言,塑造未来娱乐体验的基石

随着科技的飞速发展,游戏产业逐渐成为全球娱乐市场的重要支柱。在我国,游戏产业更是蓬勃发展,吸引了无数玩家和投资者的目光。而在这其中...

软件开发 2025-01-01 阅读1 评论0