Помогите мне автоматизировать процедуру в Excel - PullRequest
2 голосов
/ 12 февраля 2010

У меня есть лист Excel со значениями в столбцах A, B и C, например:

      A      B      C
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 для выполнения следующей работы: Для каждой пары строк (которые составляют группу) вставьте 2 новые строки под ними и заполните их такими значениями (предположим, мы имеем дело с группой, находящейся в строках 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

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

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

P.S. Какую кнопку вы бы порекомендовали для возможности Undo?

.

Ответы [ 2 ]

5 голосов
/ 12 февраля 2010

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

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

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

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

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

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...