20181013xlVba导入成绩
Sub 导入成绩()
Const TargetSheet = "年级_原始成绩汇总"
Const DesSheet = "年级_本次成绩总表"
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim Wb As Workbook, Sht As Worksheet
Dim OpenWb As Workbook, OpenSht As Worksheet
Dim FilePath, FilePaths, SheetName
Dim dGoal As Object
Dim EndRow As Long, EndCol As Long
Dim Arr As Variant
Dim Id As String, Sbj As String, Key As String
Const START_COLUMN As Long = 3
Const START_ROW As Long = 1
Set dGoal = CreateObject("Scripting.Dictionary")
'读取外部文件的成绩
FilePaths = PickFilesArr("*.xls*")
If FilePaths(1) <> "NULL" Then
For Each FilePath In FilePaths
'Debug.Print FilePath
Set OpenWb = Application.Workbooks.Open(FilePath)
Set OpenSht = OpenWb.Worksheets(1)
With OpenSht
EndRow = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row
EndCol = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
Set Rng = .Range(.Cells(START_ROW, 1), .Cells(EndRow, EndCol))
Arr = Rng.Value
For i = LBound(Arr) + START_ROW To UBound(Arr)
Id = CStr(Arr(i, 1))
For j = LBound(Arr, 2) + START_COLUMN To UBound(Arr, 2)
Sbj = CStr(Arr(1, j))
Key = Id & ";" & Sbj
dGoal(Key) = Arr(i, j)
'Debug.Print Key; " "; Arr(i, j)
Next j
Next i
End With
OpenWb.Close
Next FilePath
Else
MsgBox "未选中任何文件!", vbInformation, "Information"
End If
'更新内部
Set Wb = Application.ThisWorkbook
For Each Sht In Wb.Worksheets
If Sht.Name Like "单科成绩_*" Then
With Sht
EndRow = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row
EndCol = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
Set Rng = .Range(.Cells(START_ROW, 1), .Cells(EndRow, EndCol))
Arr = Rng.Value
For i = LBound(Arr) + START_ROW To UBound(Arr)
Id = CStr(Arr(i, 1))
For j = LBound(Arr, 2) + START_COLUMN To UBound(Arr, 2)
Sbj = CStr(Arr(1, j))
Key = Id & ";" & Sbj
If dGoal.exists(Key) Then Arr(i, j) = dGoal(Key)
Next j
Next i
Rng.Value = Arr
End With
End If
Next Sht
'输出每人每科成绩,缺考的成绩为空
Set Sht = Wb.Worksheets(TargetSheet)
With Sht
.UsedRange.Offset(1, 3).ClearContents
EndRow = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row
EndCol = .Cells(1, .Cells.Columns.Count).End(xlToLeft).Column
For i = START_ROW + 1 To EndRow
Id = .Cells(i, 1).Text
For j = START_COLUMN + 1 To EndCol
Sbj = .Cells(1, j).Text
Key = Id & ";" & Sbj
If dGoal.exists(Key) Then
.Cells(i, j).Value = dGoal(Key)
Else
.Cells(i, j).Value = ""
End If
Next j
Next i
'插入排名公式
For j = START_COLUMN + 1 To EndCol
If .Cells(1, j).Value Like "*排" Then
Set Rng = .Range(.Cells(2, j), .Cells(EndRow, j))
Rng.FormulaR1C1 = "=IF(RC[-1]<>"""",RANK(RC[-1],R2C[-1]:R" & EndRow & "C[-1]),"""")"
ElseIf .Cells(1, j).Value = "总分" Then
Set Rng = .Range(.Cells(2, j), .Cells(EndRow, j))
Rng.FormulaR1C1 = "=IF(COUNTA(RC[-18],RC[-16],RC[-14],RC[-12],RC[-10],RC[-8],RC[-6],RC[-4],RC[-2])=9,SUM(RC[-18],RC[-16],RC[-14],RC[-12],RC[-10],RC[-8],RC[-6],RC[-4],RC[-2]),"""")"
End If
Next j
EndRow = .Cells.Find("*", .Cells(1, 1), xlValues, xlWhole, xlByRows, xlPrevious).Row
EndRow = .Cells.Find("*", .Cells(1, 1), xlValues, xlWhole, xlByRows, xlPrevious).Row
Set Rng = .Range(.Cells(1, 1), .Cells(EndRow, EndCol))
Arr = Rng.Value
End With
'复制成绩 去除公式
Set oSht = Wb.Worksheets(DesSheet)
With oSht
.Cells.ClearContents
Set Rng = .Range(.Cells(1, 1), .Cells(EndRow, EndCol))
Rng.Value = Arr
SetBorders .UsedRange
SetCenters .UsedRange
.UsedRange.Columns.AutoFit
'插入缺考标志
EndRow = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row
For i = 2 To EndRow
.Range("X1").Value = "是否缺考"
If Application.WorksheetFunction.CountA(.Cells(i, 4).Resize(1, 20)) < 20 Then
.Cells(i, "X").Value = "缺考"
End If
Next i
Const STUDENTS = ""
.Range("Y1").Value = "考生类别"
For i = 2 To EndRow
If InStr(STUDENTS, .Cells(i, 2).Value) > 0 Then
.Cells(i, "Y").Value = "其他"
End If
Next i
End With
Set Sht = Nothing
Set oSht = Nothing
Set Rng = Nothing
Set dGoal = Nothing
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Function PickFilesArr(Optional FileTypeFilter As String = "", Optional FileNameContain As String = "*", Optional FileNameNotContain As String = "") As String()
Dim FilePath As String
Dim Arr() As String
ReDim Arr(1 To 1)
Dim FileCount As Long
Dim i As Long
FileCount = 0
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = True
.InitialFileName = Application.ActiveWorkbook.Path
.Title = "请选择你需要的文件"
.Filters.Clear
If Len(FileTypeFilter) > 0 Then
.Filters.Add "您需要的文件类型", FileTypeFilter
End If
If .Show = -1 Then
Arr(1) = "NULL"
For i = 1 To .SelectedItems.Count
If .SelectedItems(i) Like FileNameContain Then
If Len(FileNameNotContain) = 0 Then
FileCount = FileCount + 1
ReDim Preserve Arr(1 To FileCount)
Arr(FileCount) = .SelectedItems(i)
Debug.Print Arr(FileCount)
Else
If Not .SelectedItems(i) Like FileNameNotContain Then
FileCount = FileCount + 1
ReDim Preserve Arr(1 To FileCount)
Arr(FileCount) = .SelectedItems(i)
End If
End If
End If
Next i
PickFilesArr = Arr
Else
'MsgBox "Pick no file!"
Arr(1) = "NULL"
PickFilesArr = Arr
Exit Function
End If
End With
End Function
20181013xlVba导入成绩的更多相关文章
- 20181013xlVba年级成绩报表
Public Sub 高一成绩报表() Application.ScreenUpdating = False Application.DisplayAlerts = False Application ...
- 20181013xlVba据成绩条生成图片文件
Sub CreateGoalPictures() '声明变量 Dim Wb As Workbook Dim Sht As Worksheet Dim Shp As Shape Dim Pic, End ...
- .Net之路(十三)数据库导出到EXCEL
.NET中导出到Office文档(word,excel)有我理解的两种方法.一种是将导出的文件存放在server某个目录以下,利用response输出到浏览器地址栏,直接打开:还有直接利用javasc ...
- .Net路(十三)导出数据库到EXCEL
.NET出口Office文件(word,excel)有两种方法我明白.一个存储在导出的文件中server录以下.利用response输出到浏览器地址栏,直接打开:还有直接利用javascript来导出 ...
- 20181013xlVba成绩报表优化
Public Sub 成绩报表优化() Application.ScreenUpdating = False Application.DisplayAlerts = False Application ...
- C# Excel导入、导出【源码下载】
本篇主要介绍C#的Excel导入.导出. 目录 1. 介绍:描述第三方类库NPOI以及Excel结构 2. Excel导入:介绍C#如何调用NPOI进行Excel导入,包含:流程图.NOPI以及C#代 ...
- [转]Java中导入、导出Excel
原文地址:http://blog.csdn.net/jerehedu/article/details/45195359 一.介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样 ...
- java的poi技术读取和导入Excel
项目结构: http://www.cnblogs.com/hongten/gallery/image/111987.html 用到的Excel文件: http://www.cnblogs.com/h ...
- 从零自学Hadoop(16):Hive数据导入导出,集群数据迁移上
阅读目录 序 导入文件到Hive 将其他表的查询结果导入表 动态分区插入 将SQL语句的值插入到表中 模拟数据文件下载 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并 ...
随机推荐
- Navicat for MySQL安装工具及破解工具
链接: http://pan.baidu.com/s/1i500eEh 密码: 9s26
- win10+vscode部署java开发环境
目录 Java开发插件配置: 调试: 快捷键: 启动配置文件launch.json: 启动配置说明: Launch: Attach: User Setting: 遇到的问题: 参考: Java开发插件 ...
- POJ-1038 Bugs Integrated, Inc. (状压+滚动数组+深搜 的动态规划)
本题的题眼很明显,N (1 <= N <= 150), M (1 <= M <= 10),摆明了是想让你用状态压缩dp. 整个思路如下:由于要填2*3或者3*2的芯片,那么就要 ...
- 【做题】arc072_f-Dam——维护下凸包
题意:有一个容量为\(L\)的水库,每天晚上可以放任意体积的水.每天早上会有一定温度和体积的水流入水库,且要保证流入水之后水的总体积不能超过\(L\).令体积分别为\(V_1,V_2\),温度分别为\ ...
- 【Spring Security】七、RememberMe配置
一.概述 RememberMe 是指用户在网站上能够在 Session 之间记住登录用户的身份的凭证,通俗的来说就是用户登陆成功认证一次之后在制定的一定时间内可以不用再输入用户名和密码进行自动登录.这 ...
- HDU 3333 Turing Tree(树状数组/主席树)
题意 给定一个长度为 \(n\) 的序列,\(m\) 个查询,每次查询区间 \([L,R]\) 范围内不同元素的和. \(1\leq T \leq 10\) \(1 \leq n\leq 300 ...
- printf和cout的区别详述
https://blog.csdn.net/ysayk/article/details/50959909
- FPGA软件使用基础之ISE下载配置 XILINX 下载器使用
重新编辑 转载于https://www.cnblogs.com/lpp2jwz/p/7306020.html 下载程序 下载BIT 格式程序到FPGA 先插好下载器 在 ISE 中编译完 BIT 文件 ...
- 51nod 1624 取余最长路
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1624 题意: 思路:因为一共只有3行,所以只需要确定第一行和第二行的转折 ...
- MongoDB数据库的基本操作
非关系型数据库(json数据库) npm install mongoose --save 启动数据酷: mongod --config /usr/local/etc/mongod.conf 这里可以将 ...