excel - 根据vlookup结果分配单元格值 - VBA
问题描述
在一段时间未能弄清楚如何做到这一点之后,我会在这里试试运气:
我本质上是在尝试使用 VBA 比较两种情况。一个类似(而且更简单)的例子:
例如 F2 计算 152+D2,而 F3 计算 185+D3。
我希望运行一个宏来检查一个人获得不同分数的效果。例如,如果 A2 = Max,则宏应将 A3 (18) 的值分配给 D3。如果 A2 = Lewis,则 18 将成为 D2 的新值。
尝试使用 vlookup 和 match+index 来找到我想要更改的单元格。使用 vlookup 时,代码如下所示:
首先,我将 F2:F4 复制到 I2:I4,因此结果具有可比性。然后尝试根据A2&A3替换D2:D4的值:
name = Range("A2").value
newvalue = Range("A3").value
Find = Application.VLookup(name, Range("C2:D4"), 2, False)
Find.value = newvalue
也许我应该寻找单元格本身,而不是值,然后它会起作用(也许使用偏移量,或者偏移量+匹配?不能让它起作用)?
将不胜感激任何帮助!
解决方案
不太确定意图是什么,但这似乎是一个有趣的挑战。
所以逻辑是这样的。我们在 C 列中查找名称。如果我们得到匹配,我们将返回一行作为答案,然后我们替换“A3”中的值并将其添加到我们得到的行但添加到 D 列。
也许是这样的:D?
Option Explicit
Sub something_test()
Dim lookup_val As String
Dim lrow As Long
Dim lookup_rng As Range
Dim match_row As Long
Dim ws As Worksheet
Set ws = Worksheets("Sheet1") 'Name the worksheet
lrow = ws.Cells(Rows.Count, "C").End(xlUp).Row 'Find last row in Sheet1
lookup_val = ws.Cells(2, "A").Value 'Set the lookup value
Set lookup_rng = ws.Range("C2:C" & lrow) 'set the lookup range
match_row = Application.Match(lookup_val, lookup_rng, 0) + 1 'Find the name in column C. Add +1 since the range starts at row 2. We will get the row number back
ws.Cells(match_row, "D").Value = ws.Cells(3, "A").Value 'Take the value from "A3" and replace the existing value at the row we found, but for column D
End Sub
推荐阅读
- node.js - 带有“/”的欢迎页面和未找到用于休息的页面
- python - 在 SQLAlchemy 中交叉应用?
- python-3.x - 如何根据字典中单个键的一部分对 dict.keys() 或 dict 进行排序(python)
- python - 常用或 Pythonic __repr__ 方法
- php - PHP / MySQL:如果其他条件没有按预期工作
- html - 如何消除嵌套弹性盒中使用的分组 div?
- c - 为什么我不能在此代码中使用分隔符正确提取标记?
- java - Java 类参考
- camera - SFM/MVS如何克服不同相机之间的色差?
- wso2 - WSO2 Enterprise Integrator ESB:有没有办法迭代N次