2017-09-06 8 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

는 –

+0

가 @anonymous 나는 의견을 보내 주셔서 감사합니다 스크립트를 애플 리케이션,하지만 내가 문제를 해결하는 데 도움이되지 않습니다. 나는 교육을 찾고 있는데 분명하지는 않습니다. –

+0

분명히 해결책으로 제공하지는 않았지만 의견을 제시했습니다. –

답변

-1

누군가가 js 솔루션을 제안 할 수 있습니다. 하지만 여기에는 도우미 열이있는 원형 교차로 수식이 있습니다. 맨 윗줄 만입니다. 같은 방식으로 다른 필터링 된 행을 찾을 수도 있습니다. 그러나 OP는 맨 윗줄에 명시 적으로 표시되어 있으며, 원래 입력란 두 번째 시트에 A3 만 사용하여 단일 항목을 나타 내기 때문에 여기서는 모든 것을 설명하지 않겠습니다.

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) 
    }