Excel信息提取之二
Sub 订单归纳()
Dim sh1 As Worksheet, sh2 As Worksheet, sh3 As Worksheet
Dim dic1 As Object, dic2 As Object
Dim arr, brr, crr
Dim wb As Workbook
Set wb = ActiveWorkbook
Set sh1 = wb.Sheets("订单")
Set sh2 = wb.Sheets("订单归纳")
Set dic1 = CreateObject("scripting.dictionary")
Set dic2 = CreateObject("scripting.dictionary")
Dend = sh1.Range("D65536").End(3).Row
For i = 4 To Dend
strA = sh1.Range("D" & i) & "--" & Split(sh1.Range("F" & i).Value, " ")(0)
If Not dic1.exists(strA) Then
dic1.Add strA, sh1.Range("I" & i)
Else
dic1(strA) = dic1(strA) + sh1.Range("I" & i)
End If
Next
A = dic1.keys: B = dic1.items
For i = 0 To UBound(A) ' dic.Count - 1
s1 = Split(A(i), "--")(0)
s2 = Mid(Split(A(i), "--")(1), 6) & "--" & B(i)
If Not dic2.exists(s1) Then
dic2.Add s1, s2
Else
p1 = Replace(Split(dic2(s1), "--")(0), "/", "-") & "/" & Replace(Mid(Split(A(i), "--")(1), 6), "/", "-") 'Split(s2, "--")(0)
p2 = Split(dic2(s1), "--")(1) & "+" & B(i) dic2(s1) = p1 & "--" & p2
End If
Next
A = dic2.keys: B = dic2.items
For i = 0 To UBound(A)
sh2.Range("A" & i + 2) = A(i)
sh2.Range("C" & i + 2).NumberFormatLocal = "m/d"
sh2.Range("C" & i + 2) = Split(B(i), "--")(0)
sh2.Range("B" & i + 2) = Split(B(i), "--")(1)
Next
End Sub Sub 配件归纳()
Dim sh1 As Worksheet, sh2 As Worksheet, sh3 As Worksheet
Dim dic1 As Object, dic2 As Object
Dim arr, brr, crr
Dim wb As Workbook
Set wb = ActiveWorkbook
Set sh1 = wb.Sheets("目录")
Set sh2 = wb.Sheets("订单归纳")
Set sh3 = wb.Sheets("配件归纳")
Set dic1 = CreateObject("scripting.dictionary")
Set dic2 = CreateObject("scripting.dictionary") sh3.Range("A2:Z10000").ClearContents
sh3.Range("A2:Z10000").UnMerge
Cend = sh1.Range("C65536").End(3).Row
For Each va In sh1.Range("C3:C" & Cend).Value
If va <> "" Then dic1.Add va, Application.WorksheetFunction.Match(va, sh1.Range("C:C").Value, 0)
Next Aend = sh2.Range("A65536").End(3).Row
For Each va In sh2.Range("A2:A" & Aend).Value
If dic1.exists(va) Then
co = Application.WorksheetFunction.Match(va, sh1.Range("C:C").Value, 0)
N = sh1.Range("C" & co).MergeArea.Count
sh1.Range("A" & co & ":I" & co + N - 1).Copy
en = sh3.Range("A65536").End(3).Row
en = sh3.Range("A" & en).MergeArea.Count - 1 + en
sh3.Range("A" & en + 1).Select
sh3.Range("A" & en + 1).PasteSpecial xlPasteAll
sh3.Range("B" & en + N).MergeArea.Delete (xlToLeft)
sh3.Range("I" & en + 1 & ":I" & en + N).Merge
sh3.Range("I" & en + 1).Value = Application.WorksheetFunction.VLookup(va, sh2.Range("A2:C" & Aend), 2)
he = 0
For Each s In Split(sh3.Range("I" & en + 1).Value, "+")
he = he + CLng(s)
Next
For i = 1 To N
sh3.Range("J" & i + en).Value = he
sh3.Range("L" & i + en).Value = "=K" & en + 1 & "-J" & en + 1
Next
sh3.Range("N" & en + 1 & ":N" & en + N).Merge
sh3.Range("N" & en + 1).Value = Application.WorksheetFunction.VLookup(va, sh2.Range("A2:C" & Aend), 3)
sh3.Range("N" & en + 1).NumberFormatLocal = "m/d"
sh3.Range("L" & en + 1).NumberFormatLocal = "G/通用格式"
sh3.Range("O" & en + 1 & ":O" & en + N).Merge
If InStr(sh3.Range("N" & en + 1).Value, "星期") = 0 And InStr(sh3.Range("N" & en + 1).Value, "/") > 0 Then
zh = ""
For Each strB In Split(sh3.Range("N" & en + 1).Value, "/")
zh = zh & "/" & Abs(DateDiff("d", CDate(strB), Now()))
Next
sh3.Range("O" & en + 1).Value = Mid(zh, 2)
Else
sh3.Range("O" & en + 1).Value = DateDiff("d", Split(sh3.Range("N" & en + 1), " ")(0), Now())
End If
'sh3.Range("O" & en + 1).
Else
sh3.Range("P2").Value = "目录中无此型号"
sh3.Range("P2").Interior.Color = 255
If sh3.Range("Q2").Value = "" Then
sh2.Range("A1:C1").Copy
sh3.Range("Q2").PasteSpecial xlPasteAll
End If
ro = Application.WorksheetFunction.Match(va, sh2.Range("A:A"), 0)
sh2.Range("A" & ro & ":C" & ro).Copy
Qend = sh3.Range("Q65536").End(3).Row
sh3.Range("Q" & Qend).PasteSpecial xlPasteAll
End If
Next
MsgBox "已完成!!!"
End Sub </pre><pre code_snippet_id="2300632" snippet_file_name="blog_20170330_3_5549772" name="code" class="vb"></pre><br>
<pre code_snippet_id="2300632" snippet_file_name="blog_20170330_4_4263017" name="code" class="vb">文件选择函数
Public Function ChooseOneFile(Optional TitleStr As String = "选择你要的文件", Optional TypesDec As String = "所有文件", Optional Exten As String = "*.*") As String
Dim dlgOpen As FileDialog
Set dlgOpen = Application.FileDialog(msoFileDialogFilePicker)
With dlgOpen
.Title = TitleStr
.Filters.Clear '清除所有的文件类型.
.Filters.Add TypesDec, Exten
.AllowMultiSelect = False '不能多选.
If .Show = -1 Then
' .AllowMultiSelect = True '多个文件
' For Each vrtSelectedItem In .SelectedItems
' MsgBox "Path name: " & vrtSelectedItem
' Next vrtSelectedItem
ChooseOneFile = .SelectedItems(1) '第一个文件
End If
End With
Set dlgOpen = Nothing
End Function
复制所有的东西:
Sheets("sheet3").Range("C2").CopyFromRecordset cn.Execute("select * from [数据2$]") '这里是将所有的都复制过来,若是特定的则需distinct
’设置日期格式:
Sheets("数据1").Columns("C:C").NumberFormatLocal = "yyyy-mm-dd"
Sheets("数据2").Columns("I:I").NumberFormatLocal = "G/通用格式"
直接从数据源复制数据:可实现汇总并去重;
Sheets("数据1").Range("A2").CopyFromRecordset cn.Execute("select distinct 产品名称,图号,完成日期 from [数据$A7:H10000]")
设置日期显示格式:
'完成日期.Value = Month(完成日期.Value) & "." & Day(完成日期.Value)
'完成日期.NumberFormatLocal = "G/通用格式"
完成日期.NumberFormatLocal = "m-d;@"
下面的使用方式非常精妙,将单元格的range进行设定,然后通过使用Excel公式的方式赋值,大大减小的代码量;
Set 图号 = Sheets("数据1").Range("B" & i)
Set 计划数量 = Sheets("数据1").Range("D" & i)
Set 完成日期 = Sheets("数据1").Range("C" & i)
Set 备注 = Sheets("数据1").Range("E" & i)
备注.Value = Application.WorksheetFunction.VLookup(图号.Value, Sheets("数据").Range("D:H"), 5, False)
计划数量.Value = "=SUMIFS(数据!E:E,数据!C:C,数据1!A" & i & ",数据!D:D,数据1!B" & i & ",数据!F:F,数据1!C" & i & ")"
计划数量.Value = 计划数量.Value ’这里的作用就是起到公式==>数值的作用;
删除指定条件的单元格行
If Sheets("数据1").Range("D" & i) = 0 Then Sheets("数据1").Rows(i).Delete
按条件筛选备注:
Sheets("数据2").Range("E" & i).CopyFromRecordset cn.Execute("select distinct 备注 from [数据$A7:H10000] where 图号 = '" & 图号 & "' and 产品名称 = '" & 产品名称 & "'")
按条件筛选日期:
Sheets("数据2").Range("G1").CopyFromRecordset cn.Execute("select distinct 完成日期 from [数据$A7:H10000] where 图号 = '" & 图号 & "' and 产品名称 = '" & 产品名称 & "' order by 完成日期")
下面方式直接得到的是值,而非输入的公式:
备注.Value = Application.WorksheetFunction.VLookup(图号.Value, Sheets("数据").Range("D:H"), 5, False)
'判断是否存在目录,否则就创建:
If Len(Dir(myFolder, vbDirectory)) = 0 Then
MkDir myFolder
End If
Excel输出图片的经典方法:
shp.CopyPicture
With ActiveSheet.ChartObjects.Add(0, 0, shp.Width, shp.Height).Chart
.Paste
.Export myFolder & nm, "JPG"
.Parent.Delete
End With
Excel信息提取之二的更多相关文章
- 浅谈Excel开发:二 Excel 菜单系统
在开始Excel开发之前,需要把架子搭起来.最直接的那就是Excel里面的菜单了,他向用户直观的展现了我们的插件具有哪些功能.菜单出来之后我们就可以实现里面的事件和功能了.Excel菜单有两种形式,一 ...
- Python网络爬虫与信息提取(二)—— BeautifulSoup
BeautifulSoup官方介绍: Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式. 官方 ...
- Excel催化剂开源第26波-Excel离线生成二维码条形码
在中国特有环境下,二维码.条形码的使用场景非常广泛,因Excel本身就是一个非常不错的报表生成环境,若Excel上能够直接生成二维码.条形码,且是批量化操作的,直接一条龙从数据到报表都由Excel完成 ...
- 浅谈Excel开发:二 Excel 菜单系统(转)
编辑器加载中...http://www.cnblogs.com/yangecnu/p/Excel-Menu-System-Introduction.html 在开始Excel开发之前,需要把架子搭起来 ...
- python应用_读取Excel数据【二】_二次封装之函数式封装
目的:想要把对Excel文件读取做成一个通用的函数式封装,便于后续简单调用,隔离复杂性. 未二次封装前原代码: #coding=gbkimport osimport xlrdcurrent_path= ...
- 使用Open xml 操作Excel系列之二--从data table导出数据到Excel
由于Excel中提供了透视表PivotTable,许多项目都使用它来作为数据分析报表. 在有些情况下,我们需要在Excel中设计好模板,包括数据源表,透视表等, 当数据导入到数据源表时,自动更新透视表 ...
- NPOI--操作Excel之利器(二)
回顾上一章,我们已经看到了NPOI的强大,使用NOPI我们可以生成一份完整的Excel,包含公式,包含千分位,包含单元格的合并等.在项目中第一次使用到NOPI,所以难免会遇到很多问题,我们可以在这个网 ...
- C# 设置Excel超链接(二)
简介 超链接能够快速地将当前文本或图片链接到指定目标地址,在日常办公中给我们提供了极大的便利.本文将介绍在C#语言中如何通过免费版组件对Excel表格添加超链接,示例中将包含以下要点: 1.添加链接到 ...
- NPOI 上传Excel功能(二)
3.上传文件,写入log using DC.BE.Business.SYS; using DC.BE.Entity.ERP; using DC.BE.Entity.SAS; using DC.BE.E ...
随机推荐
- Java复习5.面向对象
Java 复习5面向对象知识 20131004 前言: 前几天整理了C++中的面向对象的知识,学习Java语言,当然最重要的就是面向对象的知识,因为可以说Java是最正宗的面向对象语言,相比C++,更 ...
- 缓存LruCache简单创建和使用
LruCache一般使用: /** * 总容量为当前进程的1/8,单位:KB * sizeOf():计算缓存对象的大小,单位要一致 * entryRemoved():移除旧缓存时调用 */ int m ...
- 本地如何搭建IPv6环境测试你的APP(转)
IPv6的简介 IPv4 和 IPv6的区别就是 IP 地址前者是 .(dot)分割,后者是以 :(冒号)分割的(更多详细信息自行搜索). PS:在使用 IPv6 的热点时候,记得手机开 飞行模式 哦 ...
- Return type declarations返回类型声明
PHP 7.新增了返回类型声明 http://php.net/manual/en/functions.returning-values.php 在PHP 7.1中新增了返回类型声明为void,以及类型 ...
- Android中破解应用签名校验的后续问题处理方案(闪退和重启现象以及无效问题)
一.前言 之前已经写了一个爆破签名校验的工具kstools,很多同学也在使用,但是也反馈了不少问题,之前一篇文章也介绍了,关于爆破之后第三方登录问题修复,这篇我们在综合说明一下一些后遗症问题,关于ks ...
- 安全性测试AppScan工具使用实战20150920
Appscan是做安全性测试的一款工具,网上资料比较少,项目需要做安全性测试,用它做了web的扫描,可以发现一些问题,并且有原因分析和修复建议,感觉还不错,现在实战 1.打开工具,点击[文件]下的[新 ...
- Android MVC,MVP,MVVM模式入门——重构登陆注册功能
一 MVC模式: M:model,业务逻辑 V:view,对应布局文件 C:Controllor,对应Activity 项目框架: 代码部分: layout文件(适用于MVC和MVP两个Demo): ...
- UDP:rfc768/广播和多播/IGMP
封装情况:
- caffe学习笔记教程
1 官网:http://caffe.berkeleyvision.org/ 2 豆丁网中:http://www.docin.com/p-871820917.html 3 下载的caffe中,.../d ...
- 关于pycharm的激活码
http://kadara.ru:1017 http://roothat.ru:1017 http://jetbrains.tencent.clickn http://idea.imsxm.com/ ...