Excel精英培训网

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

[已解决]预设的变量用Array

[复制链接]
发表于 2011-1-8 01:05 | 显示全部楼层 |阅读模式
10学分
在论坛学习,学会了许多的语句,如数组的使用,简单的自定义“函数”,任何查找等了。
今突发奇想,想在预设的变量设置为数组arr不知道可以不,请高手指教。

如我编写了一个查找的语句如下:

Sub 查找(查$, 列c$)

语句大意内容为:
在变量(列c)里面查找全部的值(查a)
然后在F1的列显示出所有找到值的地址
End Sub


这样我就可以用如下的宏来自己得到想要的结果
如:
Sub 具体查找()

call "查找("老师",“H”)

End Sub

或者:
Sub 具体查找()
abc="老师

call "查找(abc,“H”)

End Sub

现在我想变更【Sub 查找】,因为它只可以查找一个内容
我想这里的变量“查$”变为数组的形式,可以查找多个内容而得出多个答案
如:
Sub 具体查找()
Dim arr
arr = Array("老师“,"学生“,"论坛“,…)

call "查找(abc,“H”)

End Sub

然后再我原来写的语句里面加上fou i =UBound(arr)(这个是意思表达,实际为fou i =UBound(查$)的变量)
这里我只会设想,请老师指教怎么写——让【Sub 查找(查$, 列c$)】里面的变量"查$"可以使用成多个值(数组)



最佳答案
2011-1-8 22:11
以下仅在你的原代码上稍加了点,是否是你想要的?
Sub 实验查找1()
Call 查找("xxx", "e")
End Sub
Sub 实验查找2()
Call 查找(Array("xxx", "dxx"), "e")
End Sub

Sub 查找(zhao, Ly$)
Dim RB&, k&, i&, ar1, Ads1$, Ads2$, r&, key, col%
Dim MRG As Range, C As Range, arr(), brr(), J&, jj&, tmp()
    RB = Range("B65536").End(xlUp).Row
ReDim arr(1)
If Not IsArray(zhao) Then
   ReDim tmp(1 To 1)
   tmp(1) = zhao
Else
   tmp = zhao
End If
col = 8
For Each key In tmp
Set C = Range(Ly & "2:" & Ly & RB).Find(What:=key, LookIn:=xlValues, LookAt:=xlPart)
        
    If Not C Is Nothing Then
        arr(1) = C.Offset(0, -2)
        Ads1 = C.Address:       r = C.Row:   k = 1 '        k = 0
                Do
                   Set C = Range(Ly & "2:" & Ly & RB).FindNext(C) '下一个的循环
                       Ads2 = C.Address
                    If Ads2 <> Ads1 Then
                        k = k + 1
                        ReDim Preserve arr(k)
                        arr(k) = C.Offset(0, -2)
                    End If
                Loop While Ads1 <> C.Address And Not C Is Nothing
               
Columns(col).ClearContents
Cells(1, col).Resize(UBound(arr), 1) = Application.WorksheetFunction.Transpose(arr)
col = col + 1
End If
Next
End Sub


excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2011-1-8 14:53 | 显示全部楼层
呀,还没有高手来看看呀

自己顶下
回复

使用道具 举报

发表于 2011-1-8 15:13 | 显示全部楼层
你把代码贴出来,看看你的输入和结果输出,方便帮你改
回复

使用道具 举报

 楼主| 发表于 2011-1-8 15:24 | 显示全部楼层
阿童木 发表于 2011-1-8 15:13
你把代码贴出来,看看你的输入和结果输出,方便帮你改

代码太有多,能告知怎么设置这个变量,如果我应该就可以修改了
增加1个for i = 1 to arr计数
里面的输出为[K1].offset(0,I),RESEIZ(N,1)=自己的结果


回复

使用道具 举报

发表于 2011-1-8 16:44 | 显示全部楼层
说实话,没看明白你的题意
回复

使用道具 举报

 楼主| 发表于 2011-1-8 21:29 | 显示全部楼层
阿童木 发表于 2011-1-8 16:44
说实话,没看明白你的题意

自己的文件大了,语句多了,所以做了个例子,希望老师能解答其实,我感觉自己是已经很把问题描述清楚的,估计是描述得不专业了   :(

游客,如果您要查看本帖隐藏内容请回复






希望高手来看看
回复

使用道具 举报

 楼主| 发表于 2011-1-8 21:30 | 显示全部楼层
xdwy81129 发表于 2011-1-8 21:29
自己的文件大了,语句多了,所以做了个例子,希望老师能解答其实,我感觉自己是已经很把问题描述清楚的, ...

文件上附件了: 变量想多个.rar (19.05 KB, 下载次数: 5)
回复

使用道具 举报

发表于 2011-1-8 22:11 | 显示全部楼层    本楼为最佳答案   
以下仅在你的原代码上稍加了点,是否是你想要的?
Sub 实验查找1()
Call 查找("xxx", "e")
End Sub
Sub 实验查找2()
Call 查找(Array("xxx", "dxx"), "e")
End Sub

Sub 查找(zhao, Ly$)
Dim RB&, k&, i&, ar1, Ads1$, Ads2$, r&, key, col%
Dim MRG As Range, C As Range, arr(), brr(), J&, jj&, tmp()
    RB = Range("B65536").End(xlUp).Row
ReDim arr(1)
If Not IsArray(zhao) Then
   ReDim tmp(1 To 1)
   tmp(1) = zhao
Else
   tmp = zhao
End If
col = 8
For Each key In tmp
Set C = Range(Ly & "2:" & Ly & RB).Find(What:=key, LookIn:=xlValues, LookAt:=xlPart)
        
    If Not C Is Nothing Then
        arr(1) = C.Offset(0, -2)
        Ads1 = C.Address:       r = C.Row:   k = 1 '        k = 0
                Do
                   Set C = Range(Ly & "2:" & Ly & RB).FindNext(C) '下一个的循环
                       Ads2 = C.Address
                    If Ads2 <> Ads1 Then
                        k = k + 1
                        ReDim Preserve arr(k)
                        arr(k) = C.Offset(0, -2)
                    End If
                Loop While Ads1 <> C.Address And Not C Is Nothing
               
Columns(col).ClearContents
Cells(1, col).Resize(UBound(arr), 1) = Application.WorksheetFunction.Transpose(arr)
col = col + 1
End If
Next
End Sub


评分

参与人数 2 +23 收起 理由
amulee + 20 最佳奖励
xdwy81129 + 3 最佳答案,符合题意

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2011-1-8 22:22 | 显示全部楼层
回复 djyjysxxs 的帖子

是我想要的目的
学习了,就是不懂怎么让第一个变量变成几个变量一起使用使用,学习到了:
If Not IsArray(zhao) Then

For Each key In tmp


同时在第一行不指定出变量的类型,感谢赐教了
回复

使用道具 举报

发表于 2011-1-9 17:08 | 显示全部楼层
{:4612:}带参数的SUB过程,学习了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 14:19 , Processed in 0.309772 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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