ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 代码如何优化

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-2-2 10:04 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
自己写的代码,水平比较差,太啰嗦了,怎么优化呢?谢谢!

Sub Extext()

Dim I As Long, MaxRow As Long

Application.ScreenUpdating = False

MaxRow = Range("A1").End(xlDown).Row

For I = 1 To MaxRow '行 范围,自己修改

  Range("S" & I & ":W" & I).ClearContents
  
  Range("P1") = "修正代码"
  Range("Q1") = "现金流分类"
  Range("R1") = "现金流项目"
  Range("S1") = "大类"
  Range("T1") = "中类"
  Range("U1") = "小类"
  
    Range("B2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Range("P2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'----------------------------------------------------------------
If InStr(Range("M" & I), "废品") > 0 Then
    Range("S" & I) = "その他"
    Range("T" & I) = "废品收入"

  ElseIf InStr(Range("M" & I), "货款") > 0 Then
    Range("S" & I) = "営業入金"
    Range("T" & I) = "销售收入"
'----------------------------------------------------------------
ElseIf InStr(Range("M" & I), "直材") > 0 Then
    Range("S" & I) = "材料費"
    Range("T" & I) = "材料采购"
ElseIf InStr(Range("M" & I), "付进口材料") > 0 Then
    Range("S" & I) = "材料費"
    Range("T" & I) = "材料采购"
  '----------------------------------------------------------------
ElseIf InStr(Range("M" & I), "工资") > 0 Then
    Range("S" & I) = "人件費"
    Range("T" & I) = "实发工资"
ElseIf InStr(Range("M" & I), "生育险") > 0 Then
    Range("S" & I) = "人件費"
    Range("T" & I) = "实发工资"
    Range("U" & I) = "生育险"
ElseIf InStr(Range("M" & I), "派遣") > 0 Then
    Range("S" & I) = "人件費"
    Range("T" & I) = "劳务外注"
ElseIf InStr(Range("M" & I), "养老保险") > 0 Then
    Range("S" & I) = "人件費"
    Range("T" & I) = "法定福利"
    Range("U" & I) = "养老保险"
ElseIf InStr(Range("M" & I), "公积金") > 0 Then
    Range("S" & I) = "人件費"
    Range("T" & I) = "法定福利"
    Range("U" & I) = "公积金"
ElseIf InStr(Range("M" & I), "社保") > 0 Then
    Range("S" & I) = "人件費"
    Range("T" & I) = "法定福利"
    Range("U" & I) = "社保费用"
  '----------------------------------------------------------------
ElseIf InStr(Range("M" & I), "体检") > 0 Then
    Range("S" & I) = "人件費"
    Range("T" & I) = "福利厚生"
    Range("U" & I) = "体检费用"
ElseIf InStr(Range("M" & I), "工会经费") > 0 Then
    Range("S" & I) = "人件費"
    Range("T" & I) = "福利厚生"
    Range("U" & I) = "工会经费"
ElseIf InStr(Range("M" & I), "食堂") > 0 Then
    Range("S" & I) = "人件費"
    Range("T" & I) = "福利厚生"
    Range("U" & I) = "员工食堂"
ElseIf InStr(Range("M" & I), "生日") > 0 Then
    Range("S" & I) = "人件費"
    Range("T" & I) = "福利厚生"
    Range("U" & I) = "员工生日"
  ElseIf InStr(Range("M" & I), "旅游") > 0 Then
    Range("S" & I) = "人件費"
    Range("T" & I) = "福利厚生"
    Range("U" & I) = "旅游费用"
  ElseIf InStr(Range("M" & I), "开门红") > 0 Then
    Range("S" & I) = "人件費"
    Range("T" & I) = "福利厚生"
    Range("U" & I) = "开门红"
  ElseIf InStr(Range("M" & I), "鑫欧臣") > 0 Then
    Range("S" & I) = "人件費"
    Range("T" & I) = "福利厚生"
    Range("U" & I) = "高温饮料"
ElseIf InStr(Range("M" & I), "社长奖") > 0 Then
    Range("S" & I) = "人件費"
    Range("T" & I) = "福利厚生"
    Range("U" & I) = "社长奖"
  ElseIf InStr(Range("M" & I), "忘年会") > 0 Then
    Range("S" & I) = "人件費"
    Range("T" & I) = "福利厚生"
    Range("U" & I) = "忘年会"
  ElseIf InStr(Range("M" & I), "尚真服饰") > 0 Then
    Range("S" & I) = "人件費"
    Range("T" & I) = "福利厚生"
    Range("U" & I) = "工作服"
'----------------------------------------------------------------
ElseIf InStr(Range("M" & I), "奖金") > 0 Then
    Range("S" & I) = "賞与"
    Range("T" & I) = "员工奖金"
   
ElseIf InStr(Range("M" & I), "间材") > 0 Then
    Range("S" & I) = "経費"
    Range("T" & I) = "间材费用"
  '----------------------------------------------------------------
  ElseIf InStr(Range("M" & I), "天然气") > 0 Then
    Range("S" & I) = "経費"
    Range("T" & I) = "水电气费"
  ElseIf InStr(Range("M" & I), "自来水") > 0 Then
    Range("S" & I) = "経費"
    Range("T" & I) = "水电气费"
  ElseIf InStr(Range("M" & I), "污水处理费") > 0 Then
    Range("S" & I) = "経費"
    Range("T" & I) = "水电气费"
  ElseIf InStr(Range("M" & I), "电费") > 0 Then
    Range("S" & I) = "経費"
    Range("T" & I) = "水电气费"
  '----------------------------------------------------------------
  ElseIf InStr(Range("M" & I), "培训") > 0 Then
    Range("S" & I) = "経費"
    Range("T" & I) = "教育培训"

  ElseIf InStr(Range("M" & I), "工具") > 0 Then
    Range("S" & I) = "経費"
    Range("T" & I) = "间材费用"
  ElseIf InStr(Range("M" & I), "BS货款") > 0 Then
    Range("S" & I) = "経費"
    Range("T" & I) = "间材费用"

  ElseIf InStr(Range("M" & I), "入门费") > 0 Then
    Range("S" & I) = "経費"
    Range("T" & I) = "入门费"
   
  ElseIf InStr(Range("M" & I), "维修费") > 0 Then
    Range("S" & I) = "経費"
    Range("T" & I) = "修缮费"
'----------------------------------------------------------------
  ElseIf InStr(Range("M" & I), "日新") > 0 Then
    Range("S" & I) = "経費"
    Range("T" & I) = "物流费"
  ElseIf InStr(Range("M" & I), "日通") > 0 Then
    Range("S" & I) = "経費"
    Range("T" & I) = "物流费"
  ElseIf InStr(Range("M" & I), "万友通") > 0 Then
    Range("S" & I) = "経費"
    Range("T" & I) = "物流费"
  ElseIf InStr(Range("M" & I), "顺衡") > 0 Then
    Range("S" & I) = "経費"
    Range("T" & I) = "物流费"
  ElseIf InStr(Range("M" & I), "万特可") > 0 Then
    Range("S" & I) = "経費"
    Range("T" & I) = "物流费"
  '----------------------------------------------------------------
  ElseIf InStr(Range("M" & I), "经济补偿") > 0 Then
    Range("S" & I) = "経費"
    Range("T" & I) = "经济补偿"
   
  ElseIf InStr(Range("M" & I), "利息") > 0 Then
    Range("S" & I) = "経費"
    Range("T" & I) = "利息"
  ElseIf InStr(Range("M" & I), "手续费") > 0 Then
    Range("S" & I) = "経費"
    Range("T" & I) = "手续费"
   
  ElseIf InStr(Range("M" & I), "统括业务") > 0 Then
    Range("S" & I) = "経費"
    Range("T" & I) = "统括费用"
'----------------------------------------------------------------
  ElseIf InStr(Range("M" & I), "企业所得税") > 0 Then
    Range("S" & I) = "税金(法人税等)"
    Range("T" & I) = "税金缴纳"
  ElseIf InStr(Range("M" & I), "环保税") > 0 Then
    Range("S" & I) = "税金(法人税等)"
    Range("T" & I) = "税金缴纳"
  ElseIf InStr(Range("M" & I), "印花税") > 0 Then
    Range("S" & I) = "税金(法人税等)"
    Range("T" & I) = "税金缴纳"
  ElseIf InStr(Range("M" & I), "城建税") > 0 Then
    Range("S" & I) = "税金(法人税等)"
    Range("T" & I) = "税金缴纳"
  ElseIf InStr(Range("M" & I), "教育附加") > 0 Then
    Range("S" & I) = "税金(法人税等)"
    Range("T" & I) = "税金缴纳"
ElseIf InStr(Range("M" & I), "税费") > 0 Then
    Range("S" & I) = "税金(法人税等)"
    Range("T" & I) = "税金缴纳"
'----------------------------------------------------------------
  ElseIf InStr(Range("M" & I), "划款") > 0 Then
    Range("S" & I) = "换算差额"
  ElseIf InStr(Range("M" & I), "拨款") > 0 Then
    Range("S" & I) = "换算差额"
  ElseIf InStr(Range("M" & I), "调拨") > 0 Then
    Range("S" & I) = "换算差额"
   
End If
   Next
   
  ActiveWorkbook.Save
  Application.ScreenUpdating = True

End Sub

test.rar

18.77 KB, 下载次数: 11

TA的精华主题

TA的得分主题

发表于 2024-2-2 11:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
感觉这么多if,没什么改的,硬要说的话,做一个参照表逐个判断吧

TA的精华主题

TA的得分主题

发表于 2024-2-2 12:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
供参考。
提示一下,原第29行“BS货款”应提升到“货款”之前。

daoxuanren_代码如何优化.rar

25.98 KB, 下载次数: 20

TA的精华主题

TA的得分主题

发表于 2024-2-2 12:58 | 显示全部楼层
用三个数组装填里面这些项目更合适。
难是不难,就是费时。

TA的精华主题

TA的得分主题

发表于 2024-2-2 14:11 | 显示全部楼层
关键字:left join
GIF 2024-02-02 14-10-48.gif

test.zip

29.77 KB, 下载次数: 15

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-2-2 14:12 | 显示全部楼层
Sub limonet()
    Dim Cn As Object, StrSQL$
    Set Cn = CreateObject("Adodb.Connection")
    Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
    StrSQL = "Select 大类,中类,小类 From [202312$M:M]a Left Join [Sheet1$]b On a.对方文本 Like '%'+b.对方文本+'%'"
    Range("S2").CopyFromRecordset Cn.Execute(StrSQL)
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-19 10:08 | 显示全部楼层
山菊花 发表于 2024-2-2 12:41
供参考。
提示一下,原第29行“BS货款”应提升到“货款”之前。

谢谢版主!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-19 10:12 | 显示全部楼层
山菊花 发表于 2024-2-2 12:41
供参考。
提示一下,原第29行“BS货款”应提升到“货款”之前。

谢谢版主的回复,感激不尽。。。。。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-19 10:13 | 显示全部楼层
limonet 发表于 2024-2-2 14:12
Sub limonet()
    Dim Cn As Object, StrSQL$
    Set Cn = CreateObject("Adodb.Connection")

谢谢高手的回复,学习了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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