Как установить значение в ячейке на основе значения другой ячейки из другого столбца, используя формулу или VBA? - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть два листа: enter image description here

Лист 1: состоит из трех столбцов ( Статус , Стоимость , Версия )

Лист 2: Используется как страница действий с двумя столбцами ( Формула , Номер версии ).

Вопрос:

Я хочу установить номер версии во втором столбце на листе 2 и позволить формуле или кнопке, использующей код VBA, выполнить следующие действия.:

  1. Пользователь установил значение = 5 в столбце 2 [Номер версии], лист 2
  2. Система принимает значение из [Номер версии]ячейка
  3. Система выполняет поиск всех строк, содержащих значение [Номер версии] = 5 , в столбце листа 1 [Версия]
  4. Система заменяет каждую ячейкув столбце [ Status ], имеющем [ Version ] значение = 5, с Status Value = «Доставлено».

Любая помощьпожалуйста, или бросьте формулу или используя код VBA.

Привет

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

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

Шаги:

  1. Создать переменную для хранения значений
  2. Переменная ниже будет содержатьвставленное значение необходимо обновить
  3. Переменная ниже будет содержать номер столбца версии элемента в таблице
  4. Переменная ниже будет содержать значение каждой строки в столбце [Get_Version_Item_Column], который будет использоватьсяпри сравнении значений каждой строки
  5. В приведенной ниже переменной будет храниться номер столбца хода выполнения элемента в таблице
  6. Переменная ниже будет содержать значение каждой строки в столбце [Get_Item_Progress_Column], которое должно бытьиспользуется при сравнении значений или каждой строки
  7. Переменная ниже используется для получения общего количества используемых строк в таблице
  8. Переменная ниже используется в качестве счетчика, чтобы запустить цикл для всехстроки

Создайте функцию, которая будет выполнять следующие действия в порядке:

Получить номер столбца из таблицы 1 Sheet1, где имя заголовка = [Исправлено в версии]

Получить номер столбца из таблицы 1 Sheet1, где имя заголовка = [Ход выполнения]

Выберите лист 2, чтобы получить значение, вставленное в ячейку B1

Получить вставленное значение из ячейки, расположенной внутри листа 2

Установить значение счетчика = 1, чтобы запустить цикл с первой строки после заголовка в таблице 1 Лист 1

Открыть во время цикла и установить условие, если счетчик <= Общее количество строк, выполняемых ниже </p>

Начинайте перемещение строки за строкой в ​​таблице, используя метод Cells: Cells (counter, Get_Version_Item_Column) ', в методе клеток мы устанавливаем [Row]=> переменная счетчика, которая начинается со значения = 1, [Столбец] => Get_Version_Item_Column '

Получить значение второго столбца, который мы хотим поместить в условие, так же, как показано вШаг 7

Начать настройкуусловие usinf IF Else

If Get_Fixed_In_Version_Value = Get_Version_Inserted_Value And Get_Item_Progress_Value = "Approved" Тогда 'IF CORRECT NUMBER' DO что-то Example [Заменить значение в этой строке, этом столбце, этой ячейке наvalue = ""]

Else 'Делать что-либо еще

Добавить 1 к счетчику

Закройте цикл while

Код Решение:

Public Get_Version_Inserted_Value As String
Public Get_Version_Item_Column As Integer
Public Get_Fixed_In_Version_Value As String
Public Get_Item_Progress_Column As Integer
Public Get_Item_Progress_Value As String
Public QATotal_Items_Row As Integer
Public counter As Integer

Function Change_Version_Item_Progress() As String

Get_Version_Inserted_Value = ThisWorkbook.Worksheets("Sheet2").Range("B1").Value2

Get_Version_Item_Column = Application.Match("Fixed in Version", Sheets("Sheet1").Rows(1), 0)

Get_Item_Progress_Column = Application.Match("Item Progress", Sheets("Sheet1").Rows(1), 0)

Sheets(Sheet1).Select
QATotal_Items_Row = WorksheetFunction.CountA(Range("B:B")) - 1 
counter = 1
 While counter <= QATotal_Items_Row

    Get_Fixed_In_Version_Value = ThisWorkbook.Worksheets("Sheet1").Range("Table1").Cells(counter, Get_Version_Item_Column).Value2

    Get_Item_Progress_Value = ThisWorkbook.Worksheets("Sheet1").Range("Table1").Cells(counter, Get_Item_Progress_Column).Value2

    If Get_Fixed_In_Version_Value = Get_Version_Inserted_Value And Get_Item_Progress_Value = "Approved" Then 

        Get_Item_Progress_Value = ThisWorkbook.Worksheets("Sheet1").Range("Table1").Cells(counter, Get_Item_Progress_Column).Value = "Delivered"

    Else 
        Get_Item_Progress_Value = ThisWorkbook.Worksheets("Sheet1").Range("Table1").Cells(counter, Get_Item_Progress_Column).Value = Get_Item_Progress_Value

    End If
        counter = counter + 1 
    Wend

End Function

Надеюсь, что это поможет.

С уважением

0 голосов
/ 21 ноября 2018

Если это все, чего вы хотите достичь, и если вы можете использовать формулу в Sheet1 , в поле [Status] , то, вероятно, все, что вы хотите сделать, это использоватьследующая формула:

=IF(C2 = 5, "Delivered", "Pending")

Это в основном просматривает ваш столбец Версия и проверяет, является ли ваш номер версии 5 , затем измените текст на Доставлено , в противном случае используйте В ожидании (или что вам нужно).

...