2013-05-14 3 views
1

ExcelScript를 사용하여 Excel에서 특정 행을 삭제하려고합니다. 주어진 열의 값을 기반으로 행을 삭제하고 싶습니다. 주어진 열 내에서 값의 목록 (예 : 3001, 3004, 5003 등)을 유지하고 싶습니다.Excel에서 AppleScript로 행 삭제

예를 들어, 내 값 (3001, 3004, 5003) 중 하나라도 C 열에 있으면 해당 값이 들어있는 행을 유지하려고합니다. 행 C에 내 값 중 하나가 포함되어 있지 않으면 해당 행을 삭제하려고합니다. 나는이 applescript를 여기에서 찾았다. 그러나 모든 것은 삭제한다. 그러나 열 2 그러나 나는 가치의 나의 범위를 유지하기 위해 그것을 얻을 수 없다.

필자는 C 열을 사용하여 "(Not NY State)"를 "(Not 3001)"로 변경 했으므로 필드 3의 필드 10을 대체했지만 작동하지 않았습니다. 또한 방법 "(3001, 3004, 5003)"나는 그들을 나열 않는 값을 표시해야합니까 또는 "(3001, 3004, 5003) 또는 무엇

tell application "Microsoft Excel" 

    set autofilter mode of active sheet to false 
    set lastRow to first row index of last row of used range 

    autofilter range row ("1:" & lastRow) field 10 criteria1 "(Not NY State)" 
    select row ("2:" & lastRow) 
    delete selection -- if you want to delete 
    #clear contents selection -- if you only wish to clear the data 

end tell 

답변

1

난 그냥 행을 반복 할 것입니까? 값을보고 :. 당신이 행을 삭제하면이 행를 뒤로 반복 할

set myValues to {3001, 3004, 5003} 
tell application "Microsoft Excel" 
    tell active workbook 

     (* Code to count the amount of rows *) 

     repeat with i from rowCount to 1 by -1 
      set cellValue to value of cell ("C" & i) 
      if cellValue is not in myValues then 
       delete row i 
      end if 
     end repeat 
    end tell 
end tell 

하는 것으로하여 Excel에서 행을 이동합니다 뒤로 이동하는 모든 행이 처리되는 것을 보장

편집 BASED ON.. 답장 :

성능을 향상 시키려면 모든 반복 동안 Excel에서 셀 값을 가져 오는 대신 열의 모든 값을 가져 와서 반복하십시오.

set columnValues to my quickExcelList("C1:C" & rowCount, return) 
repeat with i from rowCount to 2 by -1 
    if item i of columnValues is not in myValues then 
     tell application "Microsoft Excel" 
      delete row i 
     end tell 
    end if 
end repeat 

--Shane Stanley's routine to get tab/return delimited text from an Excel sheet 
-------------------------------------------------------------------------------- 
on quickExcelList(theRange, theDelim) 
    tell application "Microsoft Excel" 
     tell active sheet 
      copy range range theRange 
      set copiedText to the clipboard 
     end tell 
    end tell 

    set theList to strLib's explode(copiedText, theDelim) 
    return theList 
end quickExcelList 
+0

고마워요.하지만 루프의 잠시 b/c 걸립니다. 그것을 할 수있는 더 짧은 방법이 있습니까? 또한, 어떻게 내 머리글과 첫 번째 행을 제외 할 수 있습니까? 이것은 내가 사용한 코드입니다. myValues를 {3102, 3104, 3105}로 설정합니다. \t에 행을 설정하면 ((활성 시트의 사용 된 행의 행 수) +1) cellValue 다음 \t \t \t 삭제 행 내가 \t \t \t 최종 반복 끝이 –

+0

에게 최종 경우 제외 할 myValues에없는 경우 셀의 값 ("C"& I) \t \t-1 \t \t 설정 cellValue 헤더, 루프를 "반복하십시오 rowCount에서 -2로 -1까지. " 그러면 첫 번째 줄 처리가 중단됩니다. 퍼포먼스와 관련하여 모든 값을 앞에두고 루프를 반복하는 것이 도움이 될 수 있습니다. 그러면 엑셀로 걸려 오는 전화가 절반으로 줄어들 것입니다. 스크립트가 실행되는 동안 Excel을 숨기면 빠른 속도로 2-3 배 실행됩니다. –

+0

모든 도움에 감사드립니다! 그것은 훌륭하게 작동하지만 "-2 by -1"대신 "+2 by -1"이됩니다. 한 가지 더 질문합니다. 모든 값을 앞에두고 루프를 반복하면 무엇을 의미합니까? –