首页 > 解决方案 > 根据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

也许我应该寻找单元格本身,而不是值,然后它会起作用(也许使用偏移量,或者偏移量+匹配?不能让它起作用)?

将不胜感激任何帮助!

标签: excelvba

解决方案


不太确定意图是什么,但这似乎是一个有趣的挑战。

所以逻辑是这样的。我们在 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

推荐阅读