相关疑难解决方法(0)

如何避免在Excel VBA中使用Select

我听说过很多关于.Select在Excel VBA 中使用的可理解的憎恶,但我不确定如何避免使用它.我发现如果我能够使用变量而不是Select函数,我的代码将更加可重用.但是,ActiveCell如果不使用,我不确定如何引用事物(如等)Select.

我发现这篇关于范围的文章这个例子关于不使用select的好处却找不到怎么样的东西?

excel vba

511
推荐指数
15
解决办法
26万
查看次数

使用Excel VBA检查数组中是否存在值

我在下面有一些代码,应该检查一个值是否在数组中.

Sub test()
    vars1 = Array("Examples")
    vars2 = Array("Example")
    If IsInArray(Range("A1").Value, vars1) Then
        x = 1
    End If

    If IsInArray(Range("A1").Value, vars2) Then
        x = 1
    End If
End Sub

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
  IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function
Run Code Online (Sandbox Code Playgroud)

如果单元格A1中包含单词Examples出于某种原因两者的IsInArray检测为现有两个数组时,它应该只找到它存在的在vars1

我需要更改什么才能使我的IsInArray功能完全匹配?

arrays excel vba excel-vba

11
推荐指数
6
解决办法
9万
查看次数

循环遍历列,将值存储在数组中

我试图找到一种方法:

  1. 循环遍历一列(B 列)
  2. 取值,将它们存储在一个数组中
  3. 循环遍历该数组并进行一些文本操作

但是,我想不出一种方法来遍历一列并获取这些值,并将它们存储在一个数组中。我已经浏览了 Stack Overflow 和谷歌,但没有找到成功的解决方案。

在此先感谢您的帮助。

Sub collectNums()

Dim eNumStorage() As String ' initial storage array to take values
Dim i as Integer
Dim j as Integer
Dim lrow As Integer

lrow = Cells(Rows.Count, "B").End(xlUp).Row ' The amount of stuff in the column

For i = lrow To 2 Step -1
    If (Not IsEmpty(Cells(i, 2).Value)) Then ' checks to make sure the value isn't empty
    i = eNumStorage ' I know this isn't right
Next i …
Run Code Online (Sandbox Code Playgroud)

excel vba

6
推荐指数
2
解决办法
2万
查看次数

使用范围数组的多个标准的自动过滤器

来自问题Excel宏过滤器基于多个单元格值并使用从VBA中的范围创建数组的答案

我试图使用数组创建一个广泛的自动过滤器.但是,它只使用数组范围内的最新值.

如何使用过滤器中的所有值?

Sub Test()

Dim DirArray As Variant
DirArray = [A2:A5].Value2
ActiveSheet.range("$B$1:$C$10").AutoFilter Field:=2, Operator:=xlFilterValues, Criteria1:=DirArray

End Sub
Run Code Online (Sandbox Code Playgroud)

excel vba excel-vba

1
推荐指数
1
解决办法
2493
查看次数

How to make VBA code run faster when looping through 10,000 cells?

Sub GMC()  
    strike = 100
    cap = 120
    part = 3.25
    KO = 60

    For i = 1 To 1000
        exp(i) = Worksheets("Speeder premium").Cells(i + 1, 32)
        If exp(i) >= cap Then
            cash = strike + (part * (cap - strike))
        ElseIf exp(i) >= strike And exp(i) < cap Then
            cash = strike + (part * (exp(i) - strike))
        ElseIf exp(i) < strike And exp(i) >= KO Then
            cash = strike
        ElseIf exp(i) < strike And exp(i) < KO Then …
Run Code Online (Sandbox Code Playgroud)

excel vba

1
推荐指数
1
解决办法
307
查看次数

标签 统计

excel ×5

vba ×5

excel-vba ×2

arrays ×1