2016-04-07 14 views
1

Excelファイルで特定の値(失敗したVLOOKUPの「#N/A」)を検索するPowerShellスクリプトがあります。その行を含めた後の行はすばやく削除されます。PowerShell - 開始行を見つけた後にExcelから範囲を削除する

私がこれまで行ってきた:

$sheetRange = $sheetData.UsedRange 
$colRange = $sheetData.Range("F1") 
[void] $sheetRange.Sort($colRange) 
$fileWorking.Save() 

$strFinder = "#N/A" 
$rngSearch = $sheetData.Range("F1").EntireColumn 
$txtFound = $rngSearch.Find($strFinder) 
$RowFound = ($txtFound.Row) 
for (($i = $RowFound); ($i -le $rowsTrans); $i++) 
{ 
    $currRow = $sheetData.Cells.Item($i).EntireRow 
    [void]$currRow.Delete() 
} 
$fileWorking.Save() 

問題があり、そこに20万行を超えている、と私は時に代わりに1行の全範囲を削除する必要があります。構文についていくつか混乱していますが、これを実現する適切な構文や方法を理解することはできません。

明らかに、forループが必要です。$RowFound$rowsTransの間の範囲全体を設定する必要がありますが、どのように行われますか?

+1

すべてのアドレスを含む連結文字列を作成し、それを使用して削除できますか?例えば'... Range(" A2、A4、A10、A19 ")。entireRow.Delete'これは、範囲オブジェクトの和集合のような範囲オブジェクト定義を使用します。 – Jeeped

+0

@Jeeped「グループ」の範囲を割り当てるのが間違っていたときの私の構文です。私は自分でそれを理解しましたが、あなたの答えは私の過ちと同じです。私は... Range( "A" + $ RowFound + ":A" + $ rowTrans)( ":"に注意してください)をしようとしていました。上記のように私の構文を訂正するためのあなたのコメントを回答に改革しますか?私は同意しますか? ;) – gravity

答えて

1

Range.Findループを実行するときに、すべてのアドレスを含む連結文字列を作成します。これを使用して、Range.EntireRow propertyから.DeleteまでのRange objectを定義します。

...Range("A2, A4, A10, A19").EntireRow.Delete 

範囲オブジェクトのUnionのような範囲オブジェクト定義を使用します。

+0

完璧なソリューション。私は最初に 'sort'プロセスをやっていることを指摘しておきたいので、最初のエントリを削除する必要があることを含めて、私はいつもすべてを知っていますが、ソートが完了していなければ、信頼できるものとして(私は可能な値を見つける必要があり、それらは順不同かもしれません)。私が必要としていたものをはるかに超えています! – gravity

関連する問題