簡體   English   中英

Google電子表格將值從一行復制到另一張工作表

[英]Google spreadsheet copy values from one row to another sheet

我有一個Google電子表格,其中包含3種不同的表格,您可以在此處看到。

我想做的是在“人員”表中的每個人,在“ stacs”表中創建一行人,根據我們在“人員”表中擁有的“餐”的數量將其重復多次。餐單。 因此,對於每個人,我想在第1行中創建personA +餐1,在第2行中創建personA +餐2,在第3行中創建personA +餐3,等等。

我想出了如何重復執行相同的代碼。 該代碼可以工作,但是效率很低。 我猜必須要有一種方法,可以以更簡潔,更簡單的方式進行與我相同的重復。 我只是在學習如何使用一些腳本來改善我的電子表格,因此非常歡迎您提供任何幫助!

一些警告:

  • 如果您看一下電子表格,您會發現我在某些單元格中使用公式來計算具有值或范圍大小的最后一行。
  • 在“餐食”標簽中,我定義了餐食的名稱范圍。 我對此並不感到很自豪,因為進餐的數量會增加,所以我想知道是否有一種更動態的方式來處理此問題,而不是每次添加新餐時都調整范圍。

您也可以在電子表格中找到以下代碼:

 function copyValuesA() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();  
 var sheet = ss.getSheetByName("names");
 var name = sheet.getRange("A2");
 var sheetMeals = ss.getSheetByName("meals");
 var rangeMeals = sheet.getRange("mealsNames");
 var sheetstacs = ss.getSheetByName("stacs");
 var lastRow = sheetstacs.getRange("B1").getValue();
 var mealCount = sheetstacs.getRange("D1").getValue();
 var lastRowMeals = sheetstacs.getRange("C1").getValue();
 var rangeOrigname01 = sheetstacs.getRange("A" + lastRow + ":A" + mealCount);
 var rangeOrigname02 = sheetstacs.getRange("A1");

 name.copyTo(rangeOrigname01);

 var rangeDestMeals01 = sheetstacs.getRange("B" + lastRowMeals);

 rangeMeals.copyTo(rangeDestMeals01);

 }


function copyValuesB() {
var ss = SpreadsheetApp.getActiveSpreadsheet();  
var sheet = ss.getSheetByName("names");
var name = sheet.getRange("A3");
var sheetMeals = ss.getSheetByName("meals");
var rangeMeals = sheet.getRange("mealsNames");
var sheetstacs = ss.getSheetByName("stacs");
var lastRow = sheetstacs.getRange("B1").getValue();
var mealCount = sheetstacs.getRange("D1").getValue();
var lastRowMeals = sheetstacs.getRange("C1").getValue();
var rangeOrigname01 = sheetstacs.getRange("A" + lastRow + ":A" + mealCount);
var rangeOrigname02 = sheetstacs.getRange("A1");

name.copyTo(rangeOrigname01);

var rangeDestMeals01 = sheetstacs.getRange("B" + lastRowMeals);

rangeMeals.copyTo(rangeDestMeals01);   
}


function copyValuesC() {

var ss = SpreadsheetApp.getActiveSpreadsheet();  
var sheet = ss.getSheetByName("names");
var name = sheet.getRange("A4");
var sheetMeals = ss.getSheetByName("meals");
var rangeMeals = sheet.getRange("mealsNames");
var sheetstacs = ss.getSheetByName("stacs");
var lastRow = sheetstacs.getRange("B1").getValue();
var mealCount = sheetstacs.getRange("D1").getValue();
var lastRowMeals = sheetstacs.getRange("C1").getValue();
var rangeOrigname01 = sheetstacs.getRange("A" + lastRow + ":A" + mealCount);
var rangeOrigname02 = sheetstacs.getRange("A1");

name.copyTo(rangeOrigname01);

var rangeDestMeals01 = sheetstacs.getRange("B" + lastRowMeals);

rangeMeals.copyTo(rangeDestMeals01);   
 }


function copyValuesAll() {

copyValuesA();
copyValuesB();
copyValuesC();
 }

如果您對動態公式感興趣,請執行以下操作:

在第2單元格的stacs表中:

=TRANSPOSE(SPLIT(JOIN(";",ARRAYFORMULA(REPT(A2:A&";",COUNTA(meals!$A$2:$A)))),";"))

並在單元格B2中:

=TRANSPOSE(SPLIT(ARRAYFORMULA(REPT(JOIN(";",meals!$A$2:$A$8),COUNTA(names!A2:A))),";"))

這樣做將自動考慮新值

在此處輸入圖片說明

暫無
暫無

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

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