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.

EXCEL VBR ciecie zawartosci komorki

izmar 10 Lis 2009 16:48 2529 6
  • #1 10 Lis 2009 16:48
    izmar
    Poziom 10  

    Witam

    Zwracam sie z taka prosba.

    To sa kolejne zawartosci komorek w arkuszu:

    PAA10.MCD07.1 -A01
    PAA10.MCD08.1 -A01
    PAA10.RBT16.1 -A01
    PAA10.RBT21.1 -A01
    PAA20.RBT14.1 -A01
    PAA20.RBT19.1 -A01
    PAA30.MCD07.1 -A01
    PAA30.MCD08.1 -A01
    PAA30.RBT15 -A01
    PAA30.RBT20 -A01
    PAA40.RBT13.1 -A01
    PAA40.RBT18.1 -A01

    Potrzebuje kazda kolejna z nich zapisac w taki sposob:

    =PAA10 +MCD07.1 -A01

    Czyli zawartosc komorki musi zostac podzielona na 3 czesci i wpisana do komorek po prawej stronie. Nie wiem jak wczytac zawartosc komorki, podzielic ja na czesci i wkleic do nastepnych komorek.

    Dziekuje za pomoc

    0 6
  • #2 10 Lis 2009 18:21
    adamas_nt
    Moderator Programowanie

    Jeśli ta pierwsza kropka i kreska przed "A" występują zawsze to nie ma problemu.
    Sprawę rozwiązuje wykorzystanie funkcji:
    ZNAJDŹ
    LEWY
    FRAGMENT.TEKSTU

    0
  • #3 10 Lis 2009 19:55
    izmar
    Poziom 10  

    Kropka i kreska występują zawsze, mogę prosić o przykład? I jak wczytać wartość komórki np do tabeli? Próbowałem z Range ale mi nie wyszło za bardzo.

    Dziękuję

    0
  • #4 10 Lis 2009 20:28
    adamas_nt
    Moderator Programowanie

    Ale to naprawdę nic skomplikowanego, dodawanie i odejmowanie.
    Żeby "wyłuskać" środek, musisz mieć dwie skrajne. No to od lewej:
    Tekst (Np PAA10.MCD07.1 -A01) bez spacji na końcu(!) w A1.
    W B1 formuła:
    LEWY(tekst;ilość znaków) tekst wiadomo, pod ilość znaków podstawiasz ZNAJDŹ(".") i od pozycji odejmujesz 1 (bo bez kropki).

    Code:
    =LEWY(A1;ZNAJDŹ(".";A1)-1)

    W D1 formuła:
    FRAGMENT.TEKSTU(tekst; l.początkowa; ilość znaków) tekst wiadomo, liczba początkowa to ZNAJDŹ("-"), ilość znaków to długość ciągu(DŁ) minus pozycja kreski.
    Code:
    =FRAGMENT.TEKSTU(A1;ZNAJDŹ("-";A1);DŁ(A1)-ZNAJDŹ("-";A1)+1)

    Jeśli końcówka to zawsze cztery znaki to można: =PRAWY(A1;4)

    Wreszcie środek. W C1 formuła:
    FRAGMENT.TEKSTU tekst wiadomo, liczba początkowa to pozycja kropki + 1 ilość znaków to długość całego ciągu minus długość ciągu w B1, minus długość ciągu w D1 i minus 2 (kropka i spacja przed kreską). Na początku znak "+"
    Code:
    ="+"&FRAGMENT.TEKSTU(A1;ZNAJDŹ(".";A1)+1;DŁ(A1)-DŁ(D1)-DŁ(B1)-2)

    Jeśli nic nie pomyliłem...
    Edit: pomyliłem, poprawiłem.

    0
  • #5 10 Lis 2009 21:05
    izmar
    Poziom 10  

    Dziękuję za pomoc. Trochę to nie jasne dla mnie, jestem laikiem w tym temacie, korzystam z VBR dosyć rzadko. Odnośnie tych poleceń czy to są formuły do wklejenia w komórki?

    Chcę napisać procedurę która będzie automatycznie dzieliła te człony, dodawała znak = oraz + i wklejała je w kolejno kolumny A B C, ponieważ tych linii mam tysiące do edycji, a ręczna edycja to paranoja :)

    Widzę to mniej więcej tak:
    - procedura pobiera wartość z komórki Ax,
    - dzieli wartość na trzy części,
    - w odpowiednie człony dokleja = i +,
    - wkleja w komórki Ax, Bx, Cx
    - oraz zależnie od rodzaju ostatniego członu np -A01; -T01; -M01, w komórce Dx wpisuje nazwę przypisaną do tego oznaczenia.
    - następnie i + 1 i następny wiersz

    Ogólnie wiem jak napisać procedurę tylko mam problem z edycją zawartości komórek z poziomu VB, czyli wczytanie zawartości, edycja i wklejenie. Z rozpoznaniem opisu powinienem dać rade.

    Ponieważ pracuję za granicą w angielskim XP mogę prosić o angielskie komendy?


    Może podsunie mi Pan jakiś szkielet, zarys procedury?

    (tak, zdaję sobie sprawę jakim jestem laikiem :)

    0
  • #6 10 Lis 2009 21:30
    adamas_nt
    Moderator Programowanie

    W angielskim (nie mam jak sprawdzić) brzmieniu byłoby w kolejności:

    Code:
    ="="&LEFT(A1,FIND(".",A1)-1)
    Code:
    =MID(A1,FIND("-",A1),LEN(A1)-FIND("-",A1)+1)
    lub
    Code:
    =RIGHT(A1,4)
    Code:
    ="+"&MID(A1,FIND(".",A1)+1,LEN(A1)-LEN(D1)-LEN(B1)-1)
    tu poprawka

    formuły kopiujesz/przeciągasz w dół i nie trzeba używać VBA. No chyba, że koniecznie chcesz to byłoby tak jakoś
    Code:
    Sub SplitText()
    
    With ActiveSheet
        For i = 1 To .UsedRange.Rows.Count
            txt = Split(.Cells(i, 1), ".")
            Cells(i, 2) = "'=" & txt(0)
            a = Len(txt(0)) + 2
            txt = Split(.Cells(i, 1), " ")
            Cells(i, 4) = txt(1)
            b = Len(txt(1))
            c = Len(Cells(i, 1))
            Cells(i, 3) = "'+" & Mid(Cells(i, 1), a, c - a - b)
        Next
    End With
    End Sub

    0
  • #7 10 Lis 2009 22:24
    izmar
    Poziom 10  

    Dziękuję za odpowiedź.

    Rano w pracy zmierzę się z zadaniem.

    Na VBR zależy mi ponieważ chcę całkowicie zautomatyzować tą czynność, termin goni a jeszcze sporo pracy zostało, uff...

    Będę pytał w razie problemów i informował o postępach.

    Pozdrawiam

    0