ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E文精选 > Excel VBA > [分享]关于excel“我爱你”vba循环的N种写法,欢迎续篇

[分享]关于excel“我爱你”vba循环的N种写法,欢迎续篇

作者:绿色风 分类: 时间:2022-08-17 浏览:193
楼主
hlxz
题目要求:用vba,在a1:a99写入,“我爱你”,循环
就是A1=我,a2=爱,a3=你,a4=我,a5=爱,a6=你,,,,这样循环
  1. Sub 方法1()
  2.     T = Timer
  3.     For i = 1 To 99
  4.         y = i Mod 3
  5.         Select Case y
  6.         Case Is = 1
  7.             Range("A" & i) = "我"
  8.         Case Is = 2
  9.             Range("A" & i) = "爱"
  10.         Case Is = 0
  11.             Range("A" & i) = "你"
  12.         End Select
  13.     Next
  14.     Range("A100") = Timer - T    '0.109375秒
  15. End Sub

  1. Sub 方法2()
  2.     T = Timer
  3.     For i = 1 To 99 Step 3
  4.         Range("A" & i) = "我"
  5.         Range("A" & i + 1) = "爱"
  6.         Range("A" & i + 2) = "你"
  7.     Next
  8.     Range("A100") = Timer - T    '0.125秒
  9. End Sub

  1. Sub 方法3()
  2.     T = Timer
  3.     HL = Array("我", "爱", "你")
  4.     For i = 1 To 99 Step 3
  5.         Range("A" & i).Resize(3, 1) = WorksheetFunction.Transpose(HL)
  6.     Next
  7.     Range("A100") = Timer - T    '0.03125秒
  8. End Sub

  1. Sub 方法4()
  2.     T = Timer
  3.     HL = WorksheetFunction.Rept("我爱你", 33)
  4.     For i = 1 To 99
  5.         Range("A" & i) = Mid(HL, i, 1)
  6.     Next
  7.     Range("A100") = Timer - T    '0.109375秒
  8. End Sub

  1. Sub 方法5()
  2.     T = Timer
  3.     HL = WorksheetFunction.Rept("我,爱,你,", 1000)
  4.     xm = Split(HL, ",")
  5.     r = UBound(xm)
  6.     Range("a1:a" & r + 1) = WorksheetFunction.Transpose(xm)
  7.     Range("A100") = Timer - T    '0.015625秒0.234375
  8. End Sub

  1. Sub 方法6()
  2. '杰堂远程教室(327712892)提供
  3.     xx = Timer
  4.     For i = 1 To 99
  5.         Select Case i Mod 3
  6.         Case 1
  7.             ad1 = ad1 & ",a" & i
  8.         Case 2
  9.             ad2 = ad2 & ",a" & i
  10.         Case 0
  11.             ad3 = ad3 & ",a" & i
  12.         End Select
  13.     Next i
  14.     Sheet1.Range(Right(ad1, Len(ad1) - 1)) = "我"
  15.     Sheet1.Range(Right(ad2, Len(ad2) - 1)) = "爱"
  16.     Sheet1.Range(Right(ad3, Len(ad3) - 1)) = "你"
  17.     Sheet2.Range("b1") = Timer - xx    '0.015625秒
  18. End Sub
2楼
hlxz
  1. Sub 方法7()
  2. '深山老猫(38677446)
  3.     Dim Ts As Double
  4.     Ts = Timer
  5.     Dim myarrange(1 To 99) As String
  6.     For i = 1 To 99
  7.         myarrange(i) = Mid("你我爱", (i Mod 3) + 1, 1)
  8.     Next i
  9.     Range("A1:A99") = WorksheetFunction.Transpose(myarrange)
  10.     Range("B1") = Timer - Ts
  11. End Sub
  1. Sub 方法8()
  2. '飞翔(65921751) 20:11:38
  3.     最简单最快的写法
  4.     Dim a(1 To 99, 1 To 1)
  5.     Dim b, n As Byte
  6.     Dim t As Double
  7.     t = Timer
  8.     b = Array("我", "爱", "你")
  9.     For i = 1 To 99
  10.         n = IIf(n > 2, 0, n)
  11.         a(i, 1) = b(n)
  12.         n = n + 1
  13.     Next
  14.     [a1:a99] = a
  15.     MsgBox Format(Timer - t, "0.00")    '0.016秒
  16. End Sub
  1. Sub 方法9()
  2.     Dim t As Single
  3.     t = Timer
  4.     [A1] = "我"
  5.     [A100] = "我"
  6.     [A2] = "爱"
  7.     [A3] = "你"
  8.     Range("A1:A3").Copy Destination:=Range("A4:A99")
  9.     MsgBox Timer - t & "毫秒"    '0.015625毫秒
  10. End Sub
  1. Sub 方法10()
  2.     Dim c As Range
  3.     Dim t As Double
  4.     Dim arr()
  5.     t = Timer
  6.     arr = Array("我", "爱", "你")
  7.     Set c = Range("A1:A3")
  8.     With c
  9.         .Value = Application.WorksheetFunction.Transpose(arr)
  10.         .AutoFill Destination:=Range("A1:A99"), Type:=xlFillDefault
  11.     End With
  12.     Range("A100") = Format(Timer - t, "0.0000")
  13. End Sub
  1. Sub 方法11()
  2.     Dim c As Range
  3.     Dim t As Double
  4.     Dim arr()
  5.     t = Timer
  6.     arr = Array("我", "爱", "你")
  7.     Set c = Range("A1:A3")
  8.     With c
  9.         .Value = Application.WorksheetFunction.Transpose(arr)
  10.         .AutoFill Destination:=Range("A1:A99"), Type:=xlFillDefault
  11.     End With
  12.     t = Timer - t
  13.     Debug.Print t
  14. End Sub
3楼
hlxz
hom398
  1. Sub 方法12()
  2.     Dim arrLove(1 To 99, 1 To 1) As String
  3.     Dim i As Byte
  4.     Dim vTime
  5.     Dim bytCount As Byte
  6.     Application.ScreenUpdating = False
  7.     vTime = Timer
  8.     With Sheet1
  9.         For i = 1 To 99
  10.             bytCount = i Mod 3 + 1
  11.             arrLove(i, 1) = Choose(bytCount, "你", "我", "爱")
  12.         Next
  13.         .Range("A1:A99") = arrLove
  14.     End With
  15.     MsgBox Timer - vTime
  16.     Application.ScreenUpdating = True
  17. End Sub

hom398
  1. Sub 方法13()
  2.     Dim arrLove As Variant
  3.     Dim vTime
  4.     Application.ScreenUpdating = False
  5.     vTime = Timer
  6.     With Sheet1
  7.         arrLove = Array("我", "爱", "你")
  8.         .Range("A1:A3") = Application.Transpose(arrLove)
  9.         .Range("A1:A3").Copy .Range("A4:A99")
  10.     End With
  11.     MsgBox Timer - vTime
  12.     Application.ScreenUpdating = True
  13. End Sub

老顽童
  1. Sub 方法14()
  2.     t = Timer
  3.     Range("A1") = "我"
  4.     Range("A2") = "爱"
  5.     Range("A3") = "你"
  6.     a = Range("A1:A3")
  7.     For i = 4 To 99 Step 3
  8.         b = Range("A65536").End(xlUp).Row + 1
  9.         Range(Cells(b, 1), Cells(b + 2, 1)) = a
  10.     Next i
  11.     Erase a
  12.     Range("B1") = Timer - t & "毫秒"    '.015625毫秒或.03125毫秒
  13. End Sub
4楼
willin2000
方法1:
  1. Sub 我爱你()
  2. [a1:a3] = Application.Transpose([{"我", "爱", "你"}])
  3. [a1:a3].Copy [a4:a99]
  4. End Sub

方法2:
  1. Sub 我爱你()
  2. [a1:a99] = Application.Transpose(Split(Left(WorksheetFunction.Rept("我,爱,你,", 40), 199), ","))
  3. End Sub


  1. Sub 我爱你()
  2. [a1:a99] = Application.Transpose(Split(WorksheetFunction.Rept("我,爱,你,", 40), ","))
  3. End Sub
5楼
洋五月
我一种也不会,有得慢慢学了
6楼
bobij
太舒服了,我真的爱上你了
7楼
ldy
狗尾续貂
  1. Sub 我爱你1()
  2.     t = Timer
  3.     [a1:a3] = [{"我"; "爱"; "你"}]
  4.     [a1:a3].Copy [a1:a99]
  5.     Debug.Print Timer - t ' .015625 or 0
  6. End Sub
  1. Sub 我爱你2()
  2.     t = Timer
  3.     [a1:a51] = Evaluate("{" & Application.Rept("""我"";""爱"";""你"";", 17) & "0}")
  4.     [a52:a99] = [a1:a51].Value
  5.     Debug.Print Timer - t '.03125 or .015625
  6. End Sub
  1. Sub 我爱你3()
  2. '  需要引用
  3. '    C:\windows\system32\FM20.DLL
  4. '    Microsoft Forms 2.0 Object Library
  5. '    要是实在找不到,插入一个用户窗体就有了
  6.   t = Timer
  7.     With New DataObject
  8.         .SetText Application.Rept("我" & vbLf & "爱" & vbLf & "你" & vbLf, 33)
  9.         .PutInClipboard
  10.     End With
  11.     [a1].PasteSpecial
  12.     Debug.Print Timer - t '  .0625 or .015625
  13. End Sub
8楼
冰风萧萧
不会
9楼
水星钓鱼
友情参与,学习来了
  1. Sub a()
  2.     Dim i As Date
  3.     i = Timer
  4.     Range("a1:a3") = Application.WorksheetFunction.Transpose(Array("我", "爱", "你"))
  5.     Range("a1:a3").Copy Range("a1:a99")
  6.     MsgBox Timer - i
  7. End Sub
  1. Sub b()
  2.     Dim i As Date
  3.     i = Timer
  4.     Range("a1:a3") =
10楼
eve_saunter
从来没想过有这么多循环法的说。。。
11楼
zldccmx
Ldy说“狗尾续貂”

那老朽来个不算是“画龙点晴”的代码吧 :) ^_^

      '撰写:老朽
      '日期:2010-3-30 上午 08:46:17
Sub 我爱你_老朽()
    t = Timer
    [a1:a99] = "=IF(MOD(ROW(), 3 )=1,""我"",IF(MOD(ROW(),3)=2,""爱"",""你""))"
    [a1:a99] = [a1:a99].Value
    Debug.Print Timer - t    '0 or 1.367188E-02 or .015625


End Sub
12楼
zldccmx
老朽再来个不算是“画龙点晴”的代码吧 :) ^_^

      '撰写:老朽
      '日期:2010-3-30 上午 08:48:18
Sub 我爱你_老朽2()
    t = Timer
    [A1:A99] = "=CHOOSE(MOD(ROW(),3)+1,""你"",""我"",""爱"")"
    [A1:A99] = [A1:A99].Value
    Debug.Print Timer - t    '1.367188E-02 or .015625 or 0
End Sub
13楼
zldccmx
Sub我爱你_老朽3()
    t = Timer
    Set
AWF = Application.WorksheetFunction
    St$ = AWF.Rept("我,爱,你,", 33)
    [A1:A99] = AWF.Transpose(Split(St, ","))
    Debug.Print Timer - t    '1.367188E-02 or .015625 or 0

End Sub
14楼
zldccmx
13楼也可以这样

  1. Sub 我爱你_老朽3()
  2.     t = Timer
  3.     Set AWF = Application.WorksheetFunction
  4.     St$ = AWF.Rept("我 爱 你 ", 33)
  5.     [A1:A99] = AWF.Transpose(Split(St))
  6.     Debug.Print Timer - t ' 0
  7. End Sub
15楼
远方
有意思 谢谢分享
16楼
wnianzhong
学习了,谢谢!
17楼
hanter007
没想到有这么多精彩的方法.学习了.
18楼
wenshui2006
   太强了,,,,这么多的写法,,,,
19楼
sam.tan
学会了,我也爱你们!
20楼
rzz8118
看的眼花缭乱,要是能加代码注释就更好了
21楼
gowowo
第一次发帖, 来个快点的

  1. Sub 方法()
  2.     T = Timer
  3.     Dim A(1 To 99, 0) As String
  4.     A(1, 0) = "我": A(2, 0) = "爱": A(3, 0) = "你"
  5.     For i = 1 To 3
  6.       For j = i To 99 Step 3
  7.         A(j, 0) = A(i, 0)
  8.       Next
  9.     Next
  10.     Range("A1:A99") = A
  11.     Range("A100") = (Timer - T) '0.0000秒 太快了
  12. End Sub
22楼
yncxxmj
看了有点头晕了,有这么多写法。
23楼
大黄蜂
gowowo,你的方法最牛,以后要常发帖,期待!
24楼
wangqilong1980
收藏慢慢学习。越学习,越发现自已的无知!
25楼
hd030502
下来学习
26楼
zhangguangku071
高手,学习中
27楼
wqfzqgk
最普通的写法:
Range("a1,a4,a7...") = "我"
Range("a2,a5,a8...") = "爱"
Range("a3,a6,a9...") = "你"

28楼
wqfzqgk
a = Array("我", "爱", "你")
For i = 1 To 99 Step 3
addr = addr & ",a" & i
Next
Range(Right(addr, Len(addr) - 1)) = a(0)
Range(Right(addr, Len(addr) - 1)).Offset(1, 0) = a(1)
Range(Right(addr, Len(addr) - 1)).Offset(2, 0) = a(2)
29楼
lgb6699
太漂亮了,每一种写法都是一种心得,活学才能活用.
30楼
ljh29206
Sub 方法2()
For i = 1 To 99 Step 3
Cells(i, 1) = "我"
Cells(i + 1, 1) = "爱"
Cells(i + 2, 1) = "你"
Next
End Sub
31楼
bensonlei
很好的帖子,学会了怎样去计算时间!

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap