Если/Тогда/Иначе нужна помощь с VBA и 3 переменными

Вопрос или проблема

Сначала у меня было 2 переменные: если в столбце K “OUT”, заполнять данные из I в F.

Вторая переменная заключалась в том, что если в столбце K “PAC”, заполнять данные из H в E, и это работало отлично.

Теперь мне нужно добавить третью переменную: если в столбце J фиксированное значение “x”, заполнять данные из G в D, но при этом первые 2 правила заполняют столбцы E и F, которые я хочу оставить пустыми, если есть значение в J. Как исключить другие 2 правила, если есть значение в столбце K?

Только одни данные должны быть в D, E; F одновременно.

Как этого добиться?

If Worksheets(1).Cells(Row, "J").Value = "x" Then
  Range("Leap2B!D" & Leap2BRow).Value = Worksheets(1).Cells(Row, "G").Value
End If
                        
If Worksheets(1).Cells(Row, "K").Value = "OUT" Then
  Range("Leap2B!F" & Leap2BRow).Value = Worksheets(1).Cells(Row, "I").Value
End If

If Worksheets(1).Cells(Row, "K").Value = "PAC" Then
  Range("Leap2B!E" & Leap2BRow).Value = Worksheets(1).Cells(Row, "H").Value
End If

Ответ или решение

Для решения вашей задачи с использованием VBA в Excel, необходимо реализовать логику, которая позволит условно определить, какие значения должны быть заполнены в зависимости от данных в столбцах J и K. Поскольку условие заключается в том, что данные должны быть только в одних ячейках (D, E или F) в одно и то же время, необходимо скорректировать ваш код, чтобы предусмотреть соответствующую проверку. Давайте рассмотрим, как это можно реализовать.

Описание задачи

Вам нужно анализировать значения в столбцах J и K и заполнять соответствующие столбцы (D, E, F) следующим образом:

  1. Если в столбце J находится фиксированное значение "x", то данные из столбца G копируются в столбец D.
  2. Если в столбце K находится значение "OUT", то данные из столбца I копируются в столбец F.
  3. Если в столбце K находится значение "PAC", то данные из столбца H копируются в столбец E.
  4. Если J содержит "x", то никакие данные не должны быть в E и F.

Решение

Для реализации этой логики используем конструкцию If…ElseIf…Else как наиболее подходящую в VBA для обеспечения уникальной обработки каждой строки:

Sub ProcessData()
    Dim Row As Long
    Dim LastRow As Long
    Dim Leap2BRow As Long

    ' Предполагаем, что Leap2BRow правильно инициализирован
    LastRow = Worksheets(1).Cells(Rows.Count, "J").End(xlUp).Row

    For Row = 1 To LastRow
        If Worksheets(1).Cells(Row, "J").Value = "x" Then
            ' Заполняем столбец D и очищаем E и F
            Worksheets("Leap2B").Cells(Leap2BRow, "D").Value = Worksheets(1).Cells(Row, "G").Value
            Worksheets("Leap2B").Cells(Leap2BRow, "E").ClearContents
            Worksheets("Leap2B").Cells(Leap2BRow, "F").ClearContents

        ElseIf Worksheets(1).Cells(Row, "K").Value = "OUT" Then
            ' Заполняем столбец F
            Worksheets("Leap2B").Cells(Leap2BRow, "F").Value = Worksheets(1).Cells(Row, "I").Value
            Worksheets("Leap2B").Cells(Leap2BRow, "E").ClearContents

        ElseIf Worksheets(1).Cells(Row, "K").Value = "PAC" Then
            ' Заполняем столбец E
            Worksheets("Leap2B").Cells(Leap2BRow, "E").Value = Worksheets(1).Cells(Row, "H").Value
            Worksheets("Leap2B").Cells(Leap2BRow, "F").ClearContents

        Else
            ' Для всех других случаев, очищаем D, E и F
            Worksheets("Leap2B").Cells(Leap2BRow, "D").ClearContents
            Worksheets("Leap2B").Cells(Leap2BRow, "E").ClearContents
            Worksheets("Leap2B").Cells(Leap2BRow, "F").ClearContents
        End If
        Leap2BRow = Leap2BRow + 1
    Next Row
End Sub

Объяснение кода

  • Используется цикл для обработки каждой строки вплоть до последней заполненной строки в столбце J.
  • If...ElseIf...Else позволяет проверить сначала наличие "x" в столбце J, что является приоритетным, и только затем проверяются условия наличия "OUT" и "PAC" в столбце K.
  • При наличии значения "x" в J, столбцы E и F очищаются, чтобы соответствовать вашему условию.
  • Leap2BRow увеличивается на каждой итерации, чтобы перемещаться к следующей строке назначения для записи данных в лист Leap2B.

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

Оцените материал
Добавить комментарий

Капча загружается...