2014-11-21 5 views
0

Как создать раскрывающееся поле на одном листе, основанное на значениях нестационарной ячейки на другом листе ??Как создать раскрывающееся поле на одном листе, основанное на значениях нестационарной ячейки на другом листе?

Я пытаюсь создать книгу, где я могу копировать файлы данных CSV из различных научных инструментов для разных параметров и размещать данные на Sheet2. На sheet1 у меня будет несколько столбцов, которые вытаскивают данные, которые я хочу использовать для построения графика, и построим график в Sheet1. Моя проблема заключается в получении выпадающего списка для отображения заголовков скопированных данных из Sheet2 в качестве параметров. Формат на листе 2 не является статичным, поскольку все файлы CSV форматируются по-разному для каждого инструмента.

Я использовал макрос из приведенной ниже статьи, чтобы вытащить столбцы на основе заголовка. Я не знаю всех потенциальных заголовков всех инструментов, над которыми я буду работать. Могу ли я установить поле «Выпадающее окно» для отображения значений ячеек Sheet2! A1: P1 в качестве параметров без установки Sheet2! A1: P1 в качестве таблицы? (Пользователи этого файла не поймут создание новой таблицы для каждой копии/вставки данных CSV)

Я не собираюсь преобразовывать данные на Sheet2 в таблицу из-за возможных ошибок преподавателей в в реальном времени. (Я создаю эту книгу для учебной программы. Это касается важности данных, а не класса excel, так как инструкторы не владеют excel).

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

ответ

0

В вашем Excel, создать диапазон:

  • В Excel 2003 или ниже -> Вставка -> Имя -> Define
  • В Excel 2007 и выше -> Формулы - > Define Name

вы можете назвать это все, что вы хотите, я бы назвал это что-то вроде listHeaders

Используйте эту формулу, чтобы определить его:

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

Тогда для выпадающего списка, используйте Data Validation -> List и установите источник быть:

=listHeaders 
0

Чтобы ответить на мой вопрос. У меня были заголовки, которые я импортировал в Лист 2. Я пошел на Лист 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 

Теперь, когда я использую Лист1! A1 падение вниз, она тянет из динамического списка на Лист3 и кодировании VBA тянет в данных для столбца на Лист2, что соответствует выбору Лист1! A1. Этот макрос позволяет вставлять столбцы в первые 3 строки Sheet1 в зависимости от того, что выбрано из раскрывающегося списка.

Смежные вопросы