ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 代码初学练习

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-12-4 17:53 | 显示全部楼层 |阅读模式
本帖最后由 micch 于 2018-12-9 20:30 编辑

        怎么说呢,看到很多用代码解决问题的帖子,尤其是函数公式解决不了,或者解决起来费劲的问题,突然心血来潮想试试读懂代码。于是借了本《别怕,VBA其实很简单》研究,还没看完,只是粗略看了个开头,觉得代码也挺好玩的。
        于是就想着自己写个代码试试,在论坛搜索VBA练习题,找到个帖子 http://club.excelhome.net/thread-1332191-1-1.html (出处: ExcelHome技术论坛)

看到香川老师的回帖http://club.excelhome.net/forum.php?mod=redirect&goto=findpost&ptid=1332191&pid=9013824
楼主我给你出几道题目吧:

编写代码
1、在A列输出1000以内的偶数。
2、输出20行10列的自然序数表。
3、在A列输出20个1-100之内的不重复随机整数。
4、在A列输出100以内的素数。
5、寻找输出所有3个数之和=20的正整数集合。

…………哈哈。不知道你会做几题?

就想着自己能不能写出来,于是试了试;但是实在是完全不懂对错、调试啊、优化啊什么的,所以发个贴看看请大家帮忙指点指点,给我一点建议,我工作用不到VBA,就是了解一下;
      
      怎么说呢,都不知道该怎么问问题,不知道关于代码应该咨询哪些方面问题,总之能指点的地方都说说。多谢大家!!!

求偶数,20*10序列,随机不重复数,100内素数,20内3个数求和=20组合;
  1. Sub oushu()
  2.     Dim i As Integer
  3.     For i = 1 To 500
  4.     Sheet1.Cells(i, 1).Value = i * 2
  5.     Next
  6. End Sub
  7. '--------------------------------------------------------------------------
  8. Sub xulieshu()
  9.     Dim i As Integer, j As Integer
  10.     For i = 1 To 20
  11.         For j = 1 To 10
  12.         Sheet1.Cells(i + 10, j + 3).Value = i * 10 + j - 10
  13.         Next
  14.     Next
  15. End Sub
  16. '--------------------------------------------------------------------------
  17. Sub suijishu()
  18.     Dim i, j, k, arr(1 To 20) As Integer
  19.     For i = 1 To 20
  20. 1   j = Application.RandBetween(1, 100)
  21.         For k = 1 To i
  22.             If arr(k) = j Then
  23.             GoTo 1
  24.             End If
  25.         Next
  26.     arr(i) = j
  27.     Sheet1.Cells(i, "B").Value = j
  28.     Next
  29. End Sub
  30. '--------------------------------------------------------------------------
  31. Sub sushu()
  32.     Dim i, j, k As Integer
  33.     k = 1
  34.     For i = 2 To 100
  35.         For j = 2 To i - 1
  36.             If i Mod j = 0 Then
  37.                 GoTo 1
  38.             End If
  39.         Next
  40.         Sheet1.Cells(k, "C").Value = i
  41.         k = k + 1
  42. 1   Next
  43. End Sub
  44. '--------------------------------------------------------------------------
  45. Sub hezuhe()
  46.     Dim i, j, k, n As Integer
  47.         n = 0
  48.         For i = 1 To 20
  49.             For j = i + 1 To 20
  50.                 For k = j + 1 To 20
  51.                     If i + j + k = 20 Then
  52.                         n = n + 1
  53.                         Sheet1.Cells(n, "o").Value = i & " + " & j & " + " & k & " =20"
  54.                     End If
  55.                 Next
  56.             Next
  57.         Next
  58. End Sub
复制代码




test1.zip (20.07 KB, 下载次数: 4)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-9 20:56 | 显示全部楼层
本帖最后由 micch 于 2018-12-19 12:48 编辑

呃,-_-||
眨眨眼就半个月了,乱七八糟写了不少代码,本来想把练习的代码发帖子里记录,又觉得有点灌水;为了方便以后回看,在这里用链接保存一下学习过程吧。

刚学会语句写的,根据数字一行转多行,,刚开始啥都不会就瞎写了;;

多行转一行,,都不会定位,只能按照固定单元格位置写语句;;

一对多,合成新表,,不会字典,按函数思维循环;;

筛选数据,计算,,终于不只会for语句了,尝试do语句循环;;

按条件筛选唯一值,,第一次使用字典,解决函数不好解决的问题;;

按关键字求和,,尝试用字典累计求和;;

按条件提取数据,排序统计数字,第一次觉得写代码好累,不会一步到位,只能一个目的一个循环,写一堆才完成目标;;

字典筛选,,又学会字典的一个用法,item可以直接累加想要的文本;;

还是字典item提取信息,,字典练习;;






补充内容 (2019-2-13 19:31):
http://club.excelhome.net/forum. ... 499&pid=9820647

补充内容 (2019-2-18 23:02):
http://club.excelhome.net/forum. ... 167&pid=9824609

补充内容 (2019-2-18 23:02):
http://club.excelhome.net/forum. ... 238&pid=9825523

补充内容 (2019-2-18 23:03):
http://club.excelhome.net/forum. ... 396&pid=9826380

第一次尝试窗体

补充内容 (2019-2-23 13:19):
http://club.excelhome.net/forum. ... 526&pid=9831954

第一次学习递归

补充内容 (2019-2-26 20:48):
http://club.excelhome.net/forum. ... 150&pid=9824499
重新写一次排列组合

补充内容 (2019-3-6 19:19):
http://club.excelhome.net/forum. ... 208&pid=9847100
再次学习递归

补充内容 (2019-3-9 11:06):
http://club.excelhome.net/forum. ... 825&pid=9850477
继续递归

补充内容 (2019-4-7 13:34):
好久没学习了,又学了一点知识,最短路径算法。链接记录于此
http://club.excelhome.net/forum. ... 370&pid=9886983

补充内容 (2019-4-7 13:34):
第一次尝试竞赛VBA题
http://club.excelhome.net/forum. ... 620&pid=9887665

补充内容 (2019-4-14 22:01):
http://club.excelhome.net/forum. ... 621&pid=9897586
第一次尝试拆分工作簿

补充内容 (2019-7-2 22:34):
http://club.excelhome.net/forum. ... 115&pid=9997281
好久没学习了,今天学到一个do循环技巧,记录

补充内容 (2020-1-21 09:40):
http://club.excelhome.net/forum. ... 70&pid=10216822

学习代码做图表

补充内容 (2020-3-2 14:45):
Function num(x, n)
    x = Int(x)
    s = IIf(n = 1, "零一二三四五六七八九十百千万", "零壹贰叁肆伍陆柒捌玖拾佰仟万")
    If x < 10 Then
             num = Mid(s, x + 1, 1) '
    Else
            nu...

补充内容 (2020-3-2 14:46):
num = num(Left(x, 1), n) & Mid(s, Len(x) + 9, 1)
            If Val(Mid(x, 2)) Then num = num & IIf(Mid(x, 2, 1) = "0", "零", "") & num(Mid(x, 2), n)
    End If
End Function

补充内容 (2020-4-1 14:24):
http://club.excelhome.net/forum. ... 83&pid=10267838

补充内容 (2020-4-27 20:31):
http://club.excelhome.net/forum. ... 27&pid=10213262

补充内容 (2021-8-29 00:06):
https://club.excelhome.net/forum ... 23&pid=10760553

随机乱序数组

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-12-4 19:21 | 显示全部楼层
你这样是单纯研究算法啊。。。香川老师也是折腾算法的。算法这个什么语言都可以。要用于EXCEL就直接找那些能实际工作能用到的表,什么条件拆分/库存。。。实在不行可以做游戏啊,什么扫雷/简单纸牌/还有三国杀都有Excel版本的

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-4 19:30 | 显示全部楼层
本帖最后由 micch 于 2018-12-4 19:39 编辑
MOY838840554 发表于 2018-12-4 19:21
你这样是单纯研究算法啊。。。香川老师也是折腾算法的。算法这个什么语言都可以。要用于EXCEL就直接找那些 ...

没有学习目的,就是先尝试了解一下,所以连个学习方向都没有;都不懂代码到底做什么,

如果是解决实际问题,对我来说估计太高深了,研究几天写个代码,估计手工都把实际问题解决了。

刚开始看书,完全不知道如何练习,就是把书里的代码抄了一下,试了试结果。真要应用到游戏或拆分什么的,我连VBA中能用什么函数都不知道;
呃,搜索了一下扫雷,纸牌,看了几个帖子,感觉天书一样,完全看都看不懂,初学者就要玩这么高深吗??

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-5 11:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 micch 于 2018-12-5 11:26 编辑

又学了一点点,重写一下偶数,20*10自然数序列
  1. Sub oushu2()
  2.     Dim i%, n%, rng As Range
  3.     i = InputBox("请输入上限值:", "偶数列表", 2)
  4.     i = Int(i / 2) + 1
  5.         For Each rng In Range(Cells(1, 2), Cells(i, 2))
  6.         rng.Value = n
  7.         n = n + 2
  8.     Next
  9. End Sub
复制代码
  1. Sub xulieshu2()
  2.     Dim rng As Range, i%
  3.     For Each rng In Range("d25").Resize(20, 10)
  4.     rng.Value = i + 1
  5.     i = i + 1
  6.     Next
  7. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-9 20:38 | 显示全部楼层
本帖最后由 micch 于 2018-12-9 20:40 编辑

拆分.jpg
增加了一个练习,简单的拆分;完全不懂如果系统的学,就直接在函数公式版找题来练习试试;
  1. Sub chaifen()
  2.     Dim n%
  3.     n = Range("b999").End(xlUp).Row
  4.     ar = Join(Application.Transpose(Range("b2:b" & n)))
  5.     arr = Split(ar, "【")
  6.     For i = 1 To UBound(arr): Cells(i + 1, 3).Value = "【" & arr(i): Next
  7. End Sub
  8. '=============================================================================
  9. Sub chaifen2()
  10.     Dim i%, j%, n%
  11.     For i = 2 To Range("b999").End(xlUp).Row
  12.     arr = Split(Cells(i, 2), "【")
  13.     For j = 1 To UBound(arr)
  14.     n = n + 1
  15.     Cells(n + 1, 3).Value = "【" & arr(j)
  16.     Next
  17.     Next
  18. End Sub

复制代码

TA的精华主题

TA的得分主题

发表于 2018-12-9 20:45 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-12-9 20:46 | 显示全部楼层
金太阳赛车 发表于 2018-12-9 20:45
请帮助我修改 循环有错误,请大神修改

复式分解有误,循环有错,请大神修改

33分解复式注数.rar

9.83 KB, 下载次数: 3

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-12-9 21:01 | 显示全部楼层
本帖最后由 micch 于 2018-12-9 21:02 编辑

间隔.jpg
这是丢丢老师一道函数练习题,一个公式解答居然比分步解答还简单,尝试用代码解答一下:B2:b110为0-9随机数

  1. Sub X间隔()
  2.    
  3.     Dim i%, j%, k%, m%, n%
  4.     For i = 2 To 111: For j = i + 1 To 111
  5.         n = Cells(i, 2).Value
  6.         If n Mod 5 = 4 Then
  7.             If Cells(j, 2).Value = n Then Exit For
  8.             If Cells(j, 2).Value = 13 - n Then k = j - i: Exit For
  9.         End If
  10.     Next: m = Application.Max(k, m): Next
  11.     MsgBox m
  12.                
  13. End Sub
  14. '==========================================================================
  15. Sub X间隔1()
  16.     Dim i%, j%, k%, m%, n%
  17.     For i = 2 To 111
  18.         n = Cells(i, 2).Value
  19.         If n Mod 5 = 4 Then
  20.             For j = i + 1 To 111
  21.                 If Cells(j, 2).Value = n Then Exit For
  22.                 If Cells(j, 2).Value = 13 - n Then k = j - i: Exit For
  23.             Next
  24.         m = Application.Max(k, m)
  25.         End If
  26.     Next
  27.     MsgBox m
  28. End Sub

复制代码


TA的精华主题

TA的得分主题

发表于 2018-12-9 21:34 | 显示全部楼层

我也玩了數年函數才進vba的,都有年半了
話說寫多了vba後,很久沒用函數了,都有點生疏呢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-26 20:00 , Processed in 0.049866 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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