Как объявить (Dim) сумму совпадений приложений в VBA для Excel? - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь объявить сумму трех Application.Match номеров строк.Если я добавлю все эти части в Часы , я увижу Значения для каждого из моих матчей (например, 1, 1, 1), но когда я добавлю их, я получу "0" вЧасы Значение .Ниже приведен соответствующий код и результаты поиска при отладке.

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: Целое число

Я пробовал "Long" и другие объявления на S13, но мне действительно нужно, чтобы оно было "Integer", потому что это число должно превышать ограничение символов типа.

BTW , я попытался описать простую формулу, подобную приведенной ниже, и до сих порполучить "0" как значение в часах .

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.Похоже, у меня может быть другая проблема, влияющая на мою другую книгу.У кого-нибудь есть мысли о том, чтобы помочь мне начать мое расследование?

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

РЕШЕННАЯ ПРОБЛЕМА:
Я выяснил свою проблему, которую не мог увидетьпредоставленная информация (извините).Мой код был такой:

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 / Then (в предыдущий ElseIf ) вместо размещения его после Тогда где переменные должны были быть объявлены.Ниже приведена коррекция.

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...

Ответы [ 3 ]

1 голос
/ 23 сентября 2019
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
0 голосов
/ 24 сентября 2019

Хорошо, поэтому я выяснил свою проблему, которая не была видна по предоставленной информации.Извините.

Мой код был таким:

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 / Then (в предыдущий ElseIf ) вместо того, чтобы помещать его после Затем , где переменные, очевидно, должны были быть объявлены.Ниже приведена коррекция.

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 голосов
/ 24 сентября 2019

Пожалуйста, попробуйте с этим:

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 сейчас?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...