Excel精英培训网

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

range对象如何赋值给单元格

[复制链接]
发表于 2019-5-26 23:15 | 显示全部楼层 |阅读模式
1学分
本帖最后由 孤梅独傲 于 2019-5-26 23:16 编辑

下面图1的代码我在2003版本中成功了,为什么到2016版本赋值后excel表格中什么都没有
1558883412(1).png

最佳答案

查看完整内容

上面有人回答了你的问题,这可以算作是标准方法,借助了数组做传递媒介; 我仔细考虑了你的提问,我想讲点range和cells的联系,或许对你理解上有帮助: 1、单元格是range,a1可以写成range("a1")或者写成[a1]; 2、cells是range的变量表达方法,尤其适合循环,在help也是被推荐的方法: range("a1")可以写成cells(1,1) range("a1:b5")可以写成range(cells(1,1),cells(5,2)),其中cells(1,1)是第一行第一列就是a1,cells(5,2 ...
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2019-5-26 23:15 | 显示全部楼层
孤梅独傲 发表于 2019-5-27 12:13
.Sheets("显示").Range("a1:" & Cells(ran.Rows.count, ran.Columns.count).Address).Value = ran.Value
...

上面有人回答了你的问题,这可以算作是标准方法,借助了数组做传递媒介;

我仔细考虑了你的提问,我想讲点range和cells的联系,或许对你理解上有帮助:
1、单元格是range,a1可以写成range("a1")或者写成[a1];
2、cells是range的变量表达方法,尤其适合循环,在help也是被推荐的方法:
range("a1")可以写成cells(1,1)
range("a1:b5")可以写成range(cells(1,1),cells(5,2)),其中cells(1,1)是第一行第一列就是a1,cells(5,2)是第5行第2列就是b5
range("c2")也可以写成cells(2,"c"),第二行c列,当然是c2了
range("d3:f7")可以写成range("d3",cells(7,6)),这里混用了"a1"和cells两种格式,你.Sheets("显示").Range("a1:" & Cells(ran.Rows.count, ran.Columns.count).Address).Value就是这种写法的变体,但我认为你写的很啰嗦了;
3、关于整体赋值:
range("d3",cells(7,6))=10,对"a3:f7"区域全部赋值10;如果要把一个单元格区域整体赋值给另一个单元格区域(跨表也可以),上楼是方法之一;另一种是用循环,逐一赋值。虽然从代码繁简程度看楼上的方法更简单也快,但我还是建议先学好循环,这是编程的基础,循环用不好基本上是学不好编程的;


回复

使用道具 举报

发表于 2019-5-27 08:17 | 显示全部楼层
本帖最后由 zjdh 于 2019-5-27 08:23 编辑

把一个区域赋值给一个单元?成功的状态是怎样的?
回复

使用道具 举报

 楼主| 发表于 2019-5-27 11:08 来自手机 | 显示全部楼层
zjdh 发表于 2019-5-27 08:17
把一个区域赋值给一个单元?成功的状态是怎样的?

之前没做测试,之前ran的值只有一个,所以成功了,现在该怎么编写
回复

使用道具 举报

发表于 2019-5-27 11:29 | 显示全部楼层
孤梅独傲 发表于 2019-5-27 11:08
之前没做测试,之前ran的值只有一个,所以成功了,现在该怎么编写

我看得有点摸不着头脑。你要赋值那就给它赋值,这没任何技巧,直接用=引用。要把sheet2的单元格c10的值赋值给sheet1的单元格a5,写成:worksheets("sheet1").range("a5")=worksheets("sheet2").range("c10")
这与在工作表里用=直接引用其他表的数据是一个道理,只是写法略有不同。不需要set这么复杂的操作。
回复

使用道具 举报

 楼主| 发表于 2019-5-27 11:48 来自手机 | 显示全部楼层
hfwufanhf2006 发表于 2019-5-27 11:29
我看得有点摸不着头脑。你要赋值那就给它赋值,这没任何技巧,直接用=引用。要把sheet2的单元格c10的值赋 ...

之所以这样写是因为区域不确定
回复

使用道具 举报

发表于 2019-5-27 12:13 | 显示全部楼层
孤梅独傲 发表于 2019-5-27 11:48
之所以这样写是因为区域不确定

1、首先区域肯定是可以通过某种算法确定的,不管方法如何,总归是区域,因此不能直接用=来一次性解决;
2、区域赋值必须保证区域的大小匹配,一个大区域向小区域赋值或者一个小区域向大区域赋值并非一定不可行,但需要考虑很多额外因素,一言两语说不清楚,需要仔细去了解excel的语法限制,最好是两个区域要相等才是最好的。既然一个区域的大小是动态的,另一个区域的大小也必须保持与前者同步;
3、技术上来说,最常用的方法自然是循环。我前面说了一个单元格的赋值,一个区域的赋值就是一个单元格赋值的双层循环。也不排除用range("a1").resize或者是range("a1").offset这类方法来实现,总体上循环是最通用的,其他方法则要看个人喜好,多数情况下还需要依赖数组,我个人认为没有循环简单;


回复

使用道具 举报

 楼主| 发表于 2019-5-27 12:13 来自手机 | 显示全部楼层
hfwufanhf2006 发表于 2019-5-27 11:29
我看得有点摸不着头脑。你要赋值那就给它赋值,这没任何技巧,直接用=引用。要把sheet2的单元格c10的值赋 ...

.Sheets("显示").Range("a1:" & Cells(ran.Rows.count, ran.Columns.count).Address).Value = ran.Value
改成这样是可以的,你还有没别的办法
回复

使用道具 举报

发表于 2019-5-27 12:45 | 显示全部楼层
这样可以吗?
  1. Dim arr
  2. arr = .Sheets("单只翻倍记录").UsedRange
  3. .Sheets("显示").[a1].Resize(UBound(arr), UBound(arr, 2)) = arr
复制代码
回复

使用道具 举报

发表于 2019-5-28 23:25 | 显示全部楼层
出于这个目的那就简单啦
Set ran = Sheets(1).UsedRange
ran.Copy Sheets(2).Range("A1")
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 15:21 , Processed in 0.612793 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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