Belirli bir değeri farklı bir hücreye yapıştıracak bir Excel formülü nasıl yazarsınız?


7

Temel olarak bir koşulu kontrol edecek bir formül yazmak istiyorum ve bu koşul karşılanırsa, belirli bir metin satırını farklı bir hücreye yapıştırmak istiyorum. Bir değer yapıştırmak istediğim formülün formülde bulunmasını istemediğime dikkat etmeliyim. Örneğin, eğer bir değeri B5'e yapıştırmak istersem, formülün B5 hücresinde olmasını istemiyorum ...


1
Formül yerine makro istemek gibi görünüyor
Brad Patton

^ Bana bunu yapacak bir makro örneği verebilir misiniz? Daha önce hiç makro yazmamıştım ... teşekkürler!
Robert Jefferies

Yığın Taşmasına Hoş Geldiniz! İstediğiniz şeyin türünü değiştirmeniz gerektiğinde, yeni bir soru oluşturmak yerine mevcut sorunuzu düzenleyerek yapmanız çok tercih edilir .
Aaron Miller

1
Lütfen düzenlemek gibi daha fazla ayrıntı vererek sorunuzu; hangi koşul kontrol ediliyor, veriler nasıl düzenleniyor, bunu nasıl tetiklemeyi düşünüyorsunuz, vb. Daha önemlisi, bugüne kadar ne denediniz?
CharlieRB

+ 1 @ Brad adlı kullanıcının yorumu; Bir hücrede bulunan bir formülün başka bir hücrede değişiklik yapmasının imkansız olduğuna inanıyorum.
Scott

Yanıtlar:


6

Aşağıdaki yaklaşım, VBA'da tanımlanan bir çalışma sayfası işlevinin başka bir hücrenin değerini ayarlamak için burada ve burada açıklanan geçici çözümü kullanır .

Özel işlev, genel değişkenlerde hedef hücrenin adresini ve bu hücrenin ayarlanacağı değeri depolar. Ardından, çalışma sayfası yeniden hesaplandığında tetiklenen bir makro genel değişkenleri okur ve hedef hücreyi belirtilen değere ayarlar.

Özel fonksiyonun kullanımı basittir:

  =SetCellValue(target_cell, value)

burada target_cell, çalışma bir hücre (örneğin, "A1") ya da bu tür bir referans olarak değerlendirilen bir ifade için bir dize başvurusudur. Bu, =B14B14 değerinin "A1" olduğu gibi bir ifadeyi içerir . İşlev herhangi bir geçerli ifadede kullanılabilir.

SetCellValueDeğer başarıyla hedef hücreye yazılırsa 1, aksi takdirde 0 döndürür. Hedef hücrenin önceki içeriğinin üzerine yazılır.

Üç kod parçası gereklidir:

  • SetCellValuekendini tanımlayan kod
  • çalışma sayfası hesaplama olayı tarafından tetiklenen makro; ve
  • Bunun geçerli bir hücre adresi IsCellAddressolduğundan emin olmak için bir yardımcı işlev target_cell.

SetCellValue İşlevi için Kod

Bu kodun çalışma kitabına yerleştirilmiş standart bir modüle yapıştırılması gerekir. Modül seçilerek erişilen Visual Basic editörü, için menü aracılığıyla eklenebilir Visual Basicgelen Developerkurdele sekmesine.

  Option Explicit

  Public triggerIt As Boolean
  Public theTarget As String
  Public theValue As Variant

  Function SetCellValue(aCellAddress As String, aValue As Variant) As Long

      If (IsCellAddress(aCellAddress)) And _
             (Replace(Application.Caller.Address, "$", "") <> _
              Replace(UCase(aCellAddress), "$", "")) Then
          triggerIt = True
          theTarget = aCellAddress
          theValue = aValue
          SetCellValue = 1
      Else
          triggerIt = False
          SetCellValue = 0
      End If

  End Function


Worksheet_Calculate Macro Code

Bu kod, kullanacağınız çalışma sayfasına özel koda dahil edilmelidir SetCellValue. Bunu yapmanın en kolay yolu, Homegörünümdeki çalışma sayfasının sekmesini sağ tıklatmak , seçmek View Codeve ardından kodu gelen düzenleyici bölmesine yapıştırmaktır.

  Private Sub Worksheet_Calculate()

      If Not triggerIt Then
          Exit Sub
      End If
      triggerIt = False
      On Error GoTo CleanUp
      Application.EnableEvents = False
      Range(theTarget).Value = theValue
  CleanUp:
      Application.EnableEvents = True
      Application.Calculate

  End Sub


IsCellAddress İşlevi için Kod

Bu kod, kodla aynı modüle yapıştırılabilir SetCellValue.

  Function IsCellAddress(aValue As Variant) As Boolean

      IsCellAddress = False

      Dim rng As Range           ' Input is valid cell reference if it can be
      On Error GoTo GetOut       ' assigned to range variable
      Set rng = Range(aValue)
      On Error GoTo 0

      Dim colonPos As Long            'convert single cell "range" address to
      colonPos = InStr(aValue, ":")   'single cell reference ("A1:A1" -> "A1")
      If (colonPos <> 0) Then
          If (Left(aValue, colonPos - 1) = _
                Right(aValue, Len(aValue) - colonPos)) Then
              aValue = Left(aValue, colonPos - 1)
          End If
      End If

      If (rng.Rows.Count = 1) And _
          (rng.Columns.Count = 1) And _
          (InStr(aValue, "!") = 0) And _
          (InStr(aValue, ":") = 0) Then
          IsCellAddress = True
      End If                          'must be single cell address in this worksheet
      Exit Function

  GetOut:

  End Function

"Worksheet_Calculate" içinde daha Application.Calculateönce olmaz mıydı Application.EnableEvents = True? Aksi halde fonksiyonum 94 kez hesaplanır.
Nicolau

1

B5 hücresi "yeşil" değerini içeriyorsa, "Metin A" metninin C5 hücresinde gösterilmesini istediğinizi varsayalım.

Sen edebilir bir formül yaklaşım kullanır, ancak formüller diğer hücrelerdeki değerleri değiştiremezsiniz çünkü formül hücre C5 girilecektir gerekecektir.

=IF(ISNUMBER(FIND("green",B5)),"Text A","")

C5 hücresi şimdi yalnızca B5 "yeşil" kelimesini içeriyorsa "Metin A" gösterecektir.

Bunun gibi bir formül, birçok koşulla çalışmak için oluşturulabilir. Özel durumunuzla ilgili yardım almak için gereksinimlerinizi tanımlamanız gerekir.

C5'in bir formülü olmasını istemiyorsanız, VBA yaklaşımını da kullanabilirsiniz. B5 hücresi değiştirildiğinde, değeri el ile düzenleyerek veya içine bir şey yapıştırarak çalışacak olan bir Çalışma Sayfası Değişikliği olayı çalıştırabilirsiniz.

Böyle bir makro için bir örnek olabilir

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B5")) Is Nothing Then
    If InStr(1, Target, "green", vbTextCompare) Then
        Target.Offset(0, 1) = "Text A"
    End If
End If
End Sub

Çıktının koşulları ve yerleştirilmesi elbette sadece bir örnektir ve gereksinimlerinize göre ayarlanması gerekir.

Formül ve makro yaklaşım arasındaki fark

  • formül yaklaşımı ile C5 hücresi bir formül içerecektir. Kullanıcı formülü yanlışlıkla silerse, sunduğu işlevsellik de silinir. (Yine de bunu yönetmenin yolları var)
  • VBA makrosuyla C5 hücresi hiçbir formül göstermez ve sözlü metni değer olarak alır, ancak kurulumun değiştirilmesi için Excel VBA bilgisi gerekir. Ayrıca, bir VBA yaklaşımı ile çalışma kitabı makro etkin çalışma kitabı olarak kaydedilmeli ve kullanıcı makrolara izin vermeli veya dosyayı güvenilir bir dosya haline getirmelidir.

Not: Yukarıdaki sadece bir örnek. İhtiyaçlarınızı, sayıları mı yoksa metni mi değerlendirmek, değerlendirmenin büyük / küçük harfe duyarlı olup olmadığını, değerlendirme kurallarının ne olduğunu, sonucun nereye yerleştirileceğini vb. Tanımlamanız gerekir.

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.