2017-05-22 1 views
1

私は自分の名前でシートに関連付けられている人の列Aのリストを持っているGoogleシートを使用しています。 B列には、自分のシートにコピーするために関連付ける必要があるデータがあります。フィルタとシートにコピー

I have created a sample here to show how it should look.私はまた、技術的に私が望むことをしているコードを添付しています。唯一の注意点は、まだコピーしている間に列Aに名前を取得できないということです。また、動作させるためには、範囲を静的または動的(データの最後の行まで)にするのではなく、手動で範囲全体を選択する必要があります。

私のニーズに合わせて、以下のコードを(シート内でも)変更できますか?以下のコードでは、名前は常にb列にあり、その隣のデータではなく、その名前を含む行全体がコピーされることを前提としています。

var ss=SpreadsheetApp.getActiveSpreadsheet(); 
var master = ss.getSheetByName('Home'); 
var colWidth = master.getLastColumn();// last used col in masterSheet 
var sheets = ss.getSheets();// number of sheets 

function onOpen() { 
    var menuEntries = [ {name: "Copy selected Rows to sheets", functionName: "copyRowsOnConditionV2"}, 
        ]; 
    ss.addMenu("Copy functions",menuEntries);// custom menu 
} 

function copyRowsOnConditionV2() { 
    var sheetNames = [];// array of existing sheet names 
    var sheets = ss.getSheets();// number of sheets 
    for(s=0;s<sheets.length;++s){sheetNames.push(sheets[s].getName())}; 

    var selectedfirstRow = ss.getActiveSelection().getRowIndex(); 
    var selectedHeigth = ss.getActiveSelection().getHeight() 
    var selectedFullRange = master.getRange(selectedfirstRow,1,selectedHeigth,colWidth); 
    var data = selectedFullRange.getValues(); 
    for(n=0;n<data.length;++n){ 
    if(data[n][1].length<16){ 

    var dest = ss.getSheetByName(data[n][1].toString().replace(/ /g,''));//find the destination sheet 
    Logger.log(data[n][1].toString().replace(/ /g,'')) 
    var destRange = dest.getRange(dest.getLastRow()+1,1);// define range 
    master.getRange(selectedfirstRow+n,1,1,colWidth).copyTo(destRange);// and make copy below last row 
    } 
    } 
} 

助けてください!

答えて

1

forループで使用しているインデックスを変更する必要があります。シートの最初の列を参照するには、インデックス0を使用します。

for(n=0;n<data.length;++n){ 
    if(data[n][0].length<16){ //index 0 refers to column A 

    var dest = ss.getSheetByName(data[n][0].toString().replace(/ /g,''));//find the destination sheet 
    Logger.log(data[n][0].toString().replace(/ /g,'')) 
    var destRange = dest.getRange(dest.getLastRow()+1,1);// define range 
    master.getRange(selectedfirstRow+n,1,1,colWidth).copyTo(destRange);// and make copy below last row 
    } 
    } 
関連する問題