Помогите мне автоматизировать процедуру в excel

У меня есть лист excel со значениями в столбцах A, B и C следующим образом:

ABC 1 8.22 1.99902 32.48974 2 8.22 3.04698 33.92426 3 8.22 2.26374 33.1547 4 8.22 2.78227 33.2593 6 8.22 2.46798 33.34269 6 8.22 2.57802 33.67131 7 8.22 2.46798 32.7427 8 8.22 2.57802 33.07131 

Существует также ячейка (например, F1), содержащая значение, которое может быть только 1,2 или 3.

Я хотел бы создать commandbutton для выполнения следующего задания: для каждой пары строк (которые cosnist для группы) вставьте две новые строки под ними и заполните их такими значениями (предположим, что мы имеем дело с группой, находящейся в строках 9 и 10)

 If F1 = 1 THEN A11 = A10 B11 = B10 C11 = C9 A12 = A10 B12 = B9 C12 = C10 If F1 = 2 THEN A11 = A10 B11 = B10 C11 = C9 A12 = A9 B12 = B10 C12 = C10 If F1 = 3 THEN A11 = A10 B11 = B9 C11 = C10 A12 = A9 B12 = B10 C12 = C10 

Финал устанавливает цвет фона для вновь вставленных линий на желтый.

Не могли бы вы помочь мне выполнить эту задачу?

PS Как только нажата такая кнопка, что бы вы рекомендовали для возможности Undo ?

Предположим, что ваши данные начинаются с строки 1, а имя командного элемента – CommandButton1, попробуйте добавить следующий код в событие CommandButton1 click. Я использовал подход «снизу вверх», потому что мне было легче обрабатывать номера строк во время цикла.

 Private Sub CommandButton1_Click() Dim lines_count As Integer Dim fixed_column As Integer Dim i As Integer lines_count = Application.WorksheetFunction.Count(Range("A:A")) fixed_column = Range("F1").Value For i = lines_count + 2 To 4 Step -2 Rows(i - 1 & ":" & i).Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Select Case fixed_column Case 1 Cells(i - 1, 1).Value = Cells(i - 2, 1).Value Cells(i, 1).Value = Cells(i - 2, 1).Value Cells(i - 1, 2).Value = Cells(i - 2, 2).Value Cells(i, 2).Value = Cells(i - 3, 2).Value Cells(i - 1, 3).Value = Cells(i - 3, 3).Value Cells(i, 3).Value = Cells(i - 2, 3).Value Case 2 Cells(i - 1, 1).Value = Cells(i - 2, 1).Value Cells(i, 1).Value = Cells(i - 3, 1).Value Cells(i - 1, 2).Value = Cells(i - 2, 2).Value Cells(i, 2).Value = Cells(i - 2, 2).Value Cells(i - 1, 3).Value = Cells(i - 3, 3).Value Cells(i, 3).Value = Cells(i - 2, 3).Value Case 3 Cells(i - 1, 1).Value = Cells(i - 2, 1).Value Cells(i, 1).Value = Cells(i - 3, 1).Value Cells(i - 1, 2).Value = Cells(i - 3, 2).Value Cells(i, 2).Value = Cells(i - 2, 2).Value Cells(i - 1, 3).Value = Cells(i - 2, 3).Value Cells(i, 3).Value = Cells(i - 2, 3).Value End Select Range("A" & CStr(i - 1) & ":C" & CStr(i)).Select Selection.Interior.ColorIndex = 6 Next End Sub 

Несколько вещей:

  • Вы должны попытаться создать Макросы, а затем посмотреть, какой код они производят. Это поможет вам увидеть, какой код VBA необходим для управления листом Excel.
  • После того, как вы создадите несколько макросов, узнайте, как делать циклы, чтобы вы могли запускать процесс несколько раз для всех необходимых вам ячеек.
  • Вы не можете отменить результаты макроса. Вы можете попытаться написать отдельную функцию, чтобы отменить результаты предыдущей функции, но звучит как тонна работы. Я бы рекомендовал создать копию рабочего листа, который у вас есть, и работать с новым листом для вашей фазы разработки.

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

Например, если вы видите код, сгенерированный макросом, который выглядит как ActiveSheet.Range("C2").Select , вы можете спросить: «Я вижу, как выбрать одну ячейку. Как выбрать всю строку?» Это даст вам более целенаправленные ответы, которые помогут вам решить вашу проблему.

  • Сравнивая буквенно-цифровые данные, выдайте Excel при игнорировании дефисов при сортировке данных
  • Вычитайте сумму из ячейки до тех пор, пока она не достигнет 0 многократной суммы напоминания
  • Макрос не переходит к следующему WS
  • Ссылка на строку внутри массива формул в Excel VBA
  • Создайте цикл, чтобы перейти по ячейке, а затем повторите макрокоманду
  • VBA для прокрутки рабочих листов, запускающих код, либо не работает, либо выполняет цикл, но не запускает код
  • Для каждого условия цикла, вызывающего несоответствие типа
  • VBA копирует данные с одного листа на другой (в пустые ячейки)
  • Excel VBA: копирование / вставка
  • Использование цикла excel vba для захвата значения ячейки и использования в Slicer
  • Цитирование через рабочие листы
  • Interesting Posts

    Индикатор выполнения в VBA Excel

    Я хочу изменить структуру экспорта экспорта отчетов о быстрых книгах

    Сохранение как .xlsx в другом каталоге в vba

    Сравнение двух листов Excel в MSexcel 2010

    Формула Excel, чтобы найти h: mm am / pm из строки динамического текста

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

    Консолидация двух книг Excel на основе нескольких критериев

    Получите среднее число групп для различных групп, которые различаются по размеру

    Excel VBA как искать значения из выбранного диапазона ячеек из другой книги?

    Создание UDF в VBA Generated Workbook

    VBA: копирование первой пустой ячейки в той же строке

    VBA: Err.Clear, Resume, Resume Next не предотвращает On Error GoTo только один раз

    Как открыть форму Windows с помощью VBA

    Помощь, необходимая для записи списка данных в конкретный столбец в файле excel с использованием java

    Для Loop для сортировки ошибок диапазонов диапазонов индексов: выберите метод Не удалось присвоить класс класса

    Давайте будем гением компьютера.