Avatar billede sije-1976 Nybegynder
24. december 2010 - 16:32 Der er 1 kommentar og
1 løsning

Concatenate/sammenkæd indtil karaktergrænse

Hejsa
Jeg har et mega-problem, som jeg håber, at der er nogen, som kan løse. Jeg har nogle tekster fra forskellige systemer, som skal overføres til fra et system til et andre systemer. Desværre har de forskellige opsætninger.  Derfor skal teksterne skilles af og samles igen i forskellige felter med dertilhørende karaktergrænser. Til at løse opgaven har jeg Excel.
Eksempel:
System 1: Karaktergrænse: 3x30
Der kan godt være tekster, som kun har en tekst1.
Tekst1: Trøje blå XXXL     Tekst2: Leveres med ekstra foer bomuld    Tekst3: Ekstra informationer   
System 2: Karaktergrænse: 250
Varetekst: Trøje blå XXXL Leveres med ekstra foer bomuld Ekstra informationer
System 3: Karaktergrænse: 16 + 250
Simple item text: Trøje blå XXXL  Long item text: Trøje blå XXXL Leveres med ekstra foer bomuld Ekstra informationer.

Der er flere systemer med flere opsætninger.
Jeg har forsøgt at løse problemet med formler, hvilket er muligt hvis der er få celler, men jeg løb ret hurtigt ind i karaktergrænsen for formler. Hvis jeg håndterer problemet med LEN/LÆNGDE, får jeg problemer med orddeling, og det vil give problemer i nogle af de andre systemer.
Er det muligt at håndtere problemet via vba? Jeg har forestilt mig at bruge en tekst-til-kolonner funktion, hvor makroen tæller fra venstre til højre og sammenkæder/concatenate're indtil karaktergrænsen. Resultatet overføres til bestemt celle.
Det skal sige, at det kan ske at en celle er tom, men det kan der måske køres uden om ved at sige, at funktionen maksimalt kører 5000 poster af gangen.

Hjælp??
Avatar billede finb Ekspert
26. december 2010 - 14:23 #1
Data fra system 1:
Her kan køres en RTRIM på hver af de 3 "pakker"

System 2:
Er der i alle linier naturlige adskillere, som fx. "leveres som" eller "ekstra informationer" ?

System 3:
Kør en RTRIM på simple item text.

Long item:
Er der i alle linier naturlige adskillere, som fx. "leveres som" eller "ekstra informationer" ?

Mvh finb
Avatar billede sije-1976 Nybegynder
22. februar 2011 - 16:55 #2
Problemet blev løst ved hjælp af en meget lang nested-formel.
Jeg oprettede først denne funktion, som hedder Mulicat.
Public Function MultiCat( _
        ByRef rRng As Excel.Range, _
        Optional ByVal sDelim As String = "") _
            As String
    Dim rCell As Range
    For Each rCell In rRng
        MultiCat = MultiCat & sDelim & rCell.Text
    Next rCell
    MultiCat = Mid(MultiCat, Len(sDelim) + 1)
  End Function

Derefter brugte jeg funktionen i nedenstående formel til at håndtere orddelingen.

=HVIS(LÆNGDE(MultiCat(A1:P1;" "))<=30;MultiCat(A1:P1;" ");HVIS(LÆNGDE(MultiCat(A1:O1;" "))<=30;MultiCat(A1:O1;" ");HVIS(LÆNGDE(MultiCat(A1:N1;" "))<=30;MultiCat(A1:N1;" ");HVIS(LÆNGDE(MultiCat(A1:M1;" "))<=30;MultiCat(A1:M1;" ");HVIS(LÆNGDE(MultiCat(A1:L1;" "))<=30;MultiCat(A1:L1;" ");HVIS(LÆNGDE(MultiCat(A1:K1;" "))<=30;MultiCat(A1:K1;" ");HVIS(LÆNGDE(MultiCat(A1:M1;" "))<=30;MultiCat(A1:M1;" ");HVIS(LÆNGDE(MultiCat(A1:J1;" "))<=30;MultiCat(A1:J1;" ");HVIS(LÆNGDE(MultiCat(A1:H1;" "))<=30;MultiCat(A1:H1;" ");HVIS(LÆNGDE(MultiCat(A1:G1;" "))<=30;MultiCat(A1:G1;" ");HVIS(LÆNGDE(MultiCat(A1:F1;" "))<=30;MultiCat(A1:F1;" ");HVIS(LÆNGDE(MultiCat(A1:E1;" "))<=30;MultiCat(A1:E1;" ");HVIS(LÆNGDE(MultiCat(A1:D1;" "))<=30;MultiCat(A1:D1;" ");HVIS(LÆNGDE(MultiCat(A1:C1;" "))<=30;MultiCat(A1:C1;" ");HVIS(LÆNGDE(MultiCat(A1:B1;" "))<=30;MultiCat(A1:B1;" ");A1)))))))))))))))
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester