首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Excel的VBA中声明(Dim)与应用程序匹配的总和?

如何在Excel的VBA中声明(Dim)与应用程序匹配的总和?
EN

Stack Overflow用户
提问于 2019-09-23 19:23:48
回答 3查看 91关注 0票数 0

我试图声明三个Application.Match行号的和。如果我将所有这些部分添加到手表中,我会看到每个匹配项的值(例如: 1、1、1),但是当我将它们加起来时,就会在手表值中得到"0“。下面是调试时的相关代码和监视结果。

代码语言:javascript
复制
Dim S13 As Integer
 S13 = Application.Match(K(3), TF13, 0) + Application.Match(K(2), TC13, 0) + Application.Match(K(1), TB13, 0)
Dim SD13 As Integer
 SD13 = S13 / 3

手表:表达式:值:类型

表: Application.Match(K(1),TB13,0):1:变体/双

表: Application.Match(K(2),TC13,0):1:变体/双

表: Application.Match(K(2),TF13,0):1:变体/双

手表:S13:0:整型

手表: SD13 :0:整数

我在S13上尝试了"Long“和其他声明,但是我确实只需要它是"Integer”,因为这个数字应该超过类型字符的限制。

BTW,我尝试在下面声明一个简单的公式,并在手表中得到"0“作为一个值。

代码语言:javascript
复制
Dim X As Integer: X = 3 / 3
Dim Y As Integer: Y = 1 + 1 + 1
Dim Z As Integer: Z = "1" + "1" + "1"

尽管如此,我不太确定Application.Match和这个问题有什么关系。尽管如此,我还是想在我的案子里提出来。

更新:新测试场景

我打开了一个新的工作簿和模块,输入下面的代码,得到了预期的结果:"2“用于TEST1,"1”用于TEST2。看起来我可能有一个不同的问题影响到我的其他工作簿。有人想要帮我开始调查吗?

代码语言:javascript
复制
Sub TEST()
Dim TEST1 As Integer: TEST1 = 1 + 1 ' Works
Dim TEST2 As Integer: TEST2 = 2 / 2 ' Works
MsgBox TEST1 & " : " & TEST2 ' Message is "2 : 1"
End Sub

问题解决:

我弄明白了我的问题,这是无法看到的信息提供(对不起)。我的代码是:

代码语言:javascript
复制
ElseIf...
'Dim don't go here...
    Dim S13 As Integer: S13 = Application.Match(K(3), TF13, 0) _
      + Application.Match(K(2), TC13, 0) _
      + Application.Match(K(1), TB13, 0)
    Dim SD13 As Integer: SD13 = S13 / 3
ElseIf Not IsError(Application.Match(K(3), TF13, 0)) _
  And Not IsError(Application.Match(K(2), TC13, 0)) _
  And Not IsError(Application.Match(K(1), TB13, 0)) Then
    If <<some formula to help me validate match above (e.g.: all true and all same number)>> Then
      Worksheets("MATCHES").Range("$A" & ARR & ":" & "$F" & ARR) _
       = TR13.Range("$A" & SD13 & ":" & "$F" & SD13)
    End If
ElseIf...

该代码将我的声明放在ElseIf/然后之前(进入前一个ElseIf),而不是将它放在需要声明变量的位置之后。下面是更正。

代码语言:javascript
复制
ElseIf...
ElseIf Not IsError(Application.Match(K(3), TF13, 0)) _
  And Not IsError(Application.Match(K(2), TC13, 0)) _
  And Not IsError(Application.Match(K(1), TB13, 0)) Then
'Dim go here...
    Dim S13 As Integer: S13 = Application.Match(K(3), TF13, 0) _
      + Application.Match(K(2), TC13, 0) _
      + Application.Match(K(1), TB13, 0)
    Dim SD13 As Integer: SD13 = S13 / 3
    If <<some formula to help me validate match above (e.g.: all true and all same number)>> Then
      Worksheets("MATCHES").Range("$A" & ARR & ":" & "$F" & ARR) _
       = TR13.Range("$A" & SD13 & ":" & "$F" & SD13)
    End If
ElseIf...
EN

回答 3

Stack Overflow用户

发布于 2019-09-23 19:42:18

代码语言:javascript
复制
Dim S13 As Integer
 S13 = CInt(Application.Match(K(3), TF13, 0)) + CInt(Application.Match(K(2), TC13, 0)) + CInt(Application.Match(K(1), TB13, 0))
 Dim SD13 As Integer
  SD13 = S13 \ 3
票数 1
EN

Stack Overflow用户

发布于 2019-09-24 02:50:41

请试一试:

代码语言:javascript
复制
Dim S1 As Integer
Dim S2 As Integer
Dim S3 As Integer
S1 = Application.Match(K(3), Range("TF13"), 0) 
S2 = Application.Match(K(2), Range("TC13"), 0) 
S3 = Application.Match(K(1), Range("TB13"), 0)
Dim SD13 As Integer
SD13 = (S1 + S2 + S3) / 3

msgbox "S1: " & S1 & ", S2: " & S2 & ", S3: " & S3 & ", SD13: " & SD13

现在S1,S2,S3和SD13的结果是什么?

票数 0
EN

Stack Overflow用户

发布于 2019-09-24 12:41:01

好的,所以我找出了我的问题,这是无法通过提供的信息看到的。抱歉的。

我的代码是这样的:

代码语言:javascript
复制
ElseIf...
'Dim don't go here...
    Dim S13 As Integer: S13 = Application.Match(K(3), TF13, 0) _
      + Application.Match(K(2), TC13, 0) _
      + Application.Match(K(1), TB13, 0)
    Dim SD13 As Integer: SD13 = S13 / 3
ElseIf Not IsError(Application.Match(K(3), TF13, 0)) _
  And Not IsError(Application.Match(K(2), TC13, 0)) _
  And Not IsError(Application.Match(K(1), TB13, 0)) Then
    If <<some formula to help me validate match above (e.g.: all true and all same number)>> Then
      Worksheets("MATCHES").Range("$A" & ARR & ":" & "$F" & ARR) _
       = TR13.Range("$A" & SD13 & ":" & "$F" & SD13)
    End If
ElseIf...

这段代码将我的声明放在ElseIf/ElseIf之前(在前一个中),而不是将它放在明显需要声明变量的位置之后。下面是更正。

代码语言:javascript
复制
ElseIf...
ElseIf Not IsError(Application.Match(K(3), TF13, 0)) _
  And Not IsError(Application.Match(K(2), TC13, 0)) _
  And Not IsError(Application.Match(K(1), TB13, 0)) Then
'Dim go here...
    Dim S13 As Integer: S13 = Application.Match(K(3), TF13, 0) _
      + Application.Match(K(2), TC13, 0) _
      + Application.Match(K(1), TB13, 0)
    Dim SD13 As Integer: SD13 = S13 / 3
    If <<some formula to help me validate match above (e.g.: all true and all same number)>> Then
      Worksheets("MATCHES").Range("$A" & ARR & ":" & "$F" & ARR) _
       = TR13.Range("$A" & SD13 & ":" & "$F" & SD13)
    End If
ElseIf...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58068925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档