簡體   English   中英

如何使用公式或VBA根據來自另一列的另一個單元格值來設置單元格中的值?

[英]How to set value in a cell based on another cell value from another column using formula or VBA?

我有兩張紙: 在此處輸入圖片說明

表格1:由三列組成( 狀態成本版本

工作表2:用作兩頁(“ 公式” ,“ 版本號” )的“操作頁面”。

題:

我想在工作表2的第二欄中設置版本號,並使用VBA代碼讓公式或Button執行以下操作:

  1. 用戶設置值= 5在第2列[版本號]第2頁中
  2. 系統從[版本號]單元格獲取值
  3. 系統在工作表1列[版本]中搜索包含[版本號]值= 5的所有行。
  4. 系統將[ 狀態 ]列中具有[ 版本 ]值= 5的每個單元格替換為狀態值= “已交付”。

任何幫助請拋出公式或使用VBA代碼。

問候

如果僅此而已,並且可以在Sheet1[Status]字段中使用公式,則可能要做的就是使用以下公式:

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

基本上,這是在查看您的“ 版本”列,並檢查您的版本號是否為5 ,然后將文本更改為“ 已交付” ,否則使用“ 待定” (或您需要的任何值)。

我想感謝大家的建議,在搜索了關鍵代碼以知道如何返回特定表中填充的行數之后,我找到了解決方案,現在我可以執行我的邏輯了。 以下是我針對上述問題的解決方案。

腳步:

  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 value = 1以從表1表1中的標題之后的第一行開始循環

  6. 在while循環中打開,並在計數器<=總行數執行以下操作時設置條件

  7. 使用Cells方法開始在表中逐行移動:Cells(counter,Get_Version_Item_Column)'在cells方法中,我們設置[Row] =>計數器變量,該變量以值= 1開頭,[Column] => Get_Version_Item_Column'

  8. 用步驟7中所示的相同方式獲取要放入條件中的第二列的值

  9. 如果其他條件,則開始設置條件usinf

  10. 如果Get_Fixed_In_Version_Value = Get_Version_Inserted_Value和Get_Item_Progress_Value =“已批准”,則'IF正確數字'執行某些操作示例[替換此行中的值,此列,此單元格的值為=“”]

  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

希望它會有所幫助。

問候

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM