2014-11-21 43 views
0

如何基于另一张纸上的非静态单元格值在一张纸上制作一个下拉框!?如何根据另一张纸上的非静态单元格值在一张纸上制作下拉框?

我想创建工作簿,可以从各种科学仪器中为不同的参数复制CSV数据文件,并将数据放置在Sheet2上。在sheet1上,我将有几列用于绘制我想要绘制的数据,并将图形内置到Sheet1中。我的问题是获取下拉列表以显示Sheet2中复制数据的标题作为选项。工作表2中的格式不是静态的,因为所有CSV文件的格式都不同。

我已经使用了下面列出的文章中的宏来根据标题拉过列。我不知道我将要工作的所有工具的所有潜在标题。我可以设置下拉框来列出Sheet2!A1:P1作为选项的值,而不需要设置Sheet2!A1:P1作为表格吗? (该文件的用户不会掌握为CSV数据的每个复制/粘贴创建新的表格)

由于导师的潜在错误,我无法将Sheet2上的数据转换为表格即时的。 (我正在创建一个培训计划的练习册,这是因为数据的重要性,而不是一个优秀的班级,因为教练不擅长excel)。

Excel - How populate a column from another sheet based on unique column header names

回答

0

在Excel中,创建一个名为范围:

  • 在Excel 2003或更低 - >插入 - >名称 - >定义
  • 在Excel 2007和更高 - >公式 - >定义名称

你可以命名为任何你想要的,我会说出它像listHeaders

使用这个公式来定义它:

=Sheet2!$A$1:INDEX(Sheet2!$1:$1,,COUNTA(Sheet2!$1:$1)) 

然后在下拉列表中,用数据验证 - >列表和设置来源为:

=listHeaders 
0

回答我的问题。我有我的标题,我正在导入到Sheet 2.我去了Sheet 3,并有Sheet3!A1 = Sheet2!A1然后Sheet3!B1 = Sheet2!B2等我使用该范围并创建了一个命名范围。然后我去了Sheet1!A1,并从Sheet3上创建的命名范围中分配了下拉菜单。我为Sheet1!B1和Sheet1!C1做了同样的工作。然后我添加了下面的代码。

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 

现在,当我使用工作表Sheet1!A1降了下来,这从表Sheet 3和VBA编码的动态列表拉拉在匹配工作表Sheet1!A1选择在Sheet2上列中的数据。此宏允许将列拖入Sheet1的前3行,具体取决于从下拉菜单中选择的内容。

相关问题