1

AppleScript を使用して Excel で特定の行を削除しようとしています。特定の列の値に基づいて行を削除したい。指定された列内に、保持したい値のリスト (例: 3001、3004、5003 など) があります。

たとえば、値 (3001、3004、5003) のいずれかが列 CI にある場合、その値を含む行を保持したいとします。行の CI 列に値が含まれていない場合、その行を削除します。ここでこのアップルスクリプトを見つけましたが、行2以外のすべてを削除するだけで、値の範囲を維持できません。

列 C で作業していたため、フィールド 3 の代わりにフィールド 10 を使用し、「(ニューヨーク州ではない)」を「(3001 ではない)」に変更しましたが、うまくいきませんでした。また、値を一覧表示する方法は?

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
4

1 に答える 1

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 は行を上にシフトします。逆方向に進むと、すべての行が確実に処理されます。

コメントに基づいて編集:

パフォーマンスを向上させるには、反復ごとに 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
于 2013-05-14T20:57:57.363 に答える