Bir makro / vba formülünü birden fazla hücreye uygulama


2

Aşağıdakileri girdim:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$V$2" Then
    Range("U2") = Range("V2") * Range("O2")
End If

If Target.Address = "$U$2" Then
    Range("V2") = Range("U2") / Range("O2")
End If

End Sub

..... Ancak, bu yalnızca u2 ve v2 hücrelerinde çalışır. Sütun U ve Sütun V'i tamamen çalıştırmak için bu formüle ihtiyacım var.

Herhangi bir yardım takdir edilmektedir.


Ne yapmaya çalışıyorsun? Şu anda size tek bir hücre belirtiyormuşsunuz gibi görünüyor ve tek bir hücreye mi uygulanıyor? Sorunuzu, makronuzun başarmaya çalıştığı şeyle güncelleyebilir misiniz?
Jonno

Yapmaya çalıştığım şey bu: O sütunu maaş bilgisi içeriyor, U sütunu bir yöneticinin maaşını artırmak istediği dolar miktarı olacaktır. Sütun V, maaşın arttırılabileceği yüzde oranıdır. Bazı yöneticiler bir dolar tutarı girmeyi tercih eder ve% otomatik güncelleme. Diğer yöneticiler yüzde girmek ve U sütunundaki dolar tutarının otomatik olarak doldurulmasını ister. Girdiğim formül bunu başardı, fakat sadece 2. satır için. Bu yardımcı olur mu?
Nina

Ve bunun ne zaman olmasını istiyorsun? Bunu Worksheet_Changeetkinliğe uyguladığınız anda , bir hücreyi her değiştirdiğinizde ateşlemesini mi istediniz?
Jonno

Evet, birisinin her iki sütuna da bir değer girdiğinde gerçekleşmesini istiyorum
Nina

Aşağıdaki cevapların bir kısmı, umarım size yardımcı olacaktır :)
Jonno

Yanıtlar:


2

Doğru anlarsam, böyle bir şey kullanabilirsin.

Private Sub Worksheet_Change(ByVal Target As Range)

    'Don't apply to column headers
    If Target.Row = 1 Then Exit Sub

    'Make changes to anything in Column V (22)
    If Target.Column = 22 Then
        If IsNumeric(Range("V" & Target.Row)) And IsNumeric(Range("O" & Target.Row)) Then
            Range("U" & Target.Row) = Range("V" & Target.Row) * Range("O" & Target.Row)
        End If
    End If

    'Make changes to anything in Column U (21)
    If Target.Column = 21 Then
        If IsNumeric(Range("U" & Target.Row)) And IsNumeric(Range("O" & Target.Row)) And Range("O" & Target.Row) <> 0 Then
            Range("V" & Target.Row) = Range("U" & Target.Row) / Range("O" & Target.Row)
        End If
    End If

End Sub

Bu olay, her hücre değiştiğinde patlar. Bu durumda, değişikliğin hangi sütununda olduğunu kontrol eder - If Target.Column = 22 Then... Sütun 22 ise (sütunun sayısal gösterimi V), kodun geri kalanına ilerler, ki bu, U, V ve O ile değiştirilir Target.Row. değiştirilen hücrenin satır numarasıdır.

Düzenleme: Girilen tüm öğelerin harf / sembol değil aslında sayı olduğundan emin olmak için Bölmeye Sıfırla denetimi ve kontrol eklendi.


Güzel hata kontrolü!
Gary'nin Öğrenci

1

Düşünmek:

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Row = 1 Then Exit Sub
   If Intersect(Target, Range("U:V")) Is Nothing Then Exit Sub
   Application.EnableEvents = False
      If Not Intersect(Target, Range("V:V")) Is Nothing Then
         Target.Offset(0, -1).Value = Target.Value / Range("O" & Target.Row).Value
      Else
         Target.Offset(0, 1).Value = Target.Value / Range("O" & Target.Row).Value
      End If
   Application.EnableEvents = True
End Sub

Not: Bu ilk satırı içermez.


Test etmedim, ancak ayarın Application.EnableEvents = Falsebiraz tehlikeli olabileceğinden bahsederim , hata ayıklayıcı, doğru durumuna getirilmeden önce bir hata atarsa, olayları yeniden etkinleştirmek için başka bir makroyu manuel olarak çalıştırmanız gerekir.
Jonno

@Jonno Etkinliği
Gary'nin Öğrenci

Garip bir şekilde kodum kendini yeniden tetikliyor gibi görünmüyor. Neden olduğundan emin değil, dediğin gibi yapmalı. Madeni benim için işe yaradığı gibi bırakacağım, ama eğer kullanıyorsanız , en sonunda On Error GoTo ErrHandlerbir ErrHandler: Application.EnableEvents = Truehak gibi bir şeyler eklemeyi düşünün . Aksi halde, kodunuzu şu anda test edin ve bu alanlardan birine bir harf girin, bir etkinliği tekrar tetiklemekten vazgeçeceğine eminim.
Jonno

Daha da yukarıya bakınca, bu sonuç devletler: Occurs when cells on the worksheet are changed --by the user-- or by an external link.. Şüpheliyim, VBA çağrıları sonsuz döngüleri önlemek için olayı bir daha tetiklemiyor.
Jonno
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.