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. P>
J'ai besoin d'aide pour convertir si formule au code VBA dans Excel ci-dessous: = Si (J2 <> J1, AD2-X2, AE1-X2). P>
3 Réponses :
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). 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
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.
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
r.offset (0, 19) .value = ............................................ (Convertissez cette formule en code Excel VBA = si (J2 <> J1, AD2-X2, AE1-X2)
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
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 B> 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)