4

データの複数の行と列を含むGoogleスプレッドシートがあり、スプレッドシートの各行で特定のフレーズを検索し、その行の列の1つにフレーズが含まれている場合は、その行を新しいシートに印刷したいと考えています。データ(列Dとしましょう)。

すべてのデータを含む私のシートは、創造的に「すべてのデータ」と呼ばれています。同様に、選択されたデータのみを含む私のシートは「選択されたデータ」と呼ばれます。私が探しているフレーズは「こんにちは」だとしましょう。

現在、「選択されたデータ」シートには、セルA1に次のものがあります。

=QUERY('All the data'!A:D,"select find("hello",All the data!D:D)>0")

これにより解析エラーが発生します。「すべてのデータ」シートの列Dに「hello」を含む「すべてのデータ」シートのすべての行を出力する必要があります。

私は何が間違っているのですか?正しい機能を使用していますか?他に使いやすい機能はありますか?正しい式は何ですか?

最終的には、これをGoogleAppsScriptに変換したいと思います。

4

2 に答える 2

4

そして、これがあなたが試すことができる「スクリプトソリューション」です。多くの可能なアプローチがあります、これはそれらの1つです...

function testfindRow(){ ;// this function only to test the other one by giving it a parameter and using its result.
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var otherSheet=ss.getSheets()[1];// assuming there is a second sheet to copy to
        var datatocopy=findRow('Hello');
        Logger.log(datatocopy)
        if (datatocopy!=-1){
        otherSheet.getRange(otherSheet.getLastRow()+1,1,1,datatocopy[0].length).setValues(datatocopy);
        }
 }
//
function findRow(item) { ;// the actual search function
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var sheet=ss.getSheets()[0];
        var values = sheet.getDataRange().getValues();
          for(cc =0; cc < values.length; ++cc) {
            if(values[cc].toString().match(item)==item){break};// here you can eventually use string modifiers like toLowerCase() to allow for wider search criteria
             }
        Logger.log(cc);// the array index in which the result was found, cc+1 is the Row index
        if (cc==values.length){return -1}
         var resultArray=sheet.getRange(cc+1,1,1,values[cc].length).getValues()
         return resultArray ;// the returned value is a 2 dimensions array to use with setValues()
 }

あなたのコメントに続いて、これはアイテムを含むすべての行を返すバージョンです。エラートラップも変更する必要がありましたが、結局のところ、全体が非常に単純です。

    function testfindRow(){ ;// this function only to test the other one by giving it a parameter and using its result.
            var ss = SpreadsheetApp.getActiveSpreadsheet();
            var otherSheet=ss.getSheets()[1];// assuming there is a second sheet to copy to
            var datatocopy=findRow('Hello');
            if (datatocopy.length>0){
            otherSheet.getRange(otherSheet.getLastRow()+1,1,datatocopy.length,datatocopy[0].length).setValues(datatocopy);
            }
     }
    //
    function findRow(item) { ;// the actual search function
            var ss = SpreadsheetApp.getActiveSpreadsheet();
            var sheet=ss.getSheets()[0];
            var resultArray=new Array();
            var values = sheet.getDataRange().getValues();
              for(cc =0; cc < values.length; ++cc) {
                if(values[cc].toString().match(item)==item){// here you can eventually use string modifiers like toLowerCase() to allow for wider search criteria
// or like this to search only in column D // if(values[cc][3].toString().match(item)==item){
                resultArray.push(values[cc]);
                            };
                 }
            Logger.log(resultArray);// the array of Rows in which the item was found, 
            return resultArray ;// the returned value is a 2 dimensions array to use with setValues()
     }
于 2012-06-19T08:36:55.170 に答える
3

スプレッドシート関数のソリューションは次のようになります。

=QUERY('All the data'!A:D;"select * where D contains 'hello'")

注:これにより、「Othello」に「hello」が表示されます。

于 2012-06-19T08:21:59.527 に答える