Возможно ли для VBA excel искать повторяющуюся переменную из пула переменных (например, 10 КБ), сгруппировать их вместе - PullRequest
0 голосов
/ 13 февраля 2012

Мне было интересно, возможно ли для VBA excel сгруппировать все похожие переменные вместе, например, Voltage_test или Current_test из большого пула переменных с разными именами тестов. Кроме того, возможно ли, чтобы VBA excel суммировал все значения, помеченные одним и тем же именем ввода.

Я попытался использовать сводную таблицу, и она, кажется, работает, поскольку помогает отфильтровать те, у которых есть помеченные значения. К сожалению, эти результаты были получены случайным образом, иногда значение_статика может быть = 3, иногда - не равно 3. 3. Существует также много других неопределенных переменных, таких как short_circuit_tests и т. Д.

Скажем, например, (те переменные с 1 означают, что мне нужно скопировать)

             A                      B                C                   D
  1      voltage_test               1
  2      current_test               1
  3      voltage_test               1
  4      voltage_test        
  5      current_test               
  6      short_circuit_test
  .
  .
  .
 10000   voltage_test               1

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

После использования VBA для группировки похожих переменных у меня будет что-то вроде следующего:

          A                B
1     voltage_test         3
2     current_test         1

Мне нужно скопировать это и вставить в другую таблицу. short_circuit_test не будет скопирован, поскольку он не повторяется.

Я думал об использовании оператора if-else, но он становится немного длинным или, скорее, сумасшедшим, когда тесты складываются до 10 000.

Делитесь своими идеями, я буду очень признателен за вашу помощь! Спасибо !!!

Прошу прощения за тех, кто зашел и оставил ваши комментарии, я пересмотрел свои вопросы, надеюсь, это прояснило некоторые сомнения!

Ответы [ 3 ]

1 голос
/ 13 февраля 2012

Вы можете выполнить простой «Автофильтр» для столбца B вручную или с помощью VBA, а затем скопировать полученные записи на второй лист

Чтобы отфильтровать значения «1» в столбце B первого листа, а затемскопировать столбцы A и B из отфильтрованного результата на второй лист с помощью VBA

Sub QuickFilter()
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet
    Dim rng1 As Range
    Application.ScreenUpdating = False
    Set ws1 = Sheets(1)
    Set ws2 = Sheets(2)
    ws1.AutoFilterMode = False
    Set rng1 = ws1.Range(ws1.[b1], ws1.Cells(Rows.Count, "b").End(xlUp))
    rng1.AutoFilter 1, "1"
    If rng1.SpecialCells(xlCellTypeVisible).Count > 1 Then rng1.Offset(0, -1).Resize(rng1.Rows.Count, 2).Copy ws2.[a1]
    ws1.AutoFilterMode = False
    Application.ScreenUpdating = True
End Sub
0 голосов
/ 13 февраля 2012

User1204868,

Если вас интересует метод NON VBA, вы можете использовать эту формулу Excel.

=SUM(($B$2:$B$10)*($A$2:$A$10=E2)*($B$2:$B$10=1))

Эту формулу необходимо ввести как формулу массива (нажмите CTL+ SHIFT + ENTER)

Редактировать : Снимок прикреплен.

enter image description here

0 голосов
/ 13 февраля 2012

Ваш вопрос довольно неясен, и вы заставляете нас догадываться, чего вы пытаетесь достичь ... Но это мое предположение:

У вас есть данные на Листе1, которые отформатированы примерно так:

row\col A                   B
1       test                1
2       test1               
3       test2               1
...
...
...
10000   test10000           1

Вы хотите, чтобы это было результатом на листе 2:

row\col A                   
1       test                
2       test2               
...
...
n       test10000          

, где n представляет количество «тестов», значение которых равно 1.

Следующий код сделает это:

Dim iRow As Long
Dim i1 As Long

iRow = 1
i1 = 0
Do
    If Sheet1.Cells(iRow, 2) = 1 Then
        i1 = i1 + 1
        Sheet2.Cells(i1, 1) = Sheet1.Cells(iRow, 1)
    End If
    iRow = iRow + 1
Loop While Not IsEmpty(Sheet1.Cells(iRow, 1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...