Excel 使用vbscript创建稀疏矩阵
假设我有一个数组={A,B,Y,X}。现在我有了一个Excel工作表,它可以有动态的列数和行数。例如: 输入:Excel 使用vbscript创建稀疏矩阵,excel,vbscript,Excel,Vbscript,假设我有一个数组={A,B,Y,X}。现在我有了一个Excel工作表,它可以有动态的列数和行数。例如: 输入: 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.Va
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
输出:
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
其中,所有列只有数组值,如果发现任何其他值,则需要将其替换为“-”
除了相对较慢的循环技术外,使用VBscript是否还有更快的过程
谢谢
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
你写代码了吗?速度慢吗?我希望它会很快。是的,我使用了循环技术。这是我粘贴在这里的一个特殊快照。实际的工作表有3500行和250列,这使它更慢。因此我想知道有什么最快的过程。你能发布你使用的代码吗?@user1878162请在你的问题帖子中发布你当前的代码。这将使我们能够更好地帮助您。@user1878162,出于好奇:您使用VBscript而不是VBA有什么特别的原因吗?VBA与Excel电子表格内容紧密链接,在您想要的级别上与它交互可能更容易谢谢Tim的更新,但我正在寻找一个相同的VBscript代码。我认为您的宏将用“-”替换矩阵中的数组元素。我说得对吗?如果我是对的,那么我想告诉你,我想要你实现的相反的东西。除了数组元素之外,所有元素都需要用“-”替换。请帮助我使用一些VBscript。。我不熟悉VBA。嗨,蒂姆,你能在这里帮助我吗?你好,蒂姆,你能告诉我我应该如何更改你的代码,使其与当前的操作相反,请告诉我