ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA代码简化

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-1-24 15:15 | 显示全部楼层 |阅读模式
各位大佬好:附件是我借用了一个大佬的代码,但是感觉简单重复了,我是一个VBA小白,求帮忙优化一下,感谢!

销售录入(1).rar

14.64 KB, 下载次数: 32

TA的精华主题

TA的得分主题

发表于 2024-1-24 15:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
自称小白,却说大佬代码简单重复,霸气
看了一下代码,就是直接操作单元格,速度会慢一点,但代码重复说不上吧。
改用数组会快一点,但也不太好改,要一个一个调整。

TA的精华主题

TA的得分主题

发表于 2024-1-24 15:57 | 显示全部楼层
我以前利用excel做简单数据库的时候这样搞过。因为我也不知道表格的实际使用人会在什么时候想增加一个新的字段名就想到了模仿ERP的方式。但erp的字段名是通过唯一ID进行检索的。所以你设计的时候要考虑字段名避免重复。

Sub 提交1()
Dim rng As Range, mSearch$, c%, r&
r = Sheets("数据库").[A65536].End(xlUp).Row + 1
If Sheets("数据库").[A:A].Find([J3]) = [J3] Then
MsgBox "此单已经保存过了!"
Else
    For c = 1 To 38
        mSearch = Sheets("数据库").Cells(1, c)
        Set rng = Sheets("录入").Cells.Find(mSearch, , , xlPart)
        If Not rng Is Nothing Then Sheets("数据库").Cells(r, c) = Sheets("录入").Cells(rng.Row, rng.Column + 1)
    Next c
    MsgBox "提交成功!"
End If
End Sub

TA的精华主题

TA的得分主题

发表于 2024-1-24 16:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这代码很好了,又不是自己写,麻烦的是别人

TA的精华主题

TA的得分主题

发表于 2024-1-24 16:38 | 显示全部楼层
改成这样会简化一点点,不过都差不多。
With Sheets("数据库").Cells(lastRow, 1).Resize(, 38)
            .Value = Array([J3], [B4], [B5], [B6], [B7], [D4], [D5], [D6], [D7], [F4], [F5], [F6], _
                           [F7], [H4], [H5], [H6], [H7], [J4], [J5], [J6], [J7], [B8], [D8], [F8], [H8], [J8], [B9], _
                           [D9], [F9], [H9], [J9], [B10], [D10], [F10], [H10], [J10], [B11], [D11])
        End With

TA的精华主题

TA的得分主题

发表于 2024-1-24 16:41 | 显示全部楼层
Sub 提交()

        Set d = CreateObject("scripting.dictionary")
        m = Sheets("数据库").[A65536].End(xlUp).Row + 1
        For i = 3 To 11
            For j = 1 To 9
                If j Mod 2 = 1 Then
                    d(Replace(Sheets("录入").Cells(i, j).Value, ":", "")) = Sheets("录入").Cells(i, j + 1).Value
                End If
            Next
        Next
        With Sheets("数据库")
            For i = 1 To 38
                .Cells(m, i) = d(.Cells(1, i).Value)
            Next
        End With


End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-1-24 16:54 | 显示全部楼层
本帖最后由 tspliu 于 2024-1-24 16:56 编辑

只改了这部分,自己复制一下吧
新建位图图像.jpg
新建位图图像.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-25 07:15 | 显示全部楼层
ykcbf1100 发表于 2024-1-24 15:57
自称小白,却说大佬代码简单重复,霸气
看了一下代码,就是直接操作单元格,速度会慢一点,但代码重复 ...

说错话了,

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-1-25 07:46 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-1-25 10:17 | 显示全部楼层
苦力活,喜欢干的人不多,都喜欢功能性的技术型的问题
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 01:48 , Processed in 0.045550 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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