2016-05-12 3 views
0

私はカスタム関数を(最初にこれを行う)googleシートに追加しようとしていますが、コードを動作させるのに苦労しています。私は今、私のシートスクリプトでこれを持っている:OnEdit、入力したテキストを選択した値に置き換えてください

function onEdit(e) { 
    var range = e.range 
    if (range.value >= 0 && range.value <= 4) { 
    range.setValue(['○', '◔', '◑', '◕', '●'][n]); 
    } 
} 

が、これを言うライン2上のエラーを取得:

TypeError: Cannot read property "range" from undefined. (line 2, file "Code") 

を、私はこの1つを把握することができないよう...

+0

'onEdit'はカスタム関数ではなく、それはトリガーです。あなたはシートから機能を起動しますか?あなたはどんな結果を期待していますか?それは0 =○、1 =◔などですか? –

+0

うん、私はトリガーとして使用したい、私はまたそれが範囲F15で動作するようにしたい:F52 ....と結果は私があなたが言っていることを期待している... – user2061886

答えて

1

基本機能

ここでカスタム関数は、リストからシンボルを取得するためです:

function getSymbol(n) { 
    var Symbols = ['○', '◔', '◑', '◕', '●']; 
    if (n >=0 && n <=4) { 
     return Symbols[n]; 
    } 

    return 'not found'; 

} 

式の使い方

が、より高速な方法があります:数式を使用します。

A B 
0 ○ 
1 ◔ 
2 ◑ 
3 ◕ 
4 ● 

してから使用式: この新シート 'シンボル' を追加して貼り付け

= vlookup(A2, Symbols!$A:$B, 2, 0) 

のonEditコードを

あなたはコードがに記号を記入したい場合値[0-4]を入力したセルの場合は、次のコードを使用します。

function onEdit(e) { 
    var mySheetName = "Sheet1"; // change to yours 
    var myRangeAddress = "F15:F52"; // change to yours 

    var SS = SpreadsheetApp.getActiveSpreadsheet(); 
    var ss = SS.getActiveSheet(); 
    var myRange = e.range; 
    var targetRange = ss.getRange(myRangeAddress); 



    if (ss.getName() == mySheetName && RangeIntersect(targetRange, myRange)) { 
     var myVal = myRange.getValue(); 
     var Symbol = getSymbol(myVal); 
     myRange.setValue(Symbol); 
    } 

} 

function getSymbol(n) { 
    var Symbols = ['○', '◔', '◑', '◕', '●']; 
    if (n >=0 && n <=4) { 
     return Symbols[n]; 
    } 

    return 'not found'; 

} 

function RangeIntersect(R1, R2) { 

    var LR1 = R1.getLastRow(); 
    var Ro2 = R2.getRow(); 
    if (LR1 < Ro2) return false; 


    var LR2 = R2.getLastRow(); 
    var Ro1 = R1.getRow(); 
    if (LR2 < Ro1) return false; 

    var LC1 = R1.getLastColumn(); 
    var C2 = R2.getColumn(); 
    if (LC1 < C2) return false; 

    var LC2 = R2.getLastColumn(); 
    var C1 = R1.getColumn(); 
    if (LC2 < C1) return false; 

return true; 

} 
+0

はこれを得た仕事...しかし、私はまだonEditを介してそれを働かせたいと思います – user2061886

関連する問題