Excel精英培训网

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

[已解决]请教变量赋值的问题。

[复制链接]
发表于 2013-2-17 17:04 | 显示全部楼层 |阅读模式
请看附件,User_Password = Cells(Worksheets("user&password").Range("a:a").Find(User_Name).Row, 2).Value,用这个方法给变量赋值似乎有点绕,有没有更简单、直接和方便的方法?

登录窗口.rar (11.31 KB, 下载次数: 10)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-2-17 17:17 | 显示全部楼层
可以换成一个循环
  1. With Worksheets("user&password")
  2.     For i = 1 To Range("a65536").End(3).Row
  3.        If Cells(i, 1) = User_Name Then
  4.            User_Password = Cells(i, 2)
  5.            Exit For
  6.        End If
  7.     Next
  8. End With
复制代码
回复

使用道具 举报

发表于 2013-2-17 17:22 | 显示全部楼层    本楼为最佳答案   
本帖最后由 爱疯 于 2013-2-28 17:09 编辑








因为需要找的密码在单元格里,所以必须读该单元格。
因为密码在用户名右側单元格,所以可选择1楼这种方式,也可
User_Password = Worksheets("user&password").Range("a:a").Find(User_Name).Offset(0, 1)

假如密码全是用户名首位字符,那表达式就可以“变”简单了
User_Password = left(User_Name,1)



回复

使用道具 举报

发表于 2013-2-17 17:28 | 显示全部楼层
你的这句就很简单的了呀
改为这样你看行不?
登录窗口.rar (10.87 KB, 下载次数: 4)
回复

使用道具 举报

 楼主| 发表于 2013-2-17 17:30 | 显示全部楼层
爱疯 发表于 2013-2-17 17:22
因为需要找的密码在单元格里,所以必须读该单元格。
因为密码在用户名右側单元格,所以可选择1楼这种方式, ...

你好,我在想find这个方法会不会很耗时?这是数量少,如果是1万行呢?
回复

使用道具 举报

发表于 2013-2-17 17:41 | 显示全部楼层
如果是1万行或更多,且需考虑耗时,

当然可去选择其它方式,如数组(如4#)、字典等。




回复

使用道具 举报

发表于 2013-2-17 17:42 | 显示全部楼层
本帖最后由 hoogle 于 2013-2-17 19:19 编辑
silenthunter 发表于 2013-2-17 17:30
你好,我在想find这个方法会不会很耗时?这是数量少,如果是1万行呢?


这个不会很耗时,即使是1万行,你查找的只是一个数据,对程序的影响很小。
回复

使用道具 举报

 楼主| 发表于 2013-2-17 20:44 | 显示全部楼层
本帖最后由 silenthunter 于 2013-2-17 20:46 编辑
爱疯 发表于 2013-2-17 17:22
因为需要找的密码在单元格里,所以必须读该单元格。
因为密码在用户名右側单元格,所以可选择1楼这种方式, ...

你好。offset很好很直观,虽然我学习过但没想到用它。

但是有个问题,Worksheets("user&password").Range("a:a").Find(user_name) 返回字符串内容的,不是返回单元格对象。不是单元格对象为什么也可以直接加.offset呢?
回复

使用道具 举报

 楼主| 发表于 2013-2-17 20:47 | 显示全部楼层
hoogle 发表于 2013-2-17 17:42
这个不会很耗时,即使是1万行,你查找的只是一个数据,对程序的影响很小。

谢谢。其实我只是想展开思考,估计我的工作不需要碰到1万行的数据量。
回复

使用道具 举报

发表于 2013-2-17 21:06 | 显示全部楼层
silenthunter 发表于 2013-2-17 20:44
你好。offset很好很直观,虽然我学习过但没想到用它。

但是有个问题,Worksheets("user&password").Ra ...

Worksheets("user&password").Range("a:a").Find(user_name)
并不是返回字符串,而是因你把返回这个range对象放入Let 语句右侧,而Let 语句是取对象的值(而非对象本身),赋给变量。
x=Worksheets("user&password").Range("a:a").Find(user_name)

假如希望得到range对象,就需用set 语句
set x=Worksheets("user&password").Range("a:a").Find(user_name)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 04:04 , Processed in 0.498106 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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