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信息提取之二的更多相关文章

  1. 浅谈Excel开发:二 Excel 菜单系统

    在开始Excel开发之前,需要把架子搭起来.最直接的那就是Excel里面的菜单了,他向用户直观的展现了我们的插件具有哪些功能.菜单出来之后我们就可以实现里面的事件和功能了.Excel菜单有两种形式,一 ...

  2. Python网络爬虫与信息提取(二)—— BeautifulSoup

    BeautifulSoup官方介绍: Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式. 官方 ...

  3. Excel催化剂开源第26波-Excel离线生成二维码条形码

    在中国特有环境下,二维码.条形码的使用场景非常广泛,因Excel本身就是一个非常不错的报表生成环境,若Excel上能够直接生成二维码.条形码,且是批量化操作的,直接一条龙从数据到报表都由Excel完成 ...

  4. 浅谈Excel开发:二 Excel 菜单系统(转)

    编辑器加载中...http://www.cnblogs.com/yangecnu/p/Excel-Menu-System-Introduction.html 在开始Excel开发之前,需要把架子搭起来 ...

  5. python应用_读取Excel数据【二】_二次封装之函数式封装

    目的:想要把对Excel文件读取做成一个通用的函数式封装,便于后续简单调用,隔离复杂性. 未二次封装前原代码: #coding=gbkimport osimport xlrdcurrent_path= ...

  6. 使用Open xml 操作Excel系列之二--从data table导出数据到Excel

    由于Excel中提供了透视表PivotTable,许多项目都使用它来作为数据分析报表. 在有些情况下,我们需要在Excel中设计好模板,包括数据源表,透视表等, 当数据导入到数据源表时,自动更新透视表 ...

  7. NPOI--操作Excel之利器(二)

    回顾上一章,我们已经看到了NPOI的强大,使用NOPI我们可以生成一份完整的Excel,包含公式,包含千分位,包含单元格的合并等.在项目中第一次使用到NOPI,所以难免会遇到很多问题,我们可以在这个网 ...

  8. C# 设置Excel超链接(二)

    简介 超链接能够快速地将当前文本或图片链接到指定目标地址,在日常办公中给我们提供了极大的便利.本文将介绍在C#语言中如何通过免费版组件对Excel表格添加超链接,示例中将包含以下要点: 1.添加链接到 ...

  9. NPOI 上传Excel功能(二)

    3.上传文件,写入log using DC.BE.Business.SYS; using DC.BE.Entity.ERP; using DC.BE.Entity.SAS; using DC.BE.E ...

随机推荐

  1. Prism 4 文档 ---第6章 高级MVVM场景

        在上一章中描述了如何通过将UI,表现逻辑,业务逻辑分别放到三个单独的类中(View,View Model,Model),实现这些类之间的交互(通过数据绑定,命令以及数据验证接口)以及实现一个策 ...

  2. Django WSGI,MVC,MTV,中间件部分,Form初识

    一.什么是WSGI? WEB框架的本质是一个socket服务端接收用户请求,加工数据返回给客户端(Django),但是Django没有自带socket需要使用 别人的 socket配合Django才能 ...

  3. C# 给窗体添加皮肤 - SkinEngine的应用

    C# 给窗体添加皮肤 - SkinEngine的应用   C#中利用 IrisSkin2.dll 所提供的控件 SkinEngine 来为窗体添加皮肤.这种方法最简单 具体步骤: .添加控件SkinE ...

  4. Kafka 单节点多Kafka Broker集群

    Kafka 单节点多Kafka Broker集群 接前一篇文章,今天搭建一下单节点多Kafka Broker集群环境. 配置与启动服务 由于是在一个节点上启动多个 Kafka Broker实例,所以我 ...

  5. ROS机器人操作系统官方教程、源码汇总

    1 wiki: http://wiki.ros.org/  2 code: https://github.com/ ---- 1 基础教程 https://github.com/ros/ros_tut ...

  6. java程序编写需注意的问题

    初学java,免不了很多注意事项 加分号 类名与文件名一致 javac fileName而非javac fileName.class ```java System.out.println(" ...

  7. 2017年 ACM Journal Latex templates 新模板生成 acmart.cls 文件

    假定你的文稿在:/user/acmart-master那么cd /user/acmart-masterlatex acmart.ins最后可得到acmart.cls.

  8. Linux服务器运行环境搭建(三)——MySQL数据库安装

    官网:http://www.mysql.com/ 官网下载地址:http://dev.mysql.com/downloads/mysql/ 说明:官网下载页面的“Select Platform” 选择 ...

  9. Centos6.x搭建lnmp环境

    查看系统版本 #cat /etc/redhat-release CentOS release 6.7 (Final) 配置静态ip #vi /etc/sysconfig/network-scripts ...

  10. HDU1800 hash+去前导0

    注意一:卡map的时间,但是好好写+运气还是可以卡过,哇...求人品爆发 注意二:去前导0,毕竟‘0’也有ASCII码 #include<cstdio> #include<cstdl ...