如何使用公式或VBA根据来自另一列的另一个单元格值来设置单元格中的值?

时间:2018-11-21 10:22:55

标签: excel vba formula

我有两张纸:enter image description here

第1页:由三列组成(状态费用版本

第2页:用作具有两列(公式版本号)的操作页。

问题:

我想在工作表2的第二栏中设置版本号,并使用VBA代码让公式或按钮执行以下操作:

  1. 用户在第2列[版本号]工作表2
  2. 中设置的值= 5
  3. 系统从 [版本号]单元格
  4. 中获取值
  5. 系统在工作表1列[版本]中搜索包含 [版本号]值= 5 的所有行。
  6. 系统将[版本]值= 5的[状态]列中的每个单元格替换为状态值= “已交付”。

任何帮助,请抛出公式或使用VBA代码。

致谢

2 个答案:

答案 0 :(得分:2)

如果这就是您要实现的全部,并且可以在 Sheet1 中的 [Status] 字段中使用公式,那么您可能要做的就是使用以下公式:

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

这基本上是在查看您的版本列,并检查您的版本号是否为 5 ,然后将文本更改为 Delivered ,否则使用待处理(或您需要的任何内容)。

答案 1 :(得分:0)

我想感谢大家的建议,在搜索了关键代码以知道如何返回特定表中填充的行数之后,我找到了解决方案,现在可以执行我的逻辑了。以下是我针对上述问题的解决方案。

步骤:

  1. 创建变量以保存值
  2. 下面的变量将保存需要更新的插入值
  3. 以下变量将在表中保存“项目版本列”编号
  4. 下面的变量将保存[Get_Version_Item_Column]列下要比较的每一行的值
  5. 以下变量将在表中保存“项目进度列”编号
  6. 下面的变量将保存[Get_Item_Progress_Column]列下要比较的每一行的值或每一行的值
  7. 以下变量用于获取表中已用行的总数
  8. 下面的变量用作计数器来为所有行抛出循环

创建将按顺序执行以下操作的功能:

  1. 从表1 Sheet1中获取列号,其中标题名称= [固定于版本]

  2. 从表1 Sheet1中获取列号,其中标题名称= [Item Progress]

  3. 选择工作表2以获得插入到单元格B1中的值

  4. 从Sheet2内部的单元格获取插入值

  5. 设置Counter值= 1以从表1表1中的标题之后的第一行开始循环

  6. 在循环时打开,并在计数器<=总行数执行以下操作时设置条件

  7. 使用Cells方法开始在表中逐行移动:cells(counter,Get_Version_Item_Column)'在cells方法中,我们设置了[Row] =>计数器变量,该变量以值= 1,[Column]开头=> Get_Version_Item_Column'

  8. 以与步骤7中所示相同的方式获取要放入条件中的第二列的值

  9. 如果没有其他条件,则开始设置条件

  10. 如果Get_Fixed_In_Version_Value = Get_Version_Inserted_Value和Get_Item_Progress_Value =“ Approved”,则'IF CORRECT NUMBER'做一些示例[替换此行中的值,此列,此单元格的值为=“”]

  11. 其他'进行其他操作

  12. 将1加到计数器

  13. 关闭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

希望这会有所帮助。

致谢