Как найти (и отредактировать) определенную строку с помощью таблицы Excel ListObject (бывший список)

Давайте представим, что в ListObject строках таблицы есть какие-то строки или какие-то шаблоны, которые я хотел бы найти, и если бы они были найдены, я бы хотел отформатировать всю строку. Мой пример может быть дампом из набора записей через VBA и ACE OLEDB в таблицу excel ListObject, и я хотел бы отформатировать ее:

col1 | col2      | col3          | col4
-----+-----------+---------------+----------
1.   | empty     | AAA           | 
2.   | empty     | AAA001value   | value
3.   | empty     | AAA002value   | value
4.   |  Total    | desc          | value
5.   | empty     | BBB           | 
6.   | empty     | BBB001value   | value
7.   | empty     | BBB002value   | value
8.   |  Total    | desc          | value

Например, я хотел бы

  1. Выделите жирным шрифтом всю строку в таблице, где отображается слово Total.
  2. Вставьте строку выше, где появляется строка из трех букв ???, обозначающая группу.

Мне, вероятно, удалось бы придумать код, работающий со стандартной таблицей, отличной от ListObject, и добавить строки для всего рабочего листа, но я понятия не имею, как искать и изменять строки в таблице ListObject.


person Jacek Kotowski    schedule 13.04.2015    source источник
comment
Я редактирую ваши образцы данных. Убедитесь, что я редактирую ваши данные в правильных столбцах;).   -  person shA.t    schedule 13.04.2015


Ответы (1)


В коде VBA вы можете найти шаблоны строк, используя оператор сравнения like или функцию Instr(), как показано ниже:

If (strCell like "*Total*") Then
    ' True for case-sensitive strCell string like "Total", "aTotalb" and not for "total"
End If

If (strCell like "*[A-Z][A-Z][A-Z]00[1-2]*") Then
    ' True for strCell strings with 3 Upper-Case letters And "00" after that and also "1" or "2" after that like "AAA001" or "ZBC002"
    If (InStr(1, strCell, "AAA") > 0) Then
        ' With this InStr() you can remove 'ZBC002' 
    End If  
    ...
End If

If (strCell like "*[*][*][A-Z][A-Z][A-Z][*][*]*"
    ' True for strCell like "a**AAA**b" or "asd**ZCB**"
    If (InStr(1, strCell, "AAA") > 0) Then
        ' With this InStr() you can remove "asd**ZCB**"
    End If  
End If

И для выделения вы можете использовать такой код:

Sheets(1).Rows(1).Font.Bold = True
person shA.t    schedule 13.04.2015