2016-04-15 3 views
0

У меня есть таблица, в которой пользователь может вставлять несколько строк по нескольким столбцам, где некоторые данные являются строковыми и некоторые числовые. Я хочу создать такую ​​кнопку, чтобы при щелчке пользователем она создавала новую таблицу на одном и том же листе excel, но с некоторыми строками, объединенными на основе предопределенного условия. Например. В таблице «pre defined condition» указано, что альфа и гамма подобны и так далее (это может быть множество строк, подобных этому, которые показывают условия для объединения строк. Условие всегда относится ко второй строке таблицы, определенной пользователем, т.е. таблице 1). ..Table 1 будет создан другим пользователем, и он может ввести столько строк, сколько захочет. Таким образом, используя эти 2 таблицы (Таблица 1 & Предварительно определенные условия tabel) Я хочу создать новую таблицу, которая имеет определенные строки в сочетании со строкой из двух строк, разделенных с использованием «/» и добавленных чисел. Структура останется неизменной для всех таблиц.Создайте новую таблицу в excel из существующей таблицы, при условии заранее определенных условий

Редактировать: одно значение в столбце 2 всегда будет иметь одно и то же значение в столбце 1. Базовый столбец 2 является зависимым списком (в столбце 1). Существует много предопределенных условий, а не только 2. Обычно в столбце 2 не должно быть повторяющихся значений, но в случае, если есть, я хочу объединить их в одну строку при нажатии кнопки.

Table 1  

Альфа 100 1
Б Бета 200 2
С Гамма 300 3
D Каппа 400 4

Предварительно заданное состояние
Альфа Гамма
Бета Каппа

Desired Output  

A/C Alpha/Gamma 400 4
B/D Beta/Kappa 600 6

+0

Что вы пробовали? Вы можете создать кнопку и назначить макрос с помощью 'Insert> Shapes', затем щелкнуть правой кнопкой мыши и назначить макрос. Но я полагаю, что ваш вопрос был скорее нацелен на кодирование, чем на кнопку? –

+0

Я добавил макрос для создания новой таблицы, которая просто копирует существующий. Я сталкиваюсь с трудностями при объединении строк на основе предварительно определенного условия при создании новой таблицы – Novag17

+0

количество добавленных пользователем строк в исходной таблице является переменной и может быть несколько условий, которые мне нужно учитывать для объединения строк. Так что я я не могу понять, как достичь этого – Novag17

ответ

0

Предполагая, что ваши данные начинаются с A2: D2 (A1: D1 слева от заголовков), вы указываете два условия (например, Alpha Gamma) в столбцах F и G (начиная во второй строке; первая строка для заголовков), что есть командная кнопка, и что рабочий лист имеет имя «Sheet1», следующий код должен сделать трюк.

Dim i As Integer 
Dim j As Integer 
Dim lLastRowPDC As Integer 
Dim lLastRowData As Integer 
Dim sConditions As String 
Dim sOrigin As String 
Dim sColumnA As String 
Dim sColumnB As String 
Dim iColumnC As Integer 
Dim iColumnD As Integer 


Private Sub CommandButton1_Click() 
lLastRowPDC = Worksheets("Sheet1").Cells(2, 6).End(xlDown).Row 'Rows with Conditions, starting in the second row 
lLastRowData = Worksheets("Sheet1").Cells(2, 1).End(xlDown).Row 'Rows with data, starting in the second row 

For i = 2 To lLastRowPDC 
    sConditions = Worksheets("Sheet1").Cells(i, 6).Value & Worksheets("Sheet1").Cells(i, 7).Value 'create a string with the two conditions 
    sColumnA = "" 
    sColumnB = "" 
    iColumnC = 0 
    iColumnD = 0 
    For j = 2 To lLastRowData 
     sOrigin = Worksheets("Sheet1").Cells(j, 2).Value 
     If InStr(sConditions, sOrigin) > 0 Then 
      If InStr(sColumnA, Worksheets("Sheet1").Cells(j, 1).Value) = 0 Then 
       sColumnA = sColumnA & Worksheets("Sheet1").Cells(j, 1).Value & "/" 
      End If 
      If InStr(sColumnB, Worksheets("Sheet1").Cells(j, 2).Value) = 0 Then 
       sColumnB = sColumnB & Worksheets("Sheet1").Cells(j, 2).Value & "/" 
      End If 
      iColumnC = iColumnC + Worksheets("Sheet1").Cells(j, 3) 
      iColumnD = iColumnD + Worksheets("Sheet1").Cells(j, 4) 
     End If 
    Next j 
    sColumnA = Left(sColumnA, Len(sColumnA) - 1) 'remove last "/" 
    sColumnB = Left(sColumnB, Len(sColumnB) - 1) 'remove last "/" 
    Worksheets("Sheet1").Cells(i, 8).Value = sColumnA 
    Worksheets("Sheet1").Cells(i, 9).Value = sColumnB 
    Worksheets("Sheet1").Cells(i, 10).Value = iColumnC 
    Worksheets("Sheet1").Cells(i, 11).Value = iColumnD 
Next i 

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