簡體   English   中英

如何在Google表格中將值從一個單元格轉移到另一個單元格

[英]How To Transfer A Value From One Cell To Another In Google Sheets

我有一個有趣的情況,我的Google表格中的第二列代表各個站點的項目數量。 我要完成的工作是在將轉移值輸入到這些列之間的單元格時自動調整這些值的數量。

例如,以下是工作表中的前幾個單元格:

單元格B5:此處輸入的數據應添加到C5中的值,然后清除

單元格C5:顯示AMOUNT C

單元格D5:應從C5中的值中減去此處輸入的數據,將其添加到E5中的值中,然后清除

單元格E5:顯示AMOUNT E

請參閱此附加示例。 將值添加到黃色單元格,並在每個黃色單元格上方描述它們需要對相鄰單元格執行的操作。

一些例子:

  1. 將數字5添加到單元格B5中需要將C5的值從72更改為77,然后需要清除B5。

  2. 將數字12加到J6需要將I6的值從36更改為24,將K6的值從無更改為12,然后需要清除J8。

  3. 將數字32添加到R5需要將Q5的值從41更改為9,將S5的值從1更改為3,然后需要清除R5。

  4. 在單元格V6中添加數字5需要將U6的值從5更改為空,然后需要清除V6。

我更喜歡使用公式,因為我可以通過轉到文件/電子表格設置/計算並將最大迭代次數更改為1(閾值為0.05)來避免循環引用錯誤,所以我可以在單元格中使用= C5 + B5這樣的公式C5。 是否可以添加此公式,以便在將B5的值添加到C5之后清除B5? 然后我該如何添加從C5中減去在D5中輸入的值,然后再清除D5的功能?

有人有什么想法嗎? 不勝感激!

我認為您需要此onEdit()觸發器 另請參閱關於Apps腳本Spreadsheet App的文檔。

例如,在工作表中,需求1的實現可以如下。

function onEdit(e) {
   var sheet = SpreadsheetApp.getActiveSpreadsheet();
   var tab = sheet.getSheetByName('Item Transferring');
   sheet.setActiveSheet(tab); \\<---
   var cell = e.range;
   user_input = cell.getValue();
   if (cell.getRow() == 5 && cell.getColumn() == 2){ \\ it's probably best that you read the row and column indices of B5 and C5 from a helper tab/sheet in case you decide to move B5 and C5 later. 
      var cell2 = tab.getRange(5,3);
      cell2.setValue(cell2.getValue()+user_input);
      cell.clear({contentsOnly: true});
      SpreadsheetApp.setActiveRange(cell); \\<--- use this in conjunction with setActiveSheet. Either use both or use neither.
   }       
}

為函數onEdit設置一個onEdit觸發器,將發生期望的效果。

請注意,在您的方案中,編輯總是在單個單元格上。 有時,可以同時對多個單元進行編輯。 確保界面中沒有歧義。 此外,Google表格的保護功能可能會派上用場。


評論:

嘗試創建一個不依賴於每次編輯更改的其他界面。 您很容易遇到同步問題。 不需要很多投入的最終工作表可能沒問題。 但是,它會減慢您的常規活動。

同樣,您可能應該有一個顯示最新編輯的單元格。


編輯:關於推廣代碼並應用上述示例,您可以執行以下操作:

function process_input(row_input,col_input,input,output,func){
  // row_input and col_input are the cell indices you are watching
  // input is the range object that the edit trigger passes in
  // output is the range object that contains the cell you want your edit to happen to
  // func contains the formula you want in the output cell

   if (input.getRow()==row_input,input.getColumn()==col_input){
      output.setValue(func(input,output));
      input.clear({contentsOnly: true});      
   }
}

作為可以解決其余問題的示例,較早的方案1將需要以下功能。 請注意,用戶輸入可能偶然是非數字的。

function update_add(input,output){
    if (!isNaN(input.getValue()) && isFinite(input.getValue()){
       return input.getValue()+output.getValue()
    }else{
       return output.getValue()
    }
}

您將為想要的每種更新編寫一個類似於上面的簡單函數。 綜上所述,以場景1為例,它監視B5並使用添加配方更新B6,您可以

function onEdit(e){

...

   output = tab.getRange(5,3);
   process_input(5,2,e.range,output,update_add)

}

如前所述,最好將您正在觀看的單元格的索引從另一張表中提取出來-反對對數字5、3、2進行硬編碼。要為所有方案實現完整的解決方案,您只需遍歷您需要通過update方法觀看的所有單元,然后遍歷所有可能的update方法。

您確實需要自己實現確切的代碼。 在Stackoverflow上,我們僅討論方法及其工作方式。 我們使用最少的獨立實例進行討論。 我們無法編寫代碼來完成人們的項目。 那將不是一種可持續的互動方式。

從該答案中可以獲取的目標是各種應用程序腳本實用程序,並通過示例代碼和有關泛化的建議進行了鏈接和描述。 而已。 如果對實用程序有疑問,請閱讀鏈接的文檔。 如果之后仍然有疑問,請打開另一個具有特定重點的帖子。

暫無
暫無

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

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