Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2721|回复: 7

[已解决]for循环内的调用

[复制链接]
发表于 2014-4-14 23:22 | 显示全部楼层 |阅读模式
想通过function的过程,实现循环内的值传递,
Sub mai()
pt = cd(m)
r1 = Range("b65536").End(xlUp).Row
Cells(r1 + 1, 2) = m
End Sub
Function cd(ByRef mp)
For A = 1 To 5
mp = mp + A
Next
End Function

想实现的结果是:
1
3
6
10
15

但实际结果
15

再请问,cells(r1+1,2)=pt时,为何为空,
请大侠们帮忙。
最佳答案
2014-4-14 23:54
  1. Sub FavoriteCities3()

  2.     Dim arr(1 To 5, 1 To 1)
  3.     arr(1, 1) = 1
  4.     Hallo arr()
  5.     Range("a1").Resize(5).Value = arr
  6. End Sub

  7. Sub Hallo(cities())
  8.     Dim counter As Integer
  9.     For counter = 2 To 5
  10.         cities(counter, 1) = cities(counter - 1, 1) + counter
  11.     Next
  12. End Sub
复制代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-4-14 23:30 | 显示全部楼层
这个返回值又不是数组,function就是一个累加的代码。
回复

使用道具 举报

发表于 2014-4-14 23:42 | 显示全部楼层
  1. Sub main()
  2.     m = 0
  3.     For a = 1 To 5
  4.         Call cd(m, a)
  5.         Cells(a, 1).Value = m
  6.     Next
  7. End Sub

  8. Function cd(ByRef mp, i)
  9.      mp = mp + i
  10. End Function
复制代码
回复

使用道具 举报

发表于 2014-4-14 23:47 | 显示全部楼层
或者你用递归,但是不能用引用传递。
  1. Sub main()
  2.     Call cd(5)
  3. End Sub

  4. Function cd(mp)
  5.      If mp > 1 Then
  6.         cd = mp + cd(mp - 1)
  7.     Else
  8.         cd = 1
  9.     End If
  10.      Cells(mp, 1) = cd
  11. End Function
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-4-14 23:49 | 显示全部楼层
hwc2ycy 发表于 2014-4-14 23:30
这个返回值又不是数组,function就是一个累加的代码。

Sub FavoriteCities3()

Dim cities(3) As String

cities(1) = "Baltimore"
cities(2) = "Atlanta"
cities(3) = "Boston"
Hallo cities()
End Sub
Sub Hallo(cities() As String)
Dim counter As Integer
For counter = 1 To 6
MsgBox "Hello " & cities(counter)
Next
End Sub

这个是从sub来传递,我想数组也这样返回,应怎样写,
回复

使用道具 举报

 楼主| 发表于 2014-4-14 23:51 | 显示全部楼层
f1red88 发表于 2014-4-14 23:49
Sub FavoriteCities3()

Dim cities(3) As String

明白了,谢谢版主
回复

使用道具 举报

发表于 2014-4-14 23:54 | 显示全部楼层    本楼为最佳答案   
  1. Sub FavoriteCities3()

  2.     Dim arr(1 To 5, 1 To 1)
  3.     arr(1, 1) = 1
  4.     Hallo arr()
  5.     Range("a1").Resize(5).Value = arr
  6. End Sub

  7. Sub Hallo(cities())
  8.     Dim counter As Integer
  9.     For counter = 2 To 5
  10.         cities(counter, 1) = cities(counter - 1, 1) + counter
  11.     Next
  12. End Sub
复制代码
回复

使用道具 举报

发表于 2014-4-15 09:14 | 显示全部楼层
hwc2ycy 发表于 2014-4-14 23:54

花亲,你这么晚还不睡,馅儿知道么?
以后你就只选择三段以上求助中不?给我们留点练手的题呀
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-20 13:38 , Processed in 0.300730 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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