2012-12-11 159 views
0

假設我有一個數組= {A,B,Y,X}。我現在具有可以具有列和Rows.Say的動態數如下面的例子的Excel工作表:使用vbscript創建稀疏矩陣

輸入:

ColA ColB ColC .... 

T  P  Y .... 
C  Y  D .... 
B  A  M .... 
Z  R  X .... 

輸出:

ColA ColB ColC .... 

-  -  Y .... 
-  Y  - .... 
B  A  - .... 
-  -  X .... 

如果所有列只有數組值,如果找到其他值,則它們是需要通過替換爲「 - 」

有沒有更快的過程中做這些使用VBScript除了速度比較慢循環技術?

感謝,

+0

你寫過代碼,它是慢?我預計它會很快。 –

+0

是的,我使用循環技術。這是我粘貼在這裏的一個特殊的快照。實際工作表有3500行和250列,這使得它更慢。所以我想知道任何最快的過程。 –

+0

你可以發佈你使用的代碼嗎? –

回答

1
Sub Macro1() 

    Dim arr, i, rng As Range 

    arr = Array("X", "Y", "Z") 
    Set rng = ActiveSheet.Range("A1").CurrentRegion 

    With Application 
     .ScreenUpdating = False 
     .Calculation = xlCalculationManual 
    End With 

    For i = LBound(arr) To UBound(arr) 
     rng.Replace What:=arr(i), Replacement:="-", LookAt:=xlWhole, _ 
      SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ 
      ReplaceFormat:=False 
    Next i 

    With Application 
     .ScreenUpdating = True 
     .Calculation = xlCalculationAutomatic 
    End With 

End Sub 

編輯:

Sub KeepValues() 

    Dim arr, arrVals, i, rng As Range, r, c 
    Dim keepval As Boolean 

    arr = Array("X", "Y", "Z") 

    Set rng = ActiveSheet.Range("A1").CurrentRegion 
    arrVals = rng.Value 

    For r = 1 To UBound(arrVals, 1) 
     For c = 1 To UBound(arrVals, 2) 
      keepval = False 
      For i = LBound(arr) To UBound(arr) 
       If arr(i) = arrVals(r, c) Then 
        keepval = True 
        Exit For 
       End If 
      Next i 
      If Not keepval Then arrVals(r, c) = "" 
     Next c 
    Next r 

    rng.Value = arrVals 

End Sub 
+0

感謝蒂姆你的更新,但我正在尋找一個相同的VBscript代碼。 –

+0

我認爲你的宏將用「 - 」替換矩陣中的數組元素。我對嗎?如果我是正確的,那麼想說你想讓你實現相反的目標。所有的元素都需要用「 - 」替代,除了數組元素。 –

+0

對不起 - 誤讀了這個問題.... –