Połącz wszystkie komórki spełniające kryteria (Excel)


1

Mam arkusz kalkulacyjny podobny do następującego:

Kilka fragmentów tekstu jeden na drugim.  Kiedy fragment tekstu zaczyna się od „fob”, jest łączony ze wszystkimi innymi komórkami w innej komórce

Oczekiwanym wynikiem są wszystkie komórki zaczynające się od określonego tekstu połączonego w kolejności ich liczby wyglądu.

Formatowanie jak na obrazie nie jest konieczne, ale jest preferowane. Jednak liczba (1, 2, 3) przed każdą częścią jest dość ważna.

Próbowałem używać SUMIF i CONCAT w odniesieniu do tabel tęczy i procesów wieloetapowych, ale wszystkie one wymykały się spod kontroli, były powolne i zawodne.

Jeśli to możliwe, chciałbym to zrobić bez makr / UDF, ponieważ mój administrator systemu ich nie lubi, ale jeśli nie ma innego sposobu, który jest w porządku.

Każda pomoc jest mile widziana!


1
Jeśli więc pierwsze trzy litery komórki to „fob”, chcesz wziąć pozostałe znaki z tej komórki i połączyć je w wyznaczone miejsce docelowe bez odstępów między nimi? Czy tego chcesz?
— K7AAY

Czy możesz edytować swoje pytanie, aby poinformować nas o swoich dotychczasowych próbach?
— cybernetic.nomad

Tak, w kolejności wyświetlania pokazanej na obrazku. Więc to nie byłby „HelloWorldSuperuser”, to byłoby coś w stylu „1. Witaj 2. World3.Superuser ”.
— Geza Kerecsenyi

@ cybernetic.nomad OK.
— Geza Kerecsenyi

Główną częścią jest selektywne łączenie wszystkiego, co pasuje do określonych warunków. Reszta to po prostu design i styl.
— Geza Kerecsenyi

Odpowiedzi:


2

Proponuję rozwiązanie oparte na odrobinie kodu VBA i funkcji TEXTJOIN programu Excel 2016. Pamiętaj, że będzie to działać w programie Excel 2016 i nowszych, jednak nie będzie działać w niższych wersjach. W takim przypadku musisz utworzyć UDF dla TEXTJOIN. Mam na myśli Twój tag Excel 2016.

W tym przykładzie przykładowe dane znajdują się w komórkach E4: E15.

Naciśnij ALT+, F11aby otworzyć VBA Editor. Wstaw moduł z menu Wstaw i umieść w nim następujący kod.

Function GetString(a1 As String) As String

Dim array1 As Variant
Dim mystring As String

array1 = Split(a1, "|")

For i = LBound(array1) To UBound(array1)

    mystring = mystring & i + 1 & "." & array1(i) & " "

Next i

GetString = mystring

End Function

Zapisz plik Excela jako arkusz programu Excel z włączoną obsługą makr .XLSM.

Teraz na przykład w F4 wstaw następującą formułę i naciśnij CTRL+ SHIFT+, ENTERaby utworzyć i Array Formula. Formuła powinna być zamknięta w nawiasy klamrowe, aby wskazać, że jest to formuła tablicowa.

=GetString(TEXTJOIN("|",TRUE,IF(LEFT(E4:E14,3)="fob",RIGHT(E4:E14,LEN(E4:E14)-LEN("fob")),"")))

Teraz otrzymujesz swój ciąg według życzenia.

Ograniczenie - zwróć uwagę, że tutaj używam znaku potoku „|” jako ogranicznik. Tak więc w rzadkich przypadkach, jeśli sam tekst zawiera potok, wyniki mogą być niezgodne z oczekiwaniami. W takim przypadku użyj jednego z tych znaków, które można uzyskać za pomocą ALT + klawiatury numerycznej, np. ALT + 789, np. §

wprowadź opis zdjęcia tutaj


Jeśli wolisz czystą formułę Excela, sugeruję poniższe rozwiązanie oparte na kolumnie pomocniczej.

W tym przykładzie przykładowe dane znajdują się w komórkach B3: B13. Teraz w C3 umieść następującą formułę i naciśnij CTRL+ SHIFT+, ENTERaby utworzyć formułę tablicową. Teraz przeciągnij go w dół do zamierzonych wierszy.

=IFERROR(INDEX($B$3:$B$13,SMALL(IF(LEFT($B$3:$B$13,3)="fob",ROW($B$3:$B$13)-2,""),ROW(A1))),"") 

Zwróć uwagę na -2 tutaj. Jest to ważne, ponieważ ustawia wartość indeksu na początek od 1 na podstawie względnego wiersza, w którym rozpoczyna się lista.

Ta formuła utworzy zaraźliwą listę wymaganych wierszy z oryginalnej kolumny.

Teraz w D3 wstaw następującą formułę i naciśnij CTRL+ SHIFT+ ENTERz paska formuły, aby utworzyć formułę Array.

=TEXTJOIN(",",TRUE,IF(LEN(C3:C13)=0,"",ROW(C3:C13)-2&"."&RIGHT(C3:C13,LEN(C3:C13)-LEN("fob")))) 

Teraz powinieneś dostać zamierzony ciąg znaków w D3. Zobacz poniższy zrzut ekranu.

wprowadź opis zdjęcia tutaj


Dzięki, spróbuję; nie jestem jednak pewien, czy mój szkolny system zezwala na makra
— Geza Kerecsenyi

Zobacz moją zaktualizowaną odpowiedź. Jeśli nie masz nic przeciwko kolumnie pomocniczej, możesz wybrać to rozwiązanie na wypadek, gdyby makra nie były dozwolone.
— patkim

Kolumny pomocnicze są w porządku; Już ich używam. Dziękuję bardzo!
— Geza Kerecsenyi
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.