2013-07-13 3 views
27

A에서 H까지의 데이터가있는 시트가 있습니다.단일 열의 마지막 행을 확인하십시오.

데이터가 포함 된 A 열의 마지막 행을 결정해야합니다 (모든 인접한 - 데이터/행의 틈이 없음).

다른 열에도 이 있고 A 데이터보다 행보다 데이터가 많으므로 A 열만 분리해야합니다. (그리고/또는 범위 내에서 단지 A).

나는 코드 라인 수십 포괄 여러 기능을 수행 할

=COUNTA(A2:A100) 

그러나 Google 애플리케이션 스크립트 솔루션에 대한 내 연구의 모두, 모두가 내가 찾을 수가 요구되는 사용하여 스프레드 시트 수준에서이 작업을 수행 할 수 있습니다 - 많이 i++ 물건을 포함하여 ... 덜 덜 복잡하게 A1에서 직접 오프셋을 통해 할 수 있습니다.

이 메서드를 수정할 수있는 열 특정 방법이 있습니까?

var aLast = ss.getDataRange().getNumRows(); 

복잡한 프로세스가 필요한 경우 그럴 수도 있습니다. 그러나 나는 더 간단한 해결책을 상상하기가 어렵다.

나에게 계몽주의를 돌리는 사람이 있습니까?

답변

63

를 사용하려는 정상적인 방법으로 그것을 사용?

var Avals = ss.getRange("A1:A").getValues(); 
var Alast = Avals.filter(String).length; 

나는이 아이디어를 this answer에서 빌 렸습니다. Array.filter() 메서드는 A 열의 모든 셀을 포함하는 Avals 배열에서 작동합니다. 네이티브 함수의 생성자를 필터링하면 null이 아닌 요소 만 반환됩니다.

이 기능은 단일 열에서만 작동합니다. 범위에 여러 열이 포함 된 경우 filter()의 결과에는 모든 열의 셀이 포함되므로 채워진 범위의 범위를 벗어날 수 있습니다.

+4

매우 교활합니다. 나는 자바 스크립트를 창의적으로 생각할만큼 충분히 이해할 수있는 날을 고대합니다. 정시에 모두, 나는 생각한다. 그러나 그 동안 나는 당신이 생각하는 방식을 보는 것을 즐겼습니다. 그리고 당신의 솔루션에 대한 영감을 인용 해 주신 여러분 께 진심으로 감사드립니다. 고상한. 다시 한번 고마워. – 5th4x4

+1

경험이 많은 코더에게는 거의 확실한 사실이 있습니다. 범위가 단일 열 이상으로 확장 될 수 없다는 것입니다. 이것은 내가 얻지 못했던 것이었지만, Mogsdad는 하나의 컬럼 이상으로 확장 할 수없는 주석 (삭제 된)에서 이것을 지적했다. 다시 한번, 나는 단지 내 경험 수준에있는 사람들을 위해 여기에 넣고 싶고 여전히 몇 가지 개념을 이해하는데 문제가있다. 고마워, 모그다드. – Soundfx4

+0

이것이 내가 필요한 것입니다. 감사합니다! – Jordan

7

정확한 수식은 없지만 열 A의 마지막 행을 찾으려면 수십 줄의 코드가 필요하지 않습니다.이 간단한 함수를 사용해보십시오. 셀에 당신이 어떻게 자바 스크립트 트릭을 사용하는 방법에 대한 몇 가지 다른 기능 =CountColA()

function CountColA(){ 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var data = sheet.getDataRange().getValues(); 
    for(var i = data.length-1 ; i >=0 ; i--){ 
    if (data[i][0] != null && data[i][0] != ''){ 
     return i+1 ; 
    } 
    } 
} 
+0

위의 반환 전체 워크 시트가 아닌 내가 스크립트 자체 내에서 사용할 변수의 형태로 COL A의 마지막 행을 필요 COL A의 마지막 행을 : 코드는 다음과 같습니다. 이것에 마술 먹는 피임약이 없으므로, 나는 (공백의) 치찰음이 날 때까지 A1에서 내려 줄 것입니다. 어쨌든 고마워. – 5th4x4

+1

죄송합니다. 제게는 약간의 실수가있었습니다. 수정 된 스크립트를 참조하십시오. – Srik

0

그냥이 사용하지 :

가 // 열 또는 마지막 열의 인덱스의 어떤을 얻으려면

var에 numColumns = sheet.getLastColumn()

// 얻을 수있는 행 또는 마지막 행 색인 없음

var numRows = sheet.getLastRow()

,

VAR 시트 SpreadsheetApp.getActiveSheet =()

+2

이것은 빈 셀을 포함하여 전체 시트를보고 있으며, OP는 원하는 것처럼 들리지 않습니다. –

0

는 I은 행 인덱스 또는 열 인덱스를 지정 getLastRow/getLastColumn 기능을 재 작성.

function get_used_rows(sheet, column_index){ 
     for (var r = sheet.getLastRow(); r--; r > 0) { 
     if (sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getCell(r, column_index).getValue() != ""){ 
      return r; 
      break; 
     } 
     } 
    } 

function get_used_cols(sheet, row_index){ 
    for (var c = sheet.getLastColumn(); c--; c > 0) { 
    if (sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).getCell(row_index, c).getValue() != ""){ 
     return c; 
     break; 
    } 
    } 
} 
3

역순으로 진행하면됩니다. 스프레드 시트의 마지막 행부터 시작하여 값을 얻을 때까지 올라갑니다. 그 사이에 빈 행이 있어도 모든 경우에 적용됩니다.

var iLastRowWithData = lastValue('A'); 
function lastValue(column) { 
    var iLastRow = SpreadsheetApp.getActiveSheet().getMaxRows(); 
    var aValues = SpreadsheetApp.getActiveSheet().getRange(column + "2:" + column + lastRow).getValues(); 

    for (; aValues[iLastRow - 1] == "" && iLastRow > 0; iLastRow--) {} 
    return iLastRow; 
} 
관련 문제