macros根据不同工作表中的值自动填充N个单元格(行/列)

考虑下面的例子:

在这里输入图像说明

考虑一下,我在“表1”中列出了“国家与食品”栏以及其值。

在表2中,我有两列名为国家#1和食物#1。 我已经有的macros(@sktneer信用),需要通过下拉列表自动填充国家#1单元格中与正确文本关联的食物#1单元格。

例如:当我在国家#1中select“马德里”时,它需要自动填充文本“Tapas and tortillas”的食物#1。

这个代码是:

Private Sub Worksheet_Change(ByVal Target As Range) If Target.CountLarge > 1 Then Exit Sub Dim wsSource As Worksheet Dim r As Long Set wsSource = Sheets("Sheet1") 'Source sheet which contains a table of countries and their food If Target.Column = 1 And Target.Row > 1 Then If Application.CountIf(wsSource.Columns(1), Target.Value) > 0 Then Application.EnableEvents = False r = Application.Match(Target.Value, wsSource.Columns(1), 0) Target.Offset(0, 1) = wsSource.Cells(r, 2) Application.EnableEvents = True End If End If End Sub 

我的问题是:这个代码可以缩放到更多的列,为完全相同的问题?

以下是一个例子的预览:

在这里输入图像说明

对不起,如果这个问题是广泛的,但我的最终目的是比较两个代码(我有这个例子),学习如何缩放到N行和N列。

最好的问候,路易斯

尝试这个…

在Sheet2模块上放置以下代码。

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.CountLarge > 1 Then Exit Sub Dim wsSource As Worksheet Dim r As Long Set wsSource = Sheets("Sheet1") 'Source sheet which contains a table of countries and their food If Target.Column = 1 And Target.Row > 1 Then Application.EnableEvents = False If Target <> "" Then If Application.CountIf(wsSource.Columns(1), Target.Value) > 0 Then r = Application.Match(Target.Value, wsSource.Columns(1), 0) wsSource.Range("B" & r & ":E" & r).Copy Target.Offset(0, 1) Target.Offset(0, 1) = wsSource.Cells(r, 2) End If Else Target.Resize(1, 5).ClearContents End If Application.EnableEvents = True End If End Sub 

当你想要做的事情本质上是一个查找,这似乎过于复杂。 这里有一个基本的公式可以应用,如果你的数据是在左上angular的列,并假设列顺序匹配。 =INDEX(Sheet2!$1:$1048576,MATCH($A2,Sheet2!$A:$A,TRUE),MATCH(B$1,Sheet2!$1:$1,FALSE))

另外,使用VBA时,设置值更像这样的dynamic….

  Range(Target.Offset(0, 1), Target.Offset(0, Application.WorksheetFunction.CountA(wsSource.Rows(1)) + 1)).Value = _ Range(wsSource.Cells(r, 2), wsSource.Cells(r, Application.WorksheetFunction.CountA(wsSource.Rows(1)))).Value