Excel – 如何根据唯一列标题名称填充另一个工作表中的列

这不容易,但我不知道该怎么做。

我有工作表1与ie 3空列,最上面的行是一个数据validation下拉列表,即50张唯一标题名称出现在工作表2。

在工作表2的50个标题下,每行都有未知数量的数据行。

从工作表1的3个下拉菜单中,我只需要在表2中的列标题下填充该列。

有没有VBA解决scheme?

在工作表2的50个标题中,每个都有未知数量的数据行。

我总是喜欢公式,而不是vba,但是如果你有unknown的行数和50头,那么我个人决不会select公式。 特别是如果我不得不把它拖下来。 这是一个VBA解决scheme。

让我们说你的Sheet2看起来像这样

在这里输入图像说明

将其粘贴到Sheet1工作表代码区域中。

 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo Whoa If Target.Cells.CountLarge > 1 Then Exit Sub Dim wsI As Worksheet, wsO As Worksheet Dim lRow As Long, nCol As Long Dim sSrch As String Dim aCell As Range, rng As Range Set wsI = ThisWorkbook.Sheets("Sheet2") Set wsO = ThisWorkbook.Sheets("Sheet1") Application.EnableEvents = False If Not Intersect(Target, Range("A1:C1")) Is Nothing Then sSrch = Cells(1, Target.Column).Value Set aCell = wsI.Rows(1).Find(What:=sSrch, LookIn:=xlValues, _ LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False) If Not aCell Is Nothing Then nCol = aCell.Column lRow = wsI.Cells(wsI.Rows.Count, nCol).End(xlUp).Row Set rng = wsI.Range(wsI.Cells(2, nCol), wsI.Cells(lRow, nCol)) End If If Not rng Is Nothing Then Range(Cells(2, Target.Column), Cells(Rows.Count, Target.Column)).ClearContents rng.Copy Cells(2, Target.Column) End If End If Letscontinue: Application.EnableEvents = True Exit Sub Whoa: MsgBox Err.Description Resume Letscontinue End Sub 

产量

在这里输入图像说明

你不需要VBA,只需使用INDEX和MATCH,用ROW()

在工作表Sheet1,单元格A2例如(如果您的标题是在单元格A1中)

 =IF(INDEX(Sheet2!$A:$M,ROW(),MATCH(Sheet3!A$1,Sheet2!$A$1:$M$1,0))=0,"",INDEX(Sheet2!$A:$M,ROW(),MATCH(Sheet3!B$1,Sheet2!$A$1:$M$1,0))) 

你需要调整参考,但你会明白的。 你也可以使用数据透视表…