0
votes

Si la valeur de la cellule identique à la valeur supérieure de la cellule

J'ai essayé de faire de la macro pour mon travail quotidien, mais je ne peux pas utiliser si forme de formule dû à tant d'élément de mon fichier Excel, la solution consiste donc à convertir la formule en code VBA.

J'ai besoin d'aide pour convertir si formule au code VBA dans Excel ci-dessous: = Si (J2 <> J1, AD2-X2, AE1-X2).


5 commentaires

Pouvez-vous fournir plus d'informations? Est-ce que cela se produit sur plusieurs cellules? Quelle est l'intention? Veuillez lire ce qui suit: Comment demander


Désolé pour mon manque d'informations sur cette affaire.


Est-ce que je comprends cela correctement? La formule ralentit votre feuille de calcul déjà lente et vous souhaitez pouvoir appuyer sur un bouton pour remplir une colonne avec des données conformément à la formule. Il y a un inconvénient que cette colonne ne mettra à jour que lorsque vous appuyez sur le bouton. BTW, quelle colonne est-ce?


Je vois que vous avez encore posé la même question. Il n'y a pas besoin de cela. Vous pouvez modifier cette question à tout moment. Il y a un bouton EDIT juste en dessous de votre message. Cliquez dessus et apportez des modifications.


J'ai utilisé la macro utilisée avec formule Excel = si (J2 <> J1, AD2-X2, AE1-X2). Mais c'est un calcul très lent, je pense que c'est parce qu'il gère une formule. J'essaie donc de simplifier la formule au code VBA. Ma colonne est AE2 = si (J2 <> J1, AD2-X2, AE1-X2)


3 Réponses :


1
votes

Voici une réponse à votre question. Cependant, il est limité de travailler uniquement avec des informations op. En outre, si les calculs prennent trop longtemps, vous devriez essayer de définir votre calcul sur manuel (formules-> options de calcul-> manuel). xxx pré>

et voici votre code converti en une colonne d'utilisation J: P>

Private Sub CommandButton12_Click()
    Dim x As Long
    Dim LastRow As Long
    Dim i as long 

    With Sheets("Shipping Schedule")
        LastRow = .Cells(.Rows.Count, "J").End(xlUp).Row

        For i = 2 to LastRow

            set r = .Range("J" & I)
        'For Each r In .Range("J2:J" & LastRow)
            If LCase(Trim(r.Value)) <> LCase(Trim(r.Offset(-1, 0).Value)) Then
                'ae2 =                      "AD2"             -   "x2"
                r.Offset(0, 21).Value = r.Offset(0, 20).Value - r.Offset(0, 14).Value
            Else
                'ae2 =                      "AE1"         -        "x2"
                r.Offset(0, 21).Value = r.Offset(-1, 21).Value - r.Offset(0, 14).Value
            End If

            set r = nothing 

        Next i
    End With
End Sub


4 commentaires

Quoi de neuf? Les commentaires ne sont pas à la discussion. Vous devriez commencer une discussion pour cela.


Salut puis-je avoir une discussion avec vous par email concernant ma question?


Bonjour, cela fonctionne presque mais j'ai essayé d'utiliser la fonction d'autre et échouer. Que diriez-vous d'autre pour la fonction "AE1-x2"? Cela a presque fini


OK, je l'ai mis à jour pour travailler avec AE1 et X1 ainsi que AD2 et X2.



0
votes
Private Sub CommandButton12_Click()

    Dim x As Long

    Dim LastRow As Long 

    Sheets("Shipping Schedule").Select


    With Sheets("Shipping Schedule")

        LastRow = .Cells(.Rows.Count, "N").End(xlUp).Row

        For Each r In .Range("N2:N" & LastRow)

            If r.Value <> "" Then

                r.Offset(0, 19).Value = ………………………………….              

            End if      

        Next r      

    End With

End Sub


1 commentaires

r.offset (0, 19) .value = ............................................ (Convertissez cette formule en code Excel VBA = si (J2 <> J1, AD2-X2, AE1-X2)



0
votes

Formule Excel à VBA: Remplir la colonne
Sub FillColumn()

    Const cCol As Variant = "J"    ' Last-Row-Column Letter/Number
    Const cCol1 As Variant = "AD"
    Const cCol2 As Variant = "X"
    Const cCol3 As Variant = "AE"
    Const cFirstR As Long = 1      ' First Row

    Dim rng As Range    ' Last Used Cell in Last-Row-Column
    Dim i As Long       ' Row Counter

    Set rng = Columns(cCol).Find("*", , xlFormulas, , xlByColumns, xlPrevious)
    If rng Is Nothing Then Exit Sub

    For i = cFirstR To rng.Row - 1
        If Cells(i + 1, cCol) <> Cells(i, cCol) Then
            Cells(i + 1, cCol3) = Cells(i + 1, cCol1) - Cells(i + 1, cCol2)
          Else
            Cells(i + 1, cCol3) = Cells(i, cCol3) - Cells(i + 1, cCol2)
        End If
    Next

End Sub


0 commentaires