VBA将函数应用于范围内的每个单元格

时间:2014-06-18 14:14:21

标签: vba

我需要在VBA中编写宏或函数或任何东西,什么将在一个范围的单元格上应用带参数的函数(例如vlookup)。我认为它可以通过宏来完成,但是我无法使用vlookup的参数,所以我不知道如何做到这一点。可能吗?

例如:

我想要这个: vlookup(A1; G1:H50; 2; 0)在单元格B1和 vlookup(A2; G1:H50; 2; 0)在单元格B2中依此类推,例如, B10

但我想只写一次公式,让其他单元格自动填充。

非常感谢。

2 个答案:

答案 0 :(得分:2)

如果我理解正确,这是一种方式(您必须更改分隔符以匹配您的国家/地区设置,并调整您希望公式去的位置,我只是将B1:B10作为示例) ):

Sheet1.Range("B1:B10").Formula = "=vlookup(A1,$G$1:$H$50,2,0)"

这段代码会将公式写入sheet1上的B1:B10范围,这与将公式放入B1然后"拖动"具有相同的效果。它降至B10。这项工作的原因是Excel具有内置功能,可根据范围是否以$符号开头自动递增公式引用。

如果列引用前面有$,则不会随着跨列拖动公式而增加。如果$位于行引用的前面,则在拖动公式时它不会递增。

回头看看我提出的公式,你可以看到A1会随着公式被拖动到B2,B3,B4等而增加...自动将查找值增加为单元格A2,A3,A4 , 分别。查找范围根本不会改变,因为列和行引用都以$开头。

如果你运行我给你的代码,你会发现你应该只有一个公式,但是通过内置的自动递增功能来改变查找范围。

--------------------基于评论的更多编辑-------------------- 要做你想做的事,你根本不需要VBA(即使你最初要求VBA /宏解决方案)。您可以将公式放在单元格中并将其拖动到您想要的范围内。请查看此链接,看看它是否有助于回答您的问题:

How to fill data automatically in Excel

答案 1 :(得分:1)

您可以按照此示例http://www.exceltrick.com/formulas_macros/vlookup-in-vba/

使用Application.VLookup
Sub SetValues(columnToChange As String, columnToLookup As String, range As String, startColumn As Integer, endColumn As Integer)
    For number = startColumn To endColumn Step 1
       valueLookup = columnToLookup + CStr(number)
       valueToChange = columnToChange + CStr(number)
       Sheets("yourSheetName").Range(valueToChange).value = Application.VLookup(valueLookup, range, 2, 0)
    Next number

End Sub

如果要调用它们,请创建另一个没有参数的子例程,例如,可以通过按钮单击调用这些参数。

Sub DoStuff()
    On Error GoTo ErrorHandler
    Dim valueLookup as String
    Dim valueToChange as String
    Dim range as String
    Dim firstColumn as Integer
    Dim lastColumn as Integer

Label1:
    valueLookup = InputBox("Enter the column to lookup")
    valueToChange = InputBox("Enter the column to change")
    range = InputBox("Enter the range of the lookup")
    firstColumn = CInt(InputBox("Enter the first column number to lookup"))
    lastColumn = CInt(InputBox("Enter the last column number to lookup"))
    Call SetValues(valueToChange, valueLookup, range, firstColumn, lastColumn)
    Exit Sub
ErrorHandler:
    MsgBox("One value has an error in it.")
    Resume Label1:
End Sub
相关问题