Excel listesi araması, "|" ile ayrılan birden çok değeri döndürerek


1

TAMAM...

Bu nedenle, A sütununda "CC973" gibi bir ürün adı olan bir ürün listesine sahibim.

A
CC969
CC972
CC973
CC975
CC976
CC977
CC978
CC996
CC997
CC998
CC999
DS009
DS022
DS046
DS088
DS096

Ayrıca, "Resim adları '! $ A $ 2: $ A $ 617"' nin A sütununda buna benzer ürün resimlerinin bir listesi de var (tüm veriler bu sütundadır):

A
CC967 CC968 CC969 (Packaging).jpg
CC967 CC968 CC969.jpg
CC972 CC973 (Packaging).jpg
CC972 CC973 (Rear).jpg
CC972 CC973.jpg
CC975 CC976.jpg
CC977 CC978 CC979 (Packaging).jpg
CC977 CC978 CC979.jpg
CC980 CC981 CC982 (Packaging).jpg
CC980 CC981 CC982 (Rear).jpg
CC980 CC981 CC982 (Side).jpg

Yapmak istediğim ilk listedeki ürünü kontrol etmek ve bu ürün adını içeren tüm görüntüleri "|" ile ayırarak geri göndermek.

Dosya adının fazladan metin içermemesi, yani sadece "CC972 CC973.jpg" nin ilk önce geri gönderilmesini istiyorum.
Yani bu örnekte aşağıdakilerin geri gönderilmesini istiyorum:

CC972 CC973.jpg|CC972 CC973 (Packaging).jpg|CC972 CC973 (Rear).jpg

Bunun mümkün olması gerektiğine eminim, bunu yapmanın bir yolunu bilen var mı?

DÜZENLE Bunu denedim:

=Lookup_concat(A2,'Image names'!$A$1:$A$617, 'Image names'!$A$1:$A$617)

Ama #name döndürür?

Bu işi yapmak için VBA'yı aşağıdaki kodla kullanmak zorunda kalacağımı düşünüyorum:

Function Lookup_concat(Search_string As String, _
Search_in_col As Range, Return_val_col As Range)
Dim i As Long
Dim result As String
For i = 1 To Search_in_col.Count
If Search_in_col.Cells(i, 1) = Search_string Then
result = result & " " & Return_val_col.Cells(i, 1).Value
End If
Next
Lookup_concat = Trim(result)
End Function

Ancak 2008 Excel'in bir VBA editörü olduğunu sanmıyorum!

Elektronik tabloları 2003’ten beri doğru şekilde yapmadım !!!!


VBA mı yoksa formül mü istiyorsun?
Raystafarian

2
Süper Kullanana Hoşgeldiniz. Maalesef, kod yazma hizmeti değiliz. Sadece belirli bir görevi yerine getirmek için kod istemek yerine, lütfen şu ana kadar ne denediğinizi (şu anda sahip olduğunuz herhangi bir kod dahil) ve nerede kaldığınızı gösterin, böylece size sorununuzda yardımcı olabiliriz. Yalnızca kod isteyen sorular çok geniş ve büyük olasılıkla beklet veya kapat .
DavidPostill

@Raystafarian Bir formül arıyorum
Peter Kirkwood

@DavidPostill, muhtemelen ilk defa burada olduğunu gördüm. Neler denediğime dair bir düzenleme yaptım (ama işe yaramadım! Tavsiye için teşekkürler!
Peter Kirkwood

@PeterKirkwood, Bu şimdi iyi bir yazı. +1 ve sizin için bir kod yazacağım. Ancak, sonucun nerede olmasını istediğiniz gibi bir şeyler daha fazla bilmek istiyorum. Çalışma sayfası 2 sütun B?
Dave

Yanıtlar:


1

Yorumlarınızda, artık VBa çalıştırabilen bir Excel sürümüne erişiminiz olduğunu belirtti.

Bu VBa ve istediğini düşündüğüm şeyi yapıyor. Ekran görüntülerini ekledim.

Kodda bazı yorumlar bıraktım, güncellemeniz gerekebilecek ilk bölüm, ancak yorumlar size yardımcı olacaktır.

Unutmayın, önce geri alma özelliği olmadığı için dosyanızı yedekleyin!

Yorumlarınıza göre, gerçek çalışma sayfası adlarını kullanıyorum!

Option Explicit
Sub WalkThePlank()

'hear ye, only edit this top past of walk the plank
'Remember scurvy sea dog, there is no UNDO so take a copy of the file first as a back up

Dim worksheet1 As String
worksheet1 = "Image names"        'The name of the work sheet which has only codes

Dim worksheet1Column As String
worksheet1Column = "A"       'Argghh, the name of the column you use in worksheet1

Dim worksheet2 As String
worksheet2 = "LMFD products"        'The name of the worksheet with things like CC972 CC973 (Rear).jpg

Dim worksheet2Column As String
worksheet2Column = "A"       'Argghh, the name of the column you use in worksheet2

Dim resultsWorksheet As String
resultsWorksheet = "LMFD products"    'C'pan, this is where you put the results

Dim resultsWorksheetColumn As String
resultsWorksheetColumn = "C"       'Argghh, the name of the column you use in worksheet2



'hear ye, walk below and I'll feed ye to the sharks

Application.ScreenUpdating = False
Dim row As Integer
row = 2                        'The starting row with values to be looked up

Do While (Worksheets(worksheet1).Range(worksheet1Column & row).Value <> "")
    Dim result As String
    result = ""
    Dim lookupValue As String
    lookupValue = Worksheets(worksheet1).Range(worksheet1Column & row).Value

    Dim otherRow As Integer
    otherRow = 2                   'The starting row of the .jpg colum

    Dim startString As String
    Dim endString As String
    startString = ""
        endString = ""
    Do While (Worksheets(worksheet2).Range(worksheet2Column & otherRow).Value <> "")

        Dim repoValue As String
        repoValue = Worksheets(worksheet2).Range(worksheet2Column & otherRow).Value

        If (InStr(repoValue, lookupValue)) Then
        'we got treasure cap'ain
            If (InStr(repoValue, "(")) Then
                endString = Trim(endString) & Trim(repoValue) & "|"
            Else
                startString = Trim(startString) & Trim(repoValue) & "|"
            End If
        End If

        otherRow = otherRow + 1
    Loop

'check on the treasure, will we fine riches
    If (startString <> "" And endString <> "") Then
        result = Trim(startString & Left(endString, Len(endString) - 1))
        Else
        If (startString = "" And endString <> "") Then
            result = Trim(Left(endString, Len(endString) - 1))
        End If
        If (endString = "" And startString <> "") Then
            result = Trim(Left(startString, Len(startString) - 1))
        End If
    End If

    Worksheets(resultsWorksheet).Range(resultsWorksheetColumn & row).Value = result ' X Marks the spot
    row = row + 1
Loop

End Sub

Çalışma Sayfam1 (VBa çalıştırılmadan önce)

enter image description here

Ve Çalışma Sayfam 2

enter image description here

Ve sonuç

enter image description here

VBA'yı MS Office'e nasıl eklerim?


Yorumlar uzun tartışmalar için değildir; bu konuşma oldu sohbete taşındı .
Mokubai
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.