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