ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 在Access导入数据时如何用VBA对数据进行处理

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-7-25 15:22 | 显示全部楼层 |阅读模式
各位大侠好,第一次在Access区发帖,有点紧张。自己自学过一点Excel的VBA,但对Access几乎毫无了解,现在遇到一个数据库设计问题,还请高手们指教。

还请参考附件,设计的背景是现在有一些Excel的统计资料,之前做图表时用的,如“手机”,“电脑”两个工作表,有的是月或者季的出货量或者销售量,另外有各厂家的份额。之前一直使用这种方式做了一些图表,现在想将其全部统一到一个大的数据库来,但具体数据的更新是由妹子把网上的数据敲进去,而妹子对Access不熟,还是准备继续在Excel上做。
在第三张工作表“Access数据库”里面列出了一个方案,以为个人的理解,至少需要下面几项处理:
1.改变数据格式,从表格变成记录型
2.需要根据厂家份额算出各厂数据并以记录形式保存
3.部分统计数据只有季度数据而无月数据,因此需要算出”假的“月度数据(算出办法等于各厂月数据/3)
4.原数据有出货量、销售量的区别,需要按实际情况进行区分

我想到的一个比较笨的方法是做一个Excel VBA或宏,根据输入的数据不同将其转化为数据库式的源数据(即“Access数据库”那样的),再手动将其粘贴(或者是用Access的数据导入功能导入)到Access里的表,或者是利用Access的连接表功能完成更新。
但我想尽可能把数据也放入Access里,不知道Access VBA能否在导入数据时对其内容进行处理,补空、插入、计算等。如果有应如何实现?还请高手赐教。
自己的说明可能有点不大清楚,如有什么疑问还请留言。

另本人学过一点C,但实在是没接触过Access/SQL和数据库编程,还请尽可能通俗地解释,谢谢。


Access DB.zip (8 KB, 下载次数: 20)

TA的精华主题

TA的得分主题

发表于 2016-7-26 11:39 | 显示全部楼层
access也是可以计算的,不过没有excel那么灵活方便。

没有看明白你的意思。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-7-26 13:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
gftrewq 发表于 2016-7-26 11:39
access也是可以计算的,不过没有excel那么灵活方便。

没有看明白你的意思。

谢谢回复,我是想说需要处理的数据并不符合Access的记录格式,因此需要手动添加项(比如“销售量”),或者是按照Excel表格上的数据进行计算(比如对于季度数据,需要首先除以3得出月数据,再按各厂家的份额比例乘算才能得到输入到Access中的数据)

我唯一能想到的就是上述这些”草稿“过程都得在Excel中的新工作表中计算,再将内容导入Access,最后再删除草稿工作表,不知道有没有什么更高效的做法。

比如,Access的计算能否举个例子说明呢?谢谢!

TA的精华主题

TA的得分主题

发表于 2016-7-26 16:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
aster37a 发表于 2016-7-26 13:51
谢谢回复,我是想说需要处理的数据并不符合Access的记录格式,因此需要手动添加项(比如“销售量”),或 ...

access表格是没有办法计算的,要计算必须要在查询里面计算,复杂一点的要写代码来计算才可以完成。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-7-26 19:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
gftrewq 发表于 2016-7-26 16:16
access表格是没有办法计算的,要计算必须要在查询里面计算,复杂一点的要写代码来计算才可以完成。

你所说的计算是汇总、分组之类的运算吗?
如果按照原表的样式,不光需要汇总和分组,还需要对记录本身进行处理,比如把本来是一条第二季度的记录分割成4月,5月,6月度三条数据,而不知道这个处理能否在Access上进行(感觉应该是可以,就是不像Excel那样可以看着单元格操作,有点虚)

TA的精华主题

TA的得分主题

发表于 2016-7-26 20:05 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
从数据存储、处理、计算、读取过程和方式上分为三种类型:
1.以结果形式存储,就是把想要的结果都处理好,并保存,使用时,直接读取,无须再处理,这方式在数据保存时,就进行了计算和处理,这样呢读取方便,快捷,带来的后果呢,就是要有很大的存储空间,有时候也带来不必要的冗余数据

2.以公式或查询形式保存,相对存储空间更节省,没有冗余的数据,但是,有一些要求的计算过程或公式过于复杂,这会给读取时带来更长的计算时间,特别是多步骤计算,可能还无法实现

3.数据只存储基本数据,只在读取时,再另行计算,这方法更为灵活,再来的问题也是有的,就是过程代码较为复杂,在一些计算时间上可能也会长一些

以我的方式呢,会结合1.2.3,一些长时间计算的,会先行存储好结果,后续调用,用代码过程形成查询,来调取数据,也可以减少部分计算,然后,再通过代码来处理后续临时性计算数据,形成整个报表

TA的精华主题

TA的得分主题

发表于 2016-7-27 09:04 | 显示全部楼层
本帖最后由 gftrewq 于 2016-7-27 09:12 编辑
aster37a 发表于 2016-7-26 19:42
你所说的计算是汇总、分组之类的运算吗?
如果按照原表的样式,不光需要汇总和分组,还需要对记录本身进 ...

没有明白你到底要实现什么效果。
access在处理计算方面没有excel灵活
QQ图片20160727090124.png
这是一个按公司名和操作计算余额的,估计在excel里面很容易就可以完成,
但是在access里面就要写代码才可以完成。
Function yueADORMB(ByVal gsmc As String, ywID As Long) As Double
    Dim RS As Recordset
    Dim y As Double
    Dim x As Double
    Dim sr As Double
    Dim zc As Double
    Dim strsql As String
    On Error Resume Next
    Set RS = New ADODB.Recordset
    RS.ActiveConnection = CurrentProject.Connection
    strsql = "Select * FROM 表名 Where 公司名='" & gsmc & "' orDER BY 公司名,ID"
    RS.Open strsql, , adOpenKeyset, adLockOptimistic
    '    rs.MoveFirst
    Do Until RS.EOF
        sr = Nz(RS!收入_RMB)
        zc = Nz(RS!支出_RMB)
        x = sr - zc
        If ywID = RS!ID Then
            y = y + x
            yueADORMB = y
            Exit Do
        ElseIf ywID <> RS!ID Then
            y = y + x
        End If
        RS.MoveNext
    Loop
    RS.Close
    Set RS = Nothing
End Function



TA的精华主题

TA的得分主题

 楼主| 发表于 2016-7-28 16:48 | 显示全部楼层
gftrewq 发表于 2016-7-27 09:04
没有明白你到底要实现什么效果。
access在处理计算方面没有excel灵活

感谢回答,我实在是没接触过数据库编程,能否解释一下
If ywID = RS!ID Then
            y = y + x
            yueADORMB = y
            Exit Do
        ElseIf ywID <> RS!ID Then
            y = y + x
        End If
这里的判断条件ywID = RS!ID 以及变量 y的作用?

关于我具体需要做什么样的计算的问题,我重新做了一个可能更好理解的图,还请参考。
一言以蔽之就是输入是在Excel画面进行,而需要从输入的数据中首先算出单月数据,再按照厂商份额计算出厂商的记录,最后录入系统。
谢谢。
11.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-7-28 17:05 | 显示全部楼层
Renco 发表于 2016-7-26 20:05
从数据存储、处理、计算、读取过程和方式上分为三种类型:
1.以结果形式存储,就是把想要的结果都处理好, ...

谢谢回复,以这次的例子来说我应该是倾向于1,因为本来希望得到的数据就是计算后的数据,计算前的数据只是一个草稿之类的东西。
具体例子还请参考下图(刚才发过一遍了)
11.png

我的想法是输入画面是左半边的框,进行处理后以右边的方式存入Access,请问这个变换过程是在Excel的一个新工作表中进行,再导入处理后数据;还是直接在Access中计算比较合适呢?谢谢!

TA的精华主题

TA的得分主题

发表于 2016-7-28 21:53 | 显示全部楼层
你的图例,应当用,导出来再计算
因为数据库软件都是这样的,
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-25 00:39 , Processed in 0.050924 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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