ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2111|回复: 11

[求助] CSV数据按要求“筛选”“分类”与“统计”

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-8-4 00:53 | 显示全部楼层 |阅读模式
各位大侠:
附件(TxSEIK.CSV  TxSEIK调整.CSV  TxSEIK(7月度内示比较)) 3个文件
第一步骤:打开TxSEIK.CSV对其进行筛选:
  • G列不等于生计的 行数全部删除
  • E列不等于S*(S开头)行数全部删除
  • E列等于S125 行数全部删除
  • E列等于S160 行数全部删除
  • E列等于S172 行数全部删除
  • E列按照升序进行排序
  • 输出当前目录 (文件名为 TxSEIK调整.CSV )  注:.CSV格式 要在保存类型里选择.CSV   {单纯指定.CSV  打开文件会提示格式与文件扩展名不符合}
第二步骤:继续在筛选过后的TxSEIK.CSV文件里进行
  • 在H列里向左边插入9列空白列
  • 指定H列第一行名字为:收容数    根据对应的项目编码(B列)去“TxSEIK(7月度内示比较)”套取相应的数据
  • 指定I列第一行名字为:当月的月份(变量)套取本身工作表Q~EH列对应月份的  总量
  • 指定J列第一行名字为:当月的月份+1月      套取本身工作表Q~EH列对应月份的  总量
  • 指定K列第一行名字为:上月发行(当月的月份) 去TxSEIK(7月度内示比较)  根据项目编码(B列)套取数据{固定I列}
  • 指定L列第一行名字为:上月发行(下月的月份) 去TxSEIK(7月度内示比较)  根据项目编码(B列)套取数据{固定J列}
  • 指定M列第一行名字为:当月份差异率   =(I8-K8)/K8
  • 指定N列第一行名字为:当月份+1月差异率  =(J8-L8)/L8
  • 指定O列第一行名字为:当月份差异箱数 =(I8-K8)/H8
  • 指定P列第一行名字为:当月份+1差异箱数 =(J8-L8)/H8
输出当前目录 (文件名为 TxSEIK(当月度内示比较.xsl )

时间有限,如有表述不清楚地方明天我再补充。




实例.zip

814.73 KB, 下载次数: 15

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-5 00:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
第二步骤描述有点问题,大侠们请移步至 http://club.excelhome.net/thread-1221650-1-1.html

TA的精华主题

TA的得分主题

发表于 2015-8-4 09:19 | 显示全部楼层
  1. Sub lqxs()
  2. Dim Arr, i&, myPath$, myName$, wb As Workbook, nm$
  3. Dim rng As Range
  4. Application.DisplayAlerts = False
  5. myPath = ThisWorkbook.Path & ""
  6. myName = "TxSEIK.csv"
  7. Workbooks.Open myPath & myName
  8. Set wb = ActiveWorkbook
  9. With wb.Sheets(1)
  10. Arr = .[a1].CurrentRegion
  11. For i = 2 To UBound(Arr)
  12.     If Arr(i, 7) = "生计" Then
  13.         If rng Is Nothing Then Set rng = .Rows(i) Else Set rng = Union(rng, .Rows(i))
  14.     Else
  15.         If Left(Arr(i, 5), 1) <> "S" Then
  16.             If rng Is Nothing Then Set rng = .Rows(i) Else Set rng = Union(rng, .Rows(i))
  17.         Else
  18.             If Arr(i, 5) = "S125" Or Arr(i, 5) = "S160" Or Arr(i, 5) = "S172" Then
  19.                 If rng Is Nothing Then Set rng = .Rows(i) Else Set rng = Union(rng, .Rows(i))
  20.             End If
  21.         End If
  22.     End If
  23. Next
  24. If Not rng Is Nothing Then rng.Delete Shift:=xlUp
  25. .[a1].CurrentRegion.Sort [e2], 1, Header:=xlYes
  26. End With
  27. nm = Split(myName, ".")(0) & "调整1.csv"
  28. wb.SaveAs myPath & nm, FileFormat:=xlCSV, CreateBackup:=False
  29. wb.Close False
  30. Application.DisplayAlerts = True
  31. MsgBox "OK"
  32. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2015-8-4 09:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
仅实现第一个问题。
请见附件。本附件需要放在实例文件夹里面。

筛选.rar

17.04 KB, 下载次数: 9

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-8-4 14:19 | 显示全部楼层
Sub cnn_db()
    Dim arr, brr, crr, drr, err, frr, MyPath$, MyName1$, Sql$, m%, n%, i%, k%, r%
    Dim cnn As Object
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    MyPath = ActiveWorkbook.Path & "\"
    MyName1 = "TxSEIK.CSV"
    MyName2 = "TxSEIK(7月度内示比较).XLS"
    Workbooks.Open Filename:=MyPath & MyName2
    r2 = Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row
    drr = Range("B2:B" & r2)
    err = Range("H2:J" & r2)
    Set d = CreateObject("scripting.dictionary")    '创建字典
    For j = 1 To r2 - 1
        d.Item(drr(j, 1)) = err(j, 1) & "_" & err(j, 2) & "_" & err(j, 3)    '修改关键字所对应的条目,如果不存在此关键字则自动添加此条目对
    Next
    ActiveWindow.Close True
    Workbooks.Open Filename:=MyPath & MyName1
    Set cnn = CreateObject("ADODB.Connection")
    cnn.Open "provider=microsoft.ace.oledb.12.0;extended properties=excel 12.0;data source=" & ActiveWorkbook.FullName
    Sql = " select * from [TxSEIK$] where [区分]=""生计"" and [制造担当] like 'S%' and [制造担当] <>""S125"" and [制造担当] <>""S160"" and [制造担当] <>""S172"" order by [制造担当]"
    Workbooks.Add
    Workbooks(MyName1).Worksheets(1).[a1:fi1].Copy ActiveWorkbook.Worksheets(1).[a1]
    ActiveWorkbook.Worksheets(1).[a2].CopyFromRecordset cnn.Execute(Sql)
    ActiveWorkbook.SaveAs Filename:=MyPath & Split(MyName1, ".")(0) & "调整.csv", FileFormat:=xlCSV
    cnn.Close
    Set cnn = Nothing
    Workbooks(MyName1).Close True
   
    '------------第二步的处理过程----------------
    Columns("H:P").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("M:N").NumberFormatLocal = "0.00%"
    Columns("O:P").NumberFormatLocal = "0.0_ "
    arr = Array("收容数", Month(Date) & "月", Month(DateAdd("m", 1, Date)) & "月", _
                "(" & Month(DateAdd("m", -1, Date)) & "月发行)" & Month(Date) & "月", _
                "(" & Month(DateAdd("m", -1, Date)) & "月发行)" & Month(DateAdd("m", 1, Date)) & "月", _
                Month(Date) & "月差异率", Month(DateAdd("m", 1, Date)) & "月差异率", _
                Month(Date) & "月差异箱数", Month(DateAdd("m", 1, Date)) & "月差异箱数")
    Range("H1:P1") = arr
    r = Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row
    brr = Range("Q1:EH" & r)
    frr = Range("B2:B" & r)
    m = 0
    n = 0
    ReDim crr(2 To r, 1 To 9)
    For k = 1 To UBound(brr, 2)
        If Month(Application.Text(brr(1, k), "0000-00-00")) = Month(Date) Then
            If m = 0 Then
                min1 = k
                m = 1
            Else
                max1 = k
            End If
        ElseIf Month(Application.Text(brr(1, k), "0000-00-00")) = Month(DateAdd("m", 1, Date)) Then
            If n = 0 Then
                min2 = k
                n = 1
            Else
                max2 = k
            End If
        End If
    Next
    For i = 2 To r
        crr(i, 1) = crr(i, 2) = crr(i, 3) = crr(i, 4) = crr(i, 5) = 0
        crr(i, 1) = Split(d(frr(i - 1, 1)), "_")(0)    '2.指定H列第一行名字为:收容数    根据对应的项目编码(B列)去“TxSEIK(7月度内示比较)”套取相应的数据
        crr(i, 4) = Split(d(frr(i - 1, 1)), "_")(1)   '5.指定K列第一行名字为:上月发行(当月的月份) 去TxSEIK(7月度内示比较)  根据项目编码(B列)套取数据{固定I列}
        crr(i, 5) = Split(d(frr(i - 1, 1)), "_")(2)     '6.指定L列第一行名字为:上月发行(下月的月份) 去TxSEIK(7月度内示比较)  根据项目编码(B列)套取数据{固定J列}
        For k = min1 To max1
            crr(i, 2) = crr(i, 2) + brr(i, k)    '3.指定I列第一行名字为:当月的月份(变量)套取本身工作表Q~EH列对应月份的  总量
        Next
        For k = min2 To max2
            crr(i, 3) = crr(i, 3) + brr(i, k)     '4.指定J列第一行名字为:当月的月份+1月      套取本身工作表Q~EH列对应月份的  总量
        Next
        crr(i, 6) = (crr(i, 2) - crr(i, 4)) / crr(i, 4)    '7.指定M列第一行名字为:当月份差异率   =(I8-K8)/K8
        crr(i, 7) = (crr(i, 3) - crr(i, 5)) / crr(i, 5)    '8.指定N列第一行名字为:当月份+1月差异率  =(J8-L8)/L8
        crr(i, 8) = (crr(i, 2) - crr(i, 4)) / crr(i, 1)    '9.指定O列第一行名字为:当月份差异箱数 =(I8-K8)/H8
        crr(i, 9) = (crr(i, 3) - crr(i, 5)) / crr(i, 1)    '10. 指定P列第一行名字为:当月份+1差异箱数 =(J8-L8)/H8
    Next
    Range("H2:P" & r) = crr
    '---------------------------------------------
    ActiveWorkbook.SaveAs Filename:=MyPath & Split(MyName1, ".")(0) & "(" & Month(Date) & "月度内示比较).xls", FileFormat:=xlExcel8
    ActiveWindow.Close True
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-8-4 14:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
实例.zip (866.71 KB, 下载次数: 12)

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-4 21:53 | 显示全部楼层
蓝桥玄霜 发表于 2015-8-4 09:22
仅实现第一个问题。
请见附件。本附件需要放在实例文件夹里面。

感谢帮助!有个条件你理解错了
For i = 2 To UBound(Arr)
If Arr(i, 7) = "生计" Then  要改成><生计)
我是要生计的 数据!其他无问题!谢谢  
不知道第二题能否解决

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-4 22:02 | 显示全部楼层
kuaile5935 发表于 2015-8-4 14:19
Sub cnn_db()
    Dim arr, brr, crr, drr, err, frr, MyPath$, MyName1$, Sql$, m%, n%, i%, k%, r%
    ...

感谢你的指导,

I列 比如说,现在是8月份,我要是要获得当前月份(8月)+1月 就是9月份  这里是变量。不可一固定它。然后去Q~EH列获取相应的总量(9-1至9-30)
J列 比如说,现在是8月份,我要是要获得当前月份(8月)+2月 就是10月份 这里是变量。不可一固定它。然后
去Q~EH列获取相应的总量(10-1至10-31)

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-4 22:52 | 显示全部楼层

假定现在为8月份


指定K列第一行名字为:上月发行8-1=7(当月8的月份) 去TxSEIK(7月度内示比较)  根据项目编码(B列)套取数据{固定J列}即上月度发行的8月份数据指定L列第一行名字为:上月发行8-1=7(下月8+1=9的月份) 去TxSEIK(7月度内示比较)   根据TxSEIK项目编码(B列)套取 TxSEIK(7月度内示比较)对应的项目编码 TxSEIK(7月度内示比较)里面的 9-1至9月30日的总量





TA的精华主题

TA的得分主题

 楼主| 发表于 2015-8-5 00:03 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 19:22 , Processed in 0.046771 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表