2017-09-06 12 views
-1

私はGoogleシート(KWTT)を持っています - データはデフォルトのフィルタビューを使用してフィルタリングされています。そして、同じ文書の別のシートで、私はフィルタリングされた情報の一部を呼び出そうとしています。ただし、フィルタリングされた情報ではなく、絶対行情報を取得しています。Googleシート、フィルタリングされたデータのクエリ行

=KWTT!A3 

これは私が最初のシート(KWTT)からデータを取得するために第2のシート上に使用してい式です。ただし、デフォルトのフィルタ表示を使用すると、一番上の行はA121にスワップされます。

How do I always retrieve the top row of the filtered data in the first sheet to the second sheet?

どのように私はいつもセカンドシートに最初のシートでフィルタリングされたデータの先頭行を取得するのですか?

+0

あなたはGoogleアプリケーションスクリプトが必要です –

+0

@anonymousフィードバックに感謝しますが、これで問題を解決することはできません。私は教育を求めています。明らかではありません。 –

+0

明らかに私は解決策として提供していませんが、コメントとして。 –

答えて

-1

誰かがjsソリューションを思いつくかもしれません。しかし、ここでは円弧の式の1つで、最上列のみを見つけることができます。他のフィルタリングされた行を同じ方法で見つけることは可能かもしれません。しかし、私はここですべてを説明するつもりはありません。OPは一番上の行に明示されていて、元の数式の2番目のシートにはA3しか使われていないので、1つのエントリを示します。

KWTTにおけるヘルパーカラムJ1:

=ARRAYFORMULA(ROW(J1:J1000)) 

我々は、可視範囲の最小値を取得するために、濾過行をスキップSUBTOTALを使用していると、これが供給される2

=Indirect ("KWTT!A:"&SUBTOTAL(105,KWTT!J1:J1000)) 

シートでINDIRECT

行全体をによってもたらさすることができます。

=INDEX(KWTT!A1:I1000,SUBTOTAL(105,KWTT!J1:J1000)) 

しかし、セットアップこれは、非常に多くの理由でまだ弱いです。むしろ、与えられた配列を直接フィルタリングするのに、FILTERまたはQUERYを好むでしょう。

=QUERY(KWTT!A1:I1000,"Select * where A contains 'anime'",1) 
0

これは多くの問題のようですが、これはそれを行います。おそらくssIDとシート名を変更する必要があります。

function copyFilteredData1Row() { 
    var hiddenRows = [];//A 1d array of hidden rows. 
    var ssId="1u94OL_HMszOkvvyXdci-SEq7NO0KUJiD1t0xUqHvCMw"//Spreadsheet ID 
    var sheetId="0" //Sheet ID 
    // limit what's returned from the API 
    var fields = 
"sheets(data(rowMetadata(hiddenByFilter)),properties/sheetId)"; 
    var sheets = Sheets.Spreadsheets.get(ssId, {fields: fields}).sheets; 
    for (var i = 0; i < sheets.length; i++) { 
     if (sheets[i].properties.sheetId == sheetId) { 
      var data = sheets[i].data; 
      var rows = data[0].rowMetadata; 
     for (var j = 0; j < rows.length; j++) { 
      if (rows[j].hiddenByFilter) hiddenRows.push(j)} 
    }} 

    var ss=SpreadsheetApp.getActiveSpreadsheet() 
    var s=ss.getSheetByName("Sheet1")//filtered sheet 
    var s1=ss.getSheetByName("Sheet2")//Copy to sheet 
    var lr1=s1.getLastRow() 
    var lc1=s1.getLastColumn() 
    var lr=s.getLastRow() 
    var lc=s.getLastColumn() 
    var data1=s.getRange(1,1,lr,lc).getValues()//get all data from filtered sheet. 

    var nonHiddenRows=[]//Array of non hidden data. 

    for (var i = 1; i <data1.length ; i++) { 
    var count=0 
    var row = i 
    for(var k=0;k<hiddenRows.length;k++){ 
     var hrow=hiddenRows[k] 
    if(row!=hrow){ 
     count=count+1} 
    } 
     if(count==hiddenRows.length){ 
     nonHiddenRows.push(data1[i]) 
     if(nonHiddenRows.length==1){break} 
     } 
    } 
    if(s1.getRange(1, 1, 1, 1).getValue()!=""){s1.getRange(1, 1, lr1, 
lc1).clearContent()}//Clear old filtered data. 
    s1.getRange(1, 1, nonHiddenRows.length, 
nonHiddenRows[0].length).setValues(nonHiddenRows) 
    } 
関連する問題