0
votes

Comment puis-je déclarer (Dim) la somme des correspondances d'application dans VBA pour Excel?

J'essaie de déclarer la somme de trois Application.Match em> numéros de ligne. Si j'ajoute toutes ces pièces à montres em> je vois valeurs em> pour chacun de mes matchs (par exemple: 1, 1, 1), mais quand je les ajoutes, je reçois "0 "Dans la montre la valeur em>. Vous trouverez ci-dessous le code associé et regardez les résultats lors de la débogage.

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


7 commentaires

Essayez d'utiliser `\` au lieu de `/`, comme vous le renvoyez à un entier. Essayez également CINT () autour de l'appilication.Match des relevés, car il s'agit de VBA Excel, pas vb.net docs.microsoft.com/en-us/dotnet/visual-basic/language-refere nce / ...


@Cryostastas J'aimerais pouvoir dire que cela est utile, mais je ne suis pas clair sur la façon dont / où appliquer vos suggestions.


Je ne peux pas reproduire votre problème. Utilisation de votre code, SD13 Affiche 1 dans les deux locaux et montre Windows.


@Ronrosenfeld c'est étrange. Je ne peux même pas obtenir les simples exemples à travailler. Hmm.


FYI, j'ai ajouté un scénario de test "UPDATE" donnant des résultats appropriés.


@CryOSTasSys L'opérateur de division entier fonctionne également dans VBA ... et cint est redondant, car si vous attribuez à un entier , l'expression sera convertie en silence en < Code> Integer , parce que Ceci est VBA et non VB.NET (.NET est beaucoup plus strict avec les conversions implicites, en particulier avec l'option strict sur).


J'apprécie les réponses. J'ai compris mon problème et affiché comme ma réponse.


3 Réponses :


1
votes
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

8 commentaires

Cela n'a pas fonctionné. J'ai reçu les mêmes résultats ... Merci d'avoir essayé.


En fait, je viens de copier et collé le code dans un contrôle rapide sur un classeur ouvert que j'ai, et cela fonctionnait. Cela peut être un problème alors avec vos variables; K (3), TF13, K (2), TC13 et K (1), TB13.


@Danielt sont K (1), K (2), K (3), TF13, TC13 et TB13 variables dans votre macro? Si vous essayez de regarder dans la cellule TF13, vous devrez utiliser une plage («TF13»), plutôt que de simplement la mettre en tant que TF13 - qui est traitée comme une variable (une référence ou une référence de matrice, pour être spécifique).


J'ai beaucoup de variables et de code autour de cela, mais je ne peux toujours pas dépasser pourquoi une valeur de la déclaration de la variable de test simple est "0" (E.G.: "Test DIM:" Test = 1 + 1 ")


FYI, j'ai ajouté un scénario de test "UPDATE" donnant des résultats appropriés.


Je ne peux pas te le dire là-bas. Je peux vous montrer que cela fonctionne, mais sinon quelque chose ne va pas avec votre système. Link


Merci pour votre temps @Cryostastas


Encore une fois, je veux juste que vous sachiez que j'apprécie que vous répondiez. En outre, j'ai compris mon problème et posté comme ma réponse.



0
votes

Veuillez essayer avec ceci:

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


1 commentaires

Merci, ça a l'air bien, mais j'ai compris mon problème et posté comme ma réponse. J'apprécie votre réponse.



0
votes

OK, alors j'ai compris mon problème, qui n'a pas pu être vu par les informations fournies. Désolé.

mon code était comme ceci: p> xxx pré>

Ce code a placé mes déclarations avant mon elporif / alors em> (dans le précédent Elseif em>) au lieu de le placer après la alors em> où les variables devaient apparemment être déclarées. Ci-dessous la correction. P>

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 commentaires