2013-06-23 99 views
2

這裏是我的代碼如何比較兩個範圍的Range.Value2用C#

using Excel = Microsoft.Office.Interop.Excel; 
Excel.Range col1 = r1.Columns[i]; 
Excel.Range col2 = r2.Columns[j]; 

是否有一個快速的方法對我來說,比較上述兩個範圍的值2?

+5

比較他們在哪些方面?等於?共享元素?總和? – Sayse

+0

@Sayse比較Range.Value2 – startewho

回答

0

什麼是R1?什麼是r2?是這些單元格值還是一系列單元格值。

在任何情況下,Excel的API將返回到你要麼一座耗資維陣列或在未裝箱方式將細胞值(作爲一個對象,而不是一個特定的類型)。

有比較值,如在電子表格中的值可以是任何類型的沒有簡單的方法,它是你的責任,以弄清楚他們是基於您正在使用的電子表格上哪些類型。有些事情,我們無法幫助你。

除此之外,一旦你從值2得到你回報,你必須把它當作你將兩個陣列和1

+0

,r1和r2都是單元格值的範圍。現在我逐一比較每個項目,是否有更快或更簡單的方法? – startewho

+0

我不認爲有,即使有它會在下面做同樣的事情。你可以嘗試並行,並且比較幾個項目並行。 –

0

你可以比較兩個範圍比較各個項目1沒有通過使一個Excel的循環使用陣列式。以下代碼臨時將值存儲在單元格A20中,然後生成值True或False以確認範圍是否包含相同的值。他們寫在Excel VBA,但應該可以將它們轉換爲使用Interop。 varCalc(在第二個例子中)將是一個對象而不是變體。

Sub TestCompare() 
    '{=SUM(IF($A$1:$A$4=$B$1:$B$4,1,0))=ROWS($A$1:$A$4)} 
    Dim rngA As Range 
    Dim rngB As Range 
    Dim blnTheSame As Boolean 

    Set rngA = Range("$A$1:$A$4") 
    Set rngB = Range("$B$1:$B$4") 
    Range("A20").FormulaArray = "=SUM(IF(" & rngA.Address & "=" _ 
     & rngB.Address & ",1,0))=ROWS(" & rngA.Address & ")" 
    blnTheSame = Range("A20").Value 
    Range("A20").Clear 
    MsgBox "Are they the same? " & blnTheSame 
End Sub 

以下版本不相同,但完全在代碼工作,不需要使用電池來存儲臨時結果:

Sub TestCompare2() 
    '{=SUM(IF($A$1:$A$4=$B$1:$B$4,1,0))=ROWS($A$1:$A$4)} 
    Dim rngA As Range 
    Dim rngB As Range 
    Dim varCalc As Variant 
    Dim blnTheSame As Boolean 

    Set rngA = Range("$A$1:$A$4") 
    Set rngB = Range("$B$1:$B$4") 
    varCalc = "=SUM(IF(" & rngA.Address & "=" _ 
     & rngB.Address & ",1,0))=ROWS(" & rngA.Address & ")" 
    blnTheSame = Evaluate(Array(varCalc)) 
    MsgBox "Are they the same? " & blnTheSame 
End Sub 

無論使用Value2,但我可以」不要認爲這是比較必要的。