2016-05-31 5 views
0

Ich habe eine Google-Tabelle mit 3 verschiedenen Blättern, die Sie sehen können here.Google Tabellenkalkulation kopiert Werte von einer Zeile in eine andere Tabelle

Was ich tun möchte, ist für jede Person in der 'Person' Blatt, erstellen Sie eine Reihe der Person in den 'Stacs' Blätter, die so oft basierend auf der Anzahl der 'Mahlzeiten' wir wiederholt werden in den 'Mahlzeiten' Blatt haben. Also, für jede Person möchte ich personA + meal1 in Zeile # 1, personA + meal2 in Zeile # 2, personA + meal3 in Zeile # 3 usw. erstellen.

Ich habe herausgefunden, wie man das wiederholt der gleiche Code immer und immer wieder. Der Code funktioniert, ist aber sehr ineffizient. Ich denke, dass es eine Möglichkeit geben muss, die gleiche Wiederholung zu machen, die ich auf eine viel sauberere und einfachere Weise mache. Ich lerne gerade, wie Sie einige Skripte verwenden, um meine Tabelle zu verbessern, so dass jede Hilfe mit diesem sehr willkommen sein wird!

Einige Vorsichtsmaßnahmen:

  • Wenn Sie einen Blick auf die Tabelle nehmen, werden Sie sehen, dass ich Formeln in irgendeiner Zelle bin mit der letzten Zeile mit dem Wert oder die Größe der Bereiche zu berechnen.
  • In der 'Mahlzeiten' Registerkarte habe ich einen Namen Bereich mit den Mahlzeiten definiert. Ich bin nicht sehr stolz darauf, denn die Liste der Mahlzeiten wird wachsen, also frage ich mich, ob es einen dynamischeren Weg gibt, damit umzugehen, anstatt die Bandbreite jedes Mal anzupassen, wenn ich eine neue Mahlzeit hinzufüge.

Hier ist der Code, den Sie auch in der Tabelle finden:

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(); 
} 

Antwort

0

Ihr Interesse an einer dynamischen Formel Wenn dies zu erreichen:

in Ihrem STACS Blatt in Spalte A Zelle 2 aufgesetzten :

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

und in Zelle B2:

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

Dadurch wird automatisch entfallen neuen Werte

enter image description here

+0

Diese Formeln sind AWESOME! Sie lösen das Problem einfach sehr einfach. Vielen Dank Aurielle! –

+0

Hallo Aurielle, ich bin mir nicht sicher, ob du das lesen wirst, seit es schon eine Weile her ist. Ich muss sagen, dass Ihre Lösung während dieser ganzen Zeit erstaunlich funktioniert hat. Die Sache ist, dass mein Spreadsheet riesig geworden ist und diese Woche habe ich diesen Fehler in der Formel: Fehler Text Ergebnis von REPT ist länger als das Limit von 32000 Zeichen. Außerdem ist das Google Spreadsheet jetzt sehr schwer und es kostet viel Zeit, es zu berechnen. Ich denke darüber nach, diese Tabelle in eine Excel-Datei zu migrieren, und ich bin überzeugt, wenn Sie irgendeine Formel kennen, die ich verwenden kann, um dasselbe Ergebnis zu erhalten, ist Excel. Danke im Voraus! –

Verwandte Themen