2016-09-30 7 views
0

2枚あります。最初は6列のチェックイン、2行目は8列のチェックアウトです。同じ列の選択された行を2つの異なるシートに見つけて1つのシートから削除する

私の列は、このようなものです:チェックインのシートで

コード|モデル| |タイプ|ロケーション|チェックイン時間

チェックアウトシートに:

チェックアウト(Y/N)?|コード|モデル| |タイプ|ロケーション|チェックイン時間|チェックアウト時間

あなたが見るように、チェックインの列とデータは、フィルター機能でチェックアウトシートに来ます。だから、「モデル」をチェックアウトしたいときは、特定のセルにモデル名を入力するだけで、チェックインシートから関連するデータが取り込まれます。また、チェックアウトシートの最初の列の機能を作成しました。フィルタリングされた行の1つに「チェックアウト?(y/n)」列の下に「y」と入力すると、now最後の列。

私の質問は、「チェックアウト」シートの最初の列に「y」の行があり、「チェックイン時間」に基づいてその行をチェックインシートで見つける必要があるということです。各行の最もユニークなデータです)、それを私の在庫リストであるリストから削除します。私はそれを行う方法がわからないのですか?私はGoogleスクリプトのコードを探していたが、運が良かった。アドバイスをいただければ幸いです。

+0

これはGoogleスプレッドシートまたはExcel用ですか?彼はあなたにはGoogleスプレッドシートのみを掲載していますが、2つのExcel関連タグがあります。 –

+0

@RobinGertenbach、これはGoogleスプレッドシート用です。私はちょうど同じようなプロセスがある場合に備えて、タグが付けられた関連するものに優れていて、誰かがそれを知っているならば。 – Alex

答えて

1

ここでは、おそらく「Y」は、最初の列に入力されているかどうかを確認でしょうonEdit()機能必要があります:

function onEdit(e) { 
    var ss = e.source; 
    if (e.range.getColumn() === 1 && e.value === "y") { 
     ...some code here.... 
    } 
} 

その後、あなたは「Y」が入力された行から値を取得します

getValues()は常に2次元配列を返します。なぜなら、1つしかないのに最初の要素を指定する必要があるからです。あなたがチェックインのシートからすべての値を取っている。同様に

var checkInArray = checkInSheet.getRange(2, 1, checkInSheet.getLastRow() - 1, checkInSheet.getLastColumn()).getValues(); 

そして、検査部が来ます。私はすべてのアレイの値を比較する方が安全かもしれないと思っただけではなく日付:

for (var i = 0; i < checkInArray.length; i++) { 
     if (arraysEqual(checkInArray[i], checkOutArray) == true) { 
     checkInSheet.deleteRow(i + 2); //i + 2 is the row in which same values have been found 
     return true; 
     } 
     else continue; 
    } 
arraysEqualがある

function onEdit(e) { 
    var ss = e.source; 
    var checkOutSheet = ss.getSheets()[0]; 
    var checkInSheet = ss.getSheets()[1]; 
    if (e.range.getColumn() === 1 && e.value === "y") { 
    var checkOutArray = checkOutSheet.getRange(e.range.getRow(), 2, 1, 6).getValues()[0]; //getting the values from the row where "y" was entered (e.range.getRow()) 
    var checkInArray = checkInSheet.getRange(2, 1, checkInSheet.getLastRow() - 1, checkInSheet.getLastColumn()).getValues(); //getting all the values from check out sheet 
    for (var i = 0; i < checkInArray.length; i++) { 
     if (arraysEqual(checkInArray[i], checkOutArray) == true) { 
     checkInSheet.deleteRow(i + 2); //i + 2 is the row in which same values have been found 
     return true; 
     } 
     else continue; 
    } 
    } 

} 

function arraysEqual(arr1, arr2) { 
    if(arr1.length !== arr2.length) { 
    return false; 
    } 
    for(var i = arr1.length; i--;) { 
    if(arr1[i].toString() !== arr2[i].toString()) { 
     return false; 
    } 
    } 

    return true; 
} 

function arraysEqual(arr1, arr2) { 
    if(arr1.length !== arr2.length) { 
    return false; 
    } 
    for(var i = arr1.length; i--;) { 
    if(arr1[i].toString() !== arr2[i].toString()) { 
     return false; 
    } 
    } 

    return true; 
} 

完全にそれはこのようになります

関連する問題