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. 多进程回声服务器/客户端【linux】

    并发服务器端 #include <unistd.h> #include <stdio.h> #include <sys/wait.h> #include <c ...

  2. operator[],识别读操作和写操作

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  3. 利用国内镜像下载Android源码,并编译生成image镜像文件

    为了编译安卓源码,首先需要一个Linux,本次采用Ubuntu Kylin14.04,内核版本3.13.装在四核.4G内存.1T硬盘的虚拟机上查看内核版本号:$uname -all清华镜像地址清华镜像 ...

  4. NumberFormat

    package com.NumberFormat; import java.text.NumberFormat; public class Study01 { public static void m ...

  5. MoreEffectiveC++Item35(操作符)(条款5-8)

    条款5 对定制的"类型转换函数"保持警惕 条款6 区别increment/decrement操作符的前值和后置形式 条款7 千万不要重载&&,||,和,操作符 条款 ...

  6. 通过ssh证书远程登录

    在渗透中,经常会发现某管理员主机上保存了大量机器的公私钥用于ssh证书登录.这个时候可以通过这个证书进行远程登录. 先回顾下证书登录通常的配置方法 一.生成不带passphrase的公私钥证书实现免密 ...

  7. VERIFY DATABASE 正在异常终止。 (Microsoft SQL Server,错误: 3169)

    1.错误描述 标题: Microsoft SQL Server Management Studio ------------------------------ 备份介质验证失败: [文件: D:\S ...

  8. 开源一款资源分享与下载工具 —— 电驴(eMule)

    这里分享一款资源分享与下载工具--电驴,其实严格来说,应该叫电骡,这是我维护的版本,eMuleVeryCD版本,VeryCD是一个不错的资源分享网站:http://www.verycd.com/.大概 ...

  9. python使用wget下载网络文件

    wget是一个从网络上自动下载文件的自由工具.它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理. ubuntu 安装wget pip install wget 从网络或本地硬盘下载文件(并 ...

  10. JSCover(查看代码覆盖率)

    1. [文档](http://tntim96.github.io/JSCover/manual/manual.xml)1. [下载](https://sourceforge.net/projects/ ...