2016-07-25 2 views
0
例えば

が、私は以下のロジックを決定しているよwが指定された範囲内に存在する場合:決定セルは/ PowerShellのエクセルCOM

if (B2 in A1:B20) # if cell B2 is within the range A1:B20 
{ 
    return $true 
} 

このような何かのために使用することができるエクセル内の関数がありますが?私は= COUNTIF()関数について読んでいますが、それを動作させることはできませんでした。ここでもPowershell内でExcel COMオブジェクトを使用しています。

おかげ

答えて

1

セル名は基本的に座標なので、これは純粋に算術比較の質問、エクセル自体が関与する必要はありませんです:

function Test-CellInRange 
{ 
    param(
     [ValidatePattern('^[A-Z]+\d+$')] 
     [string]$Cell, 
     [ValidatePattern('^[A-Z]+\d+\:[A-Z]+\d+$')] 
     [string]$Range 
    ) 

    # Grab X and Y coordinates from Range input, sort in ascending order (low to high) 
    $P1,$P2 = $Range -split ':' 
    $Xpoints = ($P1 -replace '\d'),($P2 -replace '\d') |Sort-Object 
    $Ypoints = ($P1 -replace '\D'),($P2 -replace '\D') |Sort-Object 

    # Grab X and Y coordinate from cell 
    $CellX = $Cell -replace '\d' 
    $CellY = $Cell -replace '\D' 

    # Test whether cell coordinates are within range 
    return ($CellX -ge $Xpoints[0] -and $CellX -le $Xpoints[1] -and $CellY -ge $Ypoints[0] -and $CellY -le $Ypoints[1]) 
} 

のようにそれを使用します。

if(Test-CellInRange -Cell B2 -Range A1:B20){ 
    "B2 is in A1:B20" 
} 
+0

ありがとうございます!この関数をどのように呼び出すかの例を示すことができますか?私は正規表現パターンを理解するのに少し苦労しています – Quanda

+0

@Quanda例を追加しました! ValidatePattern属性は、セル座標が常に正しい形式(つまり、[1つ以上の文字] [1つ以上の数字])であることを確認するだけです。 –

+0

すごくうれしくありがとう! @マティアス・R・ジェッセン – Quanda

1

私はCOMインタフェースについてはわかりませんが(それは一度も使用しませんでしたが)、INTERSECT Methodへのアクセス権があれば、次のように書くことができます:

これは、2つの範囲のセット交差点だけです。それらが交差しない場合、その一方は間違いなく他方のサブセットではありません。適切なサブセットを確認する必要がある場合は、より創造的になり、交差が目的のサブセット全体と同じであるかどうかを確認する必要があります。設定されたロジックを覚えておき、UNION Methodをチェックしてください。これらの間に、必要な操作を処理できるはずです。