Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA Excel - Makro łączące komórki z kolumny z separatorem

PaulinaXP4 28 Mar 2015 16:40 885 8
  • #1 28 Mar 2015 16:40
    PaulinaXP4
    Poziom 2  

    Witam, mam następujące wyzwanie dla ekspertów VBA. Mam kolumnę w której są dane w postaci ciągów znaków - litery oraz cyfry. Chodzi o stworzenie makra które będzie sprawdzało czy dana komórka jest pełna czy pusta. Dla pełnej komórki jej wartość powinna być zapisana następnie powinien być wstawiony separator w postaci [spacja]OR[spacja]. Makro powinno następnie w pierwszej pustej komórce wpisać wszystkie 'zapisane/zapamiętane' wartości wraz z separatorami OR.

    Aktualnie poradziłam sobie formułą która łączy elementy w kolumnie K w ten sposób:
    =K3&" "&"OR"&" "&K4&" "&"OR"&" "&K5&" "&"OR"&" "&K6

    Cała formuła jest znacznie dłuższa - aż do K300, jednak nie będę tu wklejała całości - wiadomo o co chodzi.

    Rezultat jest taki że powstaje nadmiar OR - jeśli komórki są puste to wychodzi na końcu OR OR OR OR - które następnie muszę usunąć - jest to dosyć problematyczne i dużo wygodniej byłoby gdyby makro sprawdzało czy jest potrzeba dalej łączyć czy nie.

    Bardzo proszę o pomoc - już nie wiem co mam robić :(

    0 8
  • #2 28 Mar 2015 16:53
    JRV
    Specjalista - VBA, Excel

    Witaj

    PaulinaXP4 napisał:
    czy jest potrzeba dalej łączyć czy nie

    a w środku może być puste komórki?

    Dodano po 2 [minuty]:

    PaulinaXP4 napisał:
    =K3&" "&"OR"&" "&K4&" "&"OR"&" "&K5&" "&"OR"&" "&K6

    Lepiej więc
    =K3&" OR "&K4&" OR "&K5&" OR "&K6

    0
  • #3 28 Mar 2015 16:59
    -psiak-
    Poziom 32  

    Code:
    =PODSTAW(USUŃ.ZBĘDNE.ODSTĘPY(K1&" "&K2&" "&K3&" "&K4&" "&K5&" "&K6);" ";" OR ")

    0
  • #4 28 Mar 2015 17:25
    adamas_nt
    Moderator Programowanie

    I chciałoby się Wam pisać takiego (300szt.) tasiemca?

    Po mojemu, wygodniej utworzyć funkcję dla zakresu (załącznik).

    1
  • #5 28 Mar 2015 18:04
    -psiak-
    Poziom 32  

    @adamas_nt, czy porównywałeś szybkość działania?
    Jak mi się nie chce pisać tasiemca to robię jedno z dwóch:
    • Piszę makro - które napiszę mi tego tasiemca.
    • Zapiszę w K1001: =K1000&" "&K1, rozciągam na 300 wierszy, w K1301: =PODSTAW(USUŃ.ZBĘDNE.ODSTĘPY(K1300);" ";" OR ")

    0
  • #6 28 Mar 2015 18:18
    PaulinaXP4
    Poziom 2  

    adamas_nt napisał:
    I chciałoby się Wam pisać takiego (300szt.) tasiemca?

    Po mojemu, wygodniej utworzyć funkcję dla zakresu (załącznik).


    Doskonałe rozwiązanie - ale nie wiem jak zrobić taką funkcję :( jak ją wprowadzić do excela?

    0
  • #7 28 Mar 2015 18:41
    adamas_nt
    Moderator Programowanie

    Jest w module :)
    Alt+F11, skopiuj zawartość Module1, wstaw moduł w swoim pliku (Insert>Module) i wklej. Funkcję używasz jak wbudowaną. "=" itd...

    1
  • #8 28 Mar 2015 19:44
    PaulinaXP4
    Poziom 2  

    Super :) wielkie dzięki! Moje pytanie - czy mógłbyś mi wytłumaczyć jak działa ta funkcja? chodzi mi o kolejne linie.

    Function Oraj(zakres As Range) 'wprowadzenie nowej funkcji nazwanej Oraj oraz zdefiniowanie zmiennej 'zakres' jako Range (czyli przedział wartości? więcej niż jedna wartość?)
    Dim kom As Range ' wprowadzenie kom jako Range

    For Each kom In zakres 'dla każdego kom w zmiennej zakres
    If kom <> Empty Then 'jeśli kom nie jest puste to
    Oraj = Oraj & Trim(kom.Value) & " OR " 'funkcja oraj przyjmuje wartość oraj (czyli przed kolejną komórką) i Trim (co robi trim?) połączone z wyrażeniem " OR "
    End If 'koniec funkcji If
    Next
    Oraj = Left(Oraj, Len(Oraj) - 4) 'tego totalnie nie rozumiem

    End Function 'koniec funkcji

    Jeśli ktoś może (a najlepiej autor :) ) odpowiedzieć mi na pytanie:
    1. Co robi Trim?
    2. Jaką funkcję pełni linijka Oraj = Left(Oraj, Len(Oraj) - 4)

    Chciałabym się nauczyć VBA jednak to jeszcze nie mój poziom ale może rozjaśni mi to obraz i pomoże w przyszłości poradzić sobie samodzielnie :)

    0
  • #9 28 Mar 2015 19:52
    -psiak-
    Poziom 32  

    Rozumiem że na google masz bana?
    ad 1. usuwa zbędne spacje
    ad 2. usuwa " OR " po ostatniej wartości.

    0