我是VBA的初学者,刚刚开始尝试使用宏来自动执行excel中的以下过程。
我有2个差价,一个买入率(R列)和一个卖出率(S列)。我要做的是比较2个评级并选择更高的评级,除非买入货币(E栏)是美元。 然后我想输入选择到T列的相关评级。
但是,我正在尝试为后续行而不使用' .Activecell'和'。选择'。但我不太确定如何解决这个问题。
实际上,我想要实现的目标还有第二部分。因为我正在努力学习并一步一步地弄明白。
无论如何,我有2个工作表,在工作表1中,我有一个索引号列表(A列)以及上面T列中要计算的等级。
在工作表2中,我有另一个索引号列表(但后面有额外的“00”)(A列)。然后,每个索引号在一个单元格中具有相应的字母(列M),在另一个单元格中具有相应的数字(列I)。
我需要做的是从工作表2中检索匹配的字母和数字,将它们放在一起,然后与工作表1中的评级进行比较,看它们是否匹配。 我列出了完成此任务所需采取的步骤,但我似乎无法弄清楚如何做到这一点
1)从工作表1中检索索引号并与“00”连接
2)使用上面的值执行查找功能,以检索相应的索引号和字母。
3)将上述“Alphabet”和“Number”连接在一起(在工作表1中输入新单元格(C列)
4)将风险评级与从步骤3获得的值进行比较
5)如果风险等级<步骤3中的值,在新单元格中输入不匹配,工作表1,列D
6)对工作表1中的每个索引号重复一次。(工作表中索引号的数量每周不同)
根据提供的链接,我想出了以下语法。
子比较() Dim sht2 As Worksheet Dim last_row As Integer Dim row_no As Integer Dim buyccy As String Dim selccy As String Dim buyrate As String Dim selrate As String Dim y As String
Set sht2 = Sheets("sheet2")
last_row = sht2.Cells.Find(What:="*", After:=[A1], LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
For row_no = 2 To last_row
If IsError(sht2.Range("R" & row_no)) Or IsError(sht2.Range("S" & row_no)) Then
y = "#N/A"
Else
buyrate = sht2.Range("R" & row_no)
selrate = sht2.Range("S" & row_no)
buyccy = sht2.Range("E" & row_no)
selccy = sht2.Range("G" & row_no)
If buyrate >= selrate And buyccy = "USD" Then
y = selrate
ElseIf buyrate >= selrate And buyccy <> "USD" Then y = buyrate
ElseIf buyrate < selrate And selccy = "USD" Then y = buyrate
Else: y = selrate
End If
sht2.Range("T" & row_no).Value = y
Next
Set sht2 = Nothing
End Sub
不确定我在哪里出错了。抱歉,但我真的对VBA来说真的很新。真诚地感谢能够提供的任何见解。
答案 0 :(得分:0)
我对你的代码做了一些小调整,看起来很好......
Set sht2=Application.ActiveWorkbook.Sheets("Sheet1")
,最后是Set sht2 = Nothing
ReDim array_b(row_no - 1, 3)
未被使用且正在使用未设置的变量last_row
的机制......各种奇怪的行为都发生在不同的方法中,但我一直使用的是last_row = sht2.Cells.Find(What:="*", After:=[A1], LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
使用sht2.Cells(rownum,colnum)
也可以使用替代寻址,而不是使用单元格地址字符串...
最后 - 我认为上面提到的所有内容都很容易通过工作表函数实现 - 但可能不那么有趣; - )
整个代码:
Sub Comparison()
Dim sht2 As Worksheet
Dim array_b()
Dim last_row As Integer
Dim row_no As Integer
Dim buyccy As String
Dim buyrate As String
Dim selrate As String
Dim y As String
Set sht2 = Application.ActiveWorkbook.Sheets("Sheet1")
'last_row = sht2.Range("A1").End(xlDown).Row
last_row = sht2.Cells.Find(What:="*", After:=[A1], LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
'ReDim array_b(row_no - 1, 3)
For row_no = 2 To last_row
If IsError(sht2.Range("R" & row_no)) Or IsError(sht2.Range("S" & row_no)) Then
y = "#N/A"
Else
buyrate = sht2.Range("R" & row_no)
selrate = sht2.Range("S" & row_no)
buyccy = sht2.Range("E" & row_no)
If buyrate >= selrate And buyccy <> "USD" Then y = buyrate Else y = selrate
End If
sht2.Range("T" & row_no).Value = y
Next
Set sht2 = Nothing
End Sub