vba里面 cell和cells sheet和sheets有啥区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vba里面 cell和cells sheet和sheets有啥区别相关的知识,希望对你有一定的参考价值。
为什么有的用cell有的有用cells
很简单呀,Cells 是指定范围内的单元格,可以包含1个或1个以上的单元格;Cell 是指定单元格,只包含1个单元格。Sheet 同理。 参考技术A CELLS(y,x)是单个单元格对像,两个参数分别为行和列;Range()则是指一个区域,区域中可以是一个单元格,也可以是多个单元格。
VBA中常这样写:Range(cells(y1,x1),cells(y2,x2)).Select,就是指选中以cells(y1,x1)和cells(y2,x2)两单元格为对角线的一个区域。
----------------
赋值的话,如下几句都是赋值的,区别还是一样,Cells()是对一个单元格赋值,而Range()则可以对一个区域的所有单元格赋值:
Range("A1:D10").FormulaR1C1
=
"10"
Range("A1:D10").Value
=
100
Range("A13").Value
=
1
Cells(13,
1).FormulaR1C1
=
"10"
Cells(13,
1).Value
=
100
说不上哪更好,要看你的需求,通常哪个随手就用哪个了。
---------------------
是的,Value在多数时候是可以省略的。如下所示:
Range("A1:D9")
=
"123"
Cells(3,
3)
=
"300"
Worksheets("Sheet1").Range("A1")
=
3.14159
但如下所示的第二个.Value就不能省略,省略的话,不会报错,但是结果不正确。
'本示例在
Sheet1
上的单元格区域
A1:D10
中进行循环。如果这些单元格中的某个值小于
0.001,则将其值替换为
0(零)。
For
Each
c
in
Worksheets("Sheet1").Range("A1:D10")
If
c.Value
<
0.001
Then
c.Value
=
0
End
If
Next
c
有书上有对程序员的忠告,意思是这样的:对可省略又可不省略的关键字,最好不要省略而是写完整。这样既增加程序的可读性,又可避免歧义和错误。 参考技术B cells和sheets都是对象名.是保留字段.比如 cells(1,1) sheets(1)等
sheet可以指属性但不是对象名,也可以自己定位为变量名.比如 workbooks.sheet
cell什么都不是.最多用来定义为变量名.本回答被提问者和网友采纳
复制和粘贴具有随机值的单元格
【中文标题】复制和粘贴具有随机值的单元格【英文标题】:Copy and paste cells with random values 【发布时间】:2022-01-22 07:02:07 【问题描述】:我的 VBA 代码是:
Sub hello()
Dim i As Long
Sheets("Sheet10").Select
For i = 3 To 101
Cells(i, 21).Value = Cells(2, 21).Value
Cells(i, 22).Value = Cells(2, 22).Value
Sheets("Sheet10").Calculate
Next i
End Sub
Cells(2,21)
和 Cells(2,22)
包含一个随机公式,为简单起见,它可以是 =RAND()
。我想:
-
复制
Cells(2,21)
和Cells(2,22)
将Cells(2,21)
和Cells(2,22)
值粘贴到下一个i
行中;
刷新Cells(2,21)
和Cells(2,22)
重复直到i
等于101
。
我得到的是,当i=52
子错过第 3 点时,从i=52
到i=101
我得到相同的值。我该如何解决这个问题?
【问题讨论】:
您是否有理由不在 VBA 中使用RND
?
是的,实际公式不是 rand,而且更复杂(就像其他随机单元格的加权平均值)
当我设置一些单元格=RAND()
,然后设置几百个其他单元格等于.Value
,我的值都是不同的并且是随机的。即使没有调用Worksheet.Calculate
,每个循环之后.Value
也会发生变化。我无法复制您的问题。
这两个单元格是指其他工作表中其他随机单元格的加权平均值
"其他工作表中的其他随机单元格" - 但您只计算 Sheet10?也许您需要重新计算整个工作簿。
【参考方案1】:
由于您似乎是从其他工作表中提取值,而不仅仅是 Sheet10,因此您可能需要执行更大的重新计算:
Sub hello()
Dim i As Long
With ThisWorkbook.Sheets("Sheet10")
For i = 3 To 101
.Cells(i, 21).Value = .Cells(2, 21).Value
.Cells(i, 22).Value = .Cells(2, 22).Value
Next i
Application.Calculate 'note this affects all open workbooks
End With 'fixed
End Sub
【讨论】:
这对我不起作用,上面写着Compile error: Next without For
抱歉 - 我用 Next i
代替了 End with
- 在浏览器中编辑代码的危险...【参考方案2】:
随机值列
在每次迭代中,它将单列范围 (srrg
(srrgAddress
)) 的值写入二维基于一的数组 (dData
) 的行,并重新计算包含 '随机公式”。
它将数组中的值写入工作表,从范围第一列的一行 (dfRow
) 中的单元格开始。
Option Explicit
Sub hello()
Const srrgAddress As String = "U2:V2"
Const dfRow As Long = 3
Const dlRow As Long = 101
Dim srrg As Range: Set srrg = Sheet10.Range(srrgAddress)
Dim cCount As Long: cCount = srrg.Columns.Count
Dim drCount As Long: drCount = dlRow - dfRow + 1
Dim dData() As Variant: ReDim dData(dfRow To dlRow, 1 To cCount)
Dim dr As Long
Dim c As Long
For dr = dfRow To dlRow
For c = 1 To cCount
dData(dr, c) = srrg.Cells(c).Value
Next c
srrg.Calculate
Next dr
Dim dfCell As Range: Set dfCell = srrg.Cells(1).EntireColumn.Rows(dfRow)
Dim drg As Range: Set drg = dfCell.Resize(drCount, cCount)
drg.Value = dData
End Sub
【讨论】:
以上是关于vba里面 cell和cells sheet和sheets有啥区别的主要内容,如果未能解决你的问题,请参考以下文章