Вопрос или проблема
Сначала у меня было 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) следующим образом:
- Если в столбце J находится фиксированное значение "x", то данные из столбца G копируются в столбец D.
- Если в столбце K находится значение "OUT", то данные из столбца I копируются в столбец F.
- Если в столбце K находится значение "PAC", то данные из столбца H копируются в столбец E.
- Если 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.
Применив данный код, вы сможете точно контролировать, где данные должны быть записаны, основываясь на соответствующих входных значениях.