需求:根据sheet1中的信息去sheet2查找相应数据,计算并在sheet1中给出结果。
方法1:for each 遍历:
Option Explicit
Sub Calculation()
Dim m, n As Integer
Dim i, j As Integer
Dim q As Single
Dim mysheet1 As Worksheet
Dim mysheet2 As Worksheet
Dim mycell As Object
Const pi = 3.14
Set mysheet1 = ActiveWorkbook.Worksheets("information")
Set mysheet2 = ActiveWorkbook.Worksheets("test")
'注:此处不能用sheet1,sheet2作为sheet名称识别。
'原因:CSDN:sheet1是一个专有名词,不是任何对象的属性,只能单独使用,
'特指代码所在工作簿的那个sheet1(和顺序无关,是固定的一个表,sheets(1)则和顺序有关)。
m = mysheet2.Range("A1").End(xlDown).Row
Debug.Print m
mysheet2.Activate '注:选中单元格区域前须先激活数据表。
mysheet2.Range(Cells(2, 5), Cells(m, 5)).Select
Selection.ClearContents
On Error Resume Next
For i = 2 To m
If mysheet2.Cells(i, 2) = "3M3E1" Then
For Each mycell In mysheet1.Range("C3:G3")
If mycell = mysheet2.Cells(i, 4) Then
q = mysheet2.Cells(i, 3) / 3600
mysheet2.Cells(i, 5) = q / (mycell.Offset(1, 0).Value - 2 * mycell.Offset(2, 0)) ^ 2 / (pi / 4) * 100000
'单元格直接可赋值。数值也可使用value,文本也可用format。
Debug.Print mycell.Offset(1, 0).Value
Debug.Print mycell.Offset(2, 0).Value
End If
Next
'其他等级此处增加。
End If
Next
End Sub
方法2:Vlookup 待更新。
另:
1. 选中已用行数或列数:
- 利用End属性获取数据区域的最后一行行号 (从最后一行向上选中)
FinalRow = Range("A1048576").End(xlUp).Row
- 利用End属性获取数据区域的最前一行行号(从第一行向下选中)
FirstRow = Range("A1").End(xlDown).Row
- 利用End属性获取数据区域的最后一列列标 (从最后一列向左选中)
FinalColumn = Range("XFD2").End(xlToLeft).Column
- 利用End属性获取数据区域的最前一列列标(从第一列向右选中)
FirstColumn = Range("A2").End(xlToRight).Column
2. 设置sheet对象时,不能使用VBA project中显示的对象sheet1,sheet2.
原因:
参考以下链接:
VBA编程中的 sheet1 与 sheets(1)的区别_weixin_33893473的博客-CSDN博客
周日快乐。