贴吧朋友圈几点推广比较好找谁比较好

查看: 9356|回复: 39
疑惑,将单元格区域赋值给数组(问题有更新,麻烦各位老师)数组元素赋值给单元格区域
阅读权限30
在线时间 小时
& & & & & & & &
本帖最后由 zengxp 于
13:43 编辑
把不连续的单元格赋值给数组,不可行么?? 一直困惑! (我知道可以把相连区域一起赋值,然后去其中的 1, 3 的值)
麻烦哪位老师给与指点呢?& &----------------【五楼、七楼已得到赵刚版主的解答,同时感谢香川老师的回复】
Sub ceshi()
& & Dim Rng As Range
& & r = Range(&a65536&).End(3).Row
& & Set Rng = Union(Range(&a1:a& & r), Range(&c1:d& & r))& && && && && && && & ‘&&用 Union 方法得到的不相连区域无法赋值给数组么?
& & Rng.Select
& & arr = Selection
& & Range(&G1&).Resize(Rng.Rows.Count, Rng.Columns.Count) = arr& &
& && && && && &&&' ————Rng。Select 明明是选中的&&A 和C 两列,为什么Rng.Columns.Count 运行之后还是1呢,数组arr 得到的也是N 行1列的数据
& & For j = LBound(arr, 2) To UBound(arr, 2)& && && && && && && && && &&& 'UBound(arr, 2)=1&&?? 这是怎么回事呢
& && & For i = LBound(arr) To UBound(arr)
& && && &&&Debug.Print arr(i, j)
& && & Next i
& & Next j
(8.63 KB, 下载次数: 32)
18:21 上传
点击文件名下载附件
【问题2】-------------更新问题
这个问题是修改别人代码时遇到的,以下代码本是论坛上另一位老师所写,这里提出一些修改时遇到的问题:
简单来说就是:&&
& & ReDim crr(1 To 100)& && && && && && && && && && &’定义一个数组
& & For i = 2 To 10& && && && && && && && && && && && &&&'循环给数组元素赋值
& && &&&ke = Range(Cells(i, 1), Cells(i , 6))& && & '赋值为单元格区域,及ke 也是数组
& && &&&arr(i) = ke& && &&&
& && & '###&&& && && && && && && && && && &&&
& && &&&Range(&a2&).Resize(10, UBound(arr)) = arr& && &’无法赋值,无法读出arr !!& &而此代码放到 ### 位置逐个读出是可以的&&
详见附件:
(33.95 KB, 下载次数: 32)
11:43 上传
点击文件名下载附件
完整代码如下:
Sub dd()
&&Dim arr, brr(), i, j, m
&&With Sheet3
& & r = .[D65536].End(3).Row
& & arr = .Range(&A1:Q& & r)
& & ReDim brr(1 To UBound(arr) * 3, 1 To 4)
& & ReDim crr(1 To UBound(brr))
& & For i = 2 To UBound(arr)&&'行循环(除标题行)
& && & For j = 1 To 3& && && & '列循环
& && && & If Len(arr(i, j)) Then&&'非空白
& && && && & m = m + 1
& && && && & brr(m, 1) = arr(i, j)&&'姓名
& && && && & brr(m, 2) = arr(1, j)&&'对应姓名列标题
& && && && &
& && && && & brr(m, 3) = arr(i, j + 14) '对应各自佣金
& && && && &
& && && && &&&'===========================
& && && && & 'Sheet4.Cells(m + 1, &C&).Resize(1, 11) = .Range(.Cells(i, &D&), .Cells(i, &N&)).Value
& && && && &&&'===========================
& && && && &&&'上面的语句用数组如何表达呢? 假如像下面那样是可以运行的:
& && && && &&&'ke = .Range(.Cells(i, &D&), .Cells(i, &N&))
& && && && &&&'Sheet4.Cells(m + 1, &C&).Resize(1, UBound(ke, 2)) = ke
& && && && &&&'*****************************
& && && && &&&'但是有没有更好的方法呢? 比如:
& && && && &&&'再定义一个数组 ReDim crr(1 To UBound(brr)) ,然后把对于单元格区域赋值给数组元素
& && && && &&&crr(m) = .Range(.Cells(i, &D&), .Cells(i, &N&))
& && && && &&&
& && && && &&&'Sheet4.Cells(m + 1, &C&).Resize(1, UBound(crr(m), 2)) = crr(m)&&'测试也可以运行
& && && && &&&'
& && && && &&&'======然后我的问题是:
& && && && &&&'
& && && && &&&'如何一次性的把crr 1-m ,直接赋值给下面的单元格区域呢
& && && && &&&'Sheet4.Cells(2, &C&).Resize(m, UBound(crr(m),2))
& && && && &&&'如循环外所示
& && && & End If& && & '&&|
& && & Next& && && && &'&&|
& & Next& && && && && &'&&|
&&End With& && && && &'&&|& && & 循环赋值后crr 的元素 从1 到 m 都是数组,那么 crr 本身是什么了呢??
& & '==================这个位置
& & Sheet4.Cells(2, &C&).Resize(m, UBound(crr)) = crr& & '无法赋值
& & '==================
& & Sheet4.[A2].Resize(m, 2) = brr& && && && && && && && && &'可以正常赋值
& & Sheet4.[N2].Resize(m, 1) = Application.Index(brr, 0, 3)&&'可以正常赋值
End Sub
复制代码
阅读权限95
在线时间 小时
把连续区域赋给数组,通过数组循环;
也可以直接操作单元格,用自带的属性方法速度较快。如编辑、定位、常量,复制粘贴到g1
阅读权限95
在线时间 小时
你在工作表中选中的是合并区域这个不假,
但在代码过程中直接操作合并区域转换为VBA数组时【只能得到第一块连续区域作为数组对象】
按你的例子,合并区域是A1:A7,C1:D7,
但arr=Selection时,转换结果只能是:arr=A1:A7 即第一快连续区域,不会包括C1:D7区域。
阅读权限95
在线时间 小时
在代码中操作合并区域,可以对合并区域进行字体、单元格颜色设置等操作,
但实际上并不作为一个完整的数据区域对待。
阅读权限95
在线时间 小时
逐个Areas处理请参考:Sub ceshi()
& & Dim Rng As Range, rngArea As Range, arr
& & r = Range(&a65536&).End(3).Row
& & Set Rng = Union(Range(&a1:a& & r), Range(&c1:d& & r))
& & For Each rngArea In Rng.Areas '多重选定区域逐个分区
& && &&&If rngArea.Cells.Count = 1 Then
& && && && &Debug.Print rngArea.Value '一个单元格不是数组,直接显示
& && &&&Else
& && && && &arr = rngArea.Value '是数组
& && && && &For j = LBound(arr, 2) To UBound(arr, 2)
& && && && && & For i = LBound(arr) To UBound(arr)
& && && && && && &&&Debug.Print arr(i, j)
& && && && && & Next
& && && && &Next
& && &&&End If
& & Next
End Sub
复制代码
阅读权限10
在线时间 小时
本帖最后由 我是小马儿2 于
21:41 编辑
香川群子 发表于
在代码中操作合并区域,可以对合并区域进行字体、单元格颜色设置等操作,
但实际上并不作为一个完整的数据 ...
那请问,用 union 连接进来的不继续的单元格,如果要赋值给数组的话,应该怎么做好一点呢?
如 arr = union([a1:a10],[e1:e10]) '这只会得到A列
想达到连续时以上的效果。
只能用循环吗?
阅读权限95
在线时间 小时
或IsArray 函数判断是不是数组Sub ceshi()
& & Dim Rng As Range, rngArea As Range, arr
& & r = Range(&a65536&).End(3).Row
& & Set Rng = Union(Range(&a1:a& & r), Range(&c1:d& & r))
& & For Each rngArea In Rng.Areas '多重选定区域逐个分区
& && &&&arr = rngArea.Value
& && &&&If Not IsArray(arr) Then '直接判断arr是不是数组
& && && && &Debug.Print rngArea.Value '不是数组,直接显示
& && &&&Else
& && && && &For j = LBound(arr, 2) To UBound(arr, 2)
& && && && && & For i = LBound(arr) To UBound(arr)
& && && && && && &&&Debug.Print arr(i, j)
& && && && && & Next
& && && && &Next
& && &&&End If
& & Next
End Sub复制代码
感谢赵版主的帮助
阅读权限10
在线时间 小时
5楼的方法管用。
阅读权限30
在线时间 小时
dsmch 发表于
把连续区域赋给数组,通过数组循环;
也可以直接操作单元格,用自带的属性方法速度较快。如编辑、定位、常 ...
如果是连续的区域,那么像下面那样不 就可以了么?
&&r = Range(&a65536&).End(3).Row
& &arr=Range(&A1:D& & r)& && &
我的疑惑就是怎么处理不连续的区域& && && &&&
阅读权限30
在线时间 小时
本帖最后由 zengxp 于
09:40 编辑
香川群子 发表于
在代码中操作合并区域,可以对合并区域进行字体、单元格颜色设置等操作,
但实际上并不作为一个完整的数据 ...
我的疑惑就在这里,&&我反复测试得到的结论也正如你三楼所说的,合并的区域赋值给数组后只得到第一块连续区域。
两外一个疑惑是 Selection.Columns.Count&&竟然也只是取得的第一块连续区域的列数? 这我觉得很奇怪呢?
既然可以使用 Union方法,为什么无法把它看做一个整体来处理呢?
*******以下对三种方式对 Selection进行赋值,也有不同结果
& &Selection = 1& && &'可以正常对 Selection区域赋值为 1& &&&
****************&&****************& && && &
& & For Each a In Selection& &'此种遍历无法赋值????& &
& && & n = n + 1
& && &&&a = n
**************** ****************
& & For i = 1 To 21& & '&&仅能对 第一块连续区域 赋值,超出部分将赋值给超出的区域& && &
& && &&&Selection.Cells(i) = i
最新热点 /1
ExcelHome每周都有线上直播公开课,
国内一流讲师真身分享,高手贴身答疑,
赶不上直播还能看录像,
关键居然是免费的!
厚木哥们都已经这么努力了,
你还好意思说学不好Office。
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师VBA单元格赋值问题【excel吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:146,896贴子:
VBA单元格赋值问题收藏
怎么引用表格的值,然后计算完后再把值赋到引用的表格里的。
[a1]=[a1]+5
登录百度帐号推荐应用excel vba如何将选中的不连续单元格赋值到数组-_星空见康网
excel vba如何将选中的不连续单元格赋值到数组
excel vba如何将选中的不连续单元格赋值到数组
相关说明:
多谢两位,经过启发,得到了想要的代码:Function test(ParamArray inp())Dim i, jDim score()For j = 0 ToUBound(inp)For Each cl In inp(j)i = i + 1ReDim Preserve score(i)score(i) = clNextNext…End Function
Option Base 1Sub test()
Dim Arr() As Variant
Dim i As Long
For Each cl In Selection
ReDim Preserve Arr(i)
Arr(i) = cl
Next cl‘在这里你就可以使用ARR数组了End Sub
。,不过楼主可以通过UNION语句把不相连接单元格拼接在一起构成个range然后用for each 的方法把数据装入数组。,不能保留源数据所存地址的其他信息。但是这样不好的是只能得到一列或一行数据没试过楼下的行不行
EXCEL VBA中选中单元格的方法很多,列举如下:1. 选中单个单元格(以单元格A1为例),可以表述为range(&a1&).select或者表述为cells(1,1).select也可以简写为[a1].select2. 选中连续单元格(以A1:B2为例),可以表述为range(&a1:b2&).select或者range(range(&a1&),range(&b2&)).select 此处的range(&a1&)同样可以表述为第一步中的cell与[a1]形式3. 选中不连续单元格(以A1:B2,A5:B7为例),可以表述为Union(Range(&a1:b2&), Range(&a5:b7&)).Select 同理此处的range可以用第一步的cell与[]来代替。
各位朋友,你有没有想到你将来的归宿?你是有灵魂的,有灵魂是要存到永远的。你要在哪里度你的永远呢?世人都已犯了罪,没有一个例外的,既然犯了罪,就必须要在火湖里受永远的报应。但神爱世人,不愿人灭亡,所以祂差派祂的儿子耶稣基督替人受罪。祂没有罪,但祂担当了我们的罪,被钉在十字架上。祂死后3天复活,40天后就升回天上去了。如果我们信有一位神,信耶稣在十字架上为我们的罪死了,因祂的死,我们便得救。凡信靠主耶稣,靠祂所流的宝血,代赎我们的罪,相信祂是从死里复活,就必得救。祂把永生(祂自己永远的生命)放在我们的灵里,这样我们的灵魂有了永生,就不会灭亡,而是永远得救的。我们有一个永远的灵魂,就得以解决灵的归宿。天家或是火湖都是永存的。请我们不要错过机会,以免将来后悔莫及,永受痛苦。回头吧!何必死亡呢?信主耶稣的人有永生。不信的人得不着永生,神的震怒常在他身上。
“我相信灵魂永远存在。科学已证明了没有任何东西会完全毁灭。因此,生命与灵魂……是永存的。”(生物学家 Edwin Conklin)
你可能想看的相关专题

我要回帖

更多关于 重庆网络推广找谁 的文章

 

随机推荐