Bir değer nasıl aranır ve tek bir hücreye birden fazla benzersiz değer döndürülür


0

Birkaç farklı stok konumunda tutulan benzersiz bir tanımlayıcıyı (Ürün Numarası) aramaya çalışıyorum. Örneğin:

   __A__     __B__       __C__         
1   Item #   Warehouse   Description
2  ABCD-0001  WHSE 1      Red Label
3  ABCD-0001  WHSE 3      Red Label
4  QRST-0005  WHSE 2      2" Pipe
5  QRST-0005  WHSE 1      2" Pipe
6  LMNO-0002  WHSE 4      6" Pipe
7  LMNO-0002  WHSE 2      6" Pipe

Ve arama formülümün sonuçlarımı şöyle sıralamasını istiyorum:

    __A__       __B__              __C__ 
1    ITEM      WAREHOUSE          Description
2  ABCD-0001   WHSE 1, WHSE 3      RED LABEL
3  QRST-0005   WHSE 2, WHSE 1      2" Pipe
4  LMNO-0002   WHSE 4, WHSE 2      6" Pipe

Gördüğüm tüm işlevler (INDEX-MATCH, VLOOKUP) sonuçları sadece farklı hücrelerde dikey olarak listeleyebiliyor. Depoları aynı hücrede listelemek ve virgülle ayırmak istiyorum.

Bu web sitesinde başka bir yayında gördüğüm VBA'da bir Kullanıcı Tanımlı İşlev yaratmaya çalıştım. Ancak, # DEĞER hatası almaya devam ettim. Benim inancım, örneğimde gördüğümdeki harflerin sadece sayılar içerdiği harflerden kaynaklanıyor olmasıdır.

Herhangi bir ve tüm önerileriniz memnuniyetle karşılanacaktır.

Başlangıçta kullandığım İşlev Kullanıcı BryanC'sinde bulundu. Bu gibi görünüyordu:

   Public Function mylookup(inputrange As Range, match As Range) As String
   Dim arr() As Variant
   Dim d As Object
   Dim result As String
   Dim i As Integer
   Dim v As Variant
   Set d = CreateObject("Scripting.Dictionary")
   arr() = inputrange.Value

   For i = 1 To UBound(arr)
       If arr(i, 1) = match Then
           d(arr(i, 2)) = 1
       End If
  Next i
  For Each v In d.Keys()
          result = result & v & ","
  Next v
      result = Left(result, Len(result) - 1)

  mylookup = result

  End Function 

Çok iyi bir işlevi VBA'da doğru yazılmış bir fonksiyona sahip olmam ve ardından formülü doğru yapmamam olabilir. Bunun için önerilen kullanıcı = bakış açım (A1: A7, B2)


Buraya gönderirseniz, işlevinizi hata ayıklama konusunda yardımcı olmak daha kolay olacaktır.
Adam

Eşleşen öğe numaraları bitişik olacak şekilde veriler sıralandı mı (ya da olabilir). Maksimum yinelenen öğe numarası sayısı nedir?
fixer1234

Evet. Şu anda sıralanan Eşya Numaralarına sahip oldum, böylece kopyaların hepsi kronolojik hücrelerde olacak. Maksimum çift sayısı 10'dur. Anlamı Bir Öğe Numarası muhtemelen WHSE1-WHSE10'un herhangi biri veya tümü olabilir.
KjN

Yanıtlar:


0

İşte basit, şık olmasa da, yapmanın yolu. Depo listelerini oluşturmak için bir sonraki sütunu kullanın:

görüntü tanımını buraya girin

D2 hücresindeki formül:

=IF(A2=A1,D1&", "&B2,B2)

Bu sütunu gerektiği gibi kopyalayın. Öğe #'nin önceki kayıtla aynı olup olmadığına bakar. Öyleyse, depoyu listeyle birleştirir. Aksi takdirde, yeni bir liste başlatır.

Her öğe numarası için son kaydı tanımlayan bir filtre oluşturmak için bir sonraki sütunu kullanın:

görüntü tanımını buraya girin

E2 hücresindeki formül:

=IF(A2=A3,"",1)

Bunu sütundan kopyala. Bu, geçerli Öğe #'nin bir sonrakine uyup uymadığına bakar. Eğer öyleyse, hücreyi boş bırakır. Eşleşmezse, Öğe # için son kayıt olduğu ve D sütunundaki tüm depo listesine sahip olduğu anlamına gelir, böylece filtre a olur 1.

Şimdi sadece listenin tamamını içeren kayıtları göstermek için E filtrelersiniz. Oradan, kopyalayarak, hücreleri referans alarak veya yerinde görüntüleyerek istediğiniz çıktıyı oluşturmak için bir temeliniz vardır. Yerinde görüntülemek için, D sütununu sola kaydırın ve B sütununu gizleyin. E sütununu da sakladıktan sonraki sonuç:

görüntü tanımını buraya girin


Girişiniz için teşekkür ederiz! Şimdi hem IF işlevinde hem de yukarıdaki VBA işlevinde başarılı bir şekilde yaptım. Sürümünüz daha basit olsa da, artık kodum olduğu için mylookup formülünü kullanmak çok daha hızlı.
KjN

0

Kişisel mylookup iyi, sen olarak kullanmak zorunda =mylookup(A1:B7,B2).

inputrangekapsamalıdır sütun A ve B . Yalnızca A sütunuyla çalışıyorsunuz.


Benim hücre sütununda C hücre sütununda deniyorum ve formül gibi görünüyor: = mylookup ($ A $ 1: $ B $ 1591, B2) ve ben hala # DEĞER hatası alıyorum.
KjN

VBA kodu bir modülde mi? Kullanıcı Tanımlı İşlevler bir çalışma sayfasına eklenemez. ThisWorkbook'a bir modül yerleştirmeli ve kodu modüle yapıştırmalısınız.
jcbermu

Bu konuda yardımcı olduğunuz için teşekkürler !!! Yeteri kadar oynadım ve sonunda çözdüm. Formülün ikinci kısmı olarak B2 yerine, A2 olmalıdır. Öyleyse şuna benziyor: = bakış açım ($ A $ 1: $ 1591, A2 $). Basit değişiklik ama işe yaramasını sağladı.
KjN
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.