• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Artikelbeschijvingen moeten worden ingekort

Status
Niet open voor verdere reacties.

Desmond87

Nieuwe gebruiker
Lid geworden
21 jan 2008
Berichten
3
Goedemorgen allemaal,

Het volgende hieronder is de bedoeling
Voor de nieuwe website zullen de artikelbeschijvingen moeten worden ingekort om deze passend te maken voor op de pagina.
De bedoeling is om de teksten die meer als 100 karakters hebben te splitsen na maximaal 100 tekens. Er moet gesplitst worden na een spatie en niet in een woord. Als deze teksten in verschillende kolommen zijn gesplitst van maximaal 100 karakters zullen er dollartekens ($) worden geplaatst tussen deze kolommen.
De gesplitste teksten in de kolommen worden dan samengevoegd tot 1 tekst in 1 kolom, met dollartekens ($) na 100 karakters en met goede afbrekingen.
Door de dollartekens na 100 karakters pakt html dit op als een 'enter' en plaatst alles na de dollarteken op een volgende regel.


Het volgende hieronder is het probleem
De huidge code die ik gebruik plaatst in kolomA de 1e t./m de 99e karakter van een zin.
Er wordt ook afgebroken bij een spatie en komt nooit boven de 100 karakters.
In kolomB wordt karakters 100/tm199 geplaatst van de zin. Enkel bij zinnen die minder dan 100 karakters hebben wordt in kolomB ook die afbreekregel meegenomen waardoor telkens het laatste woord wordt meegenomen terwijl hier dus moet komen te staan.

Dit gaat om lijsten van zo 3000 artikelomschrijvingen. De code moet in 1x kunnen worden ingevoerd en niet per zin aangepast moeten worden.


alvast bedankt,
 
Goedemorgen allemaal,

Het volgende hieronder is de bedoeling
Voor de nieuwe website zullen de artikelbeschijvingen moeten worden ingekort om deze passend te maken voor op de pagina.
De bedoeling is om de teksten die meer als 100 karakters hebben te splitsen na maximaal 100 tekens. Er moet gesplitst worden na een spatie en niet in een woord. Als deze teksten in verschillende kolommen zijn gesplitst van maximaal 100 karakters zullen er dollartekens ($) worden geplaatst tussen deze kolommen.
De gesplitste teksten in de kolommen worden dan samengevoegd tot 1 tekst in 1 kolom, met dollartekens ($) na 100 karakters en met goede afbrekingen.
Door de dollartekens na 100 karakters pakt html dit op als een 'enter' en plaatst alles na de dollarteken op een volgende regel.


Het volgende hieronder is het probleem
De huidge code die ik gebruik plaatst in kolomA de 1e t./m de 99e karakter van een zin.
Er wordt ook afgebroken bij een spatie en komt nooit boven de 100 karakters.
In kolomB wordt karakters 100/tm199 geplaatst van de zin. Enkel bij zinnen die minder dan 100 karakters hebben wordt in kolomB ook die afbreekregel meegenomen waardoor telkens het laatste woord wordt meegenomen terwijl hier dus moet komen te staan.

Dit gaat om lijsten van zo 3000 artikelomschrijvingen. De code moet in 1x kunnen worden ingevoerd en niet per zin aangepast moeten worden.


alvast bedankt,

Ik ben niet helemaal zeker, en kijk even naar de mods, maar was het niet beter hiervoor een nieuwe thread te starten ipv deze thread onder het stof te halen?

Anyway, mogen we jouw voortuitgang voor het probleem al even bekijken, maw tegen welke (deel)problemen loop je aan? Het is hier namelijk niet echt de bedoeling dat er een probleem in de groep wordt gegooid, dat men dan even op zijn gemakkelijkste bil gaat zitten, en wacht tot anderen de oplossing hebben voor mijn (commercieel?) probleem.
 
Ik ben niet helemaal zeker, en kijk even naar de mods, maar was het niet beter hiervoor een nieuwe thread te starten ipv deze thread onder het stof te halen?

Anyway, mogen we jouw voortuitgang voor het probleem al even bekijken, maw tegen welke (deel)problemen loop je aan? Het is hier namelijk niet echt de bedoeling dat er een probleem in de groep wordt gegooid, dat men dan even op zijn gemakkelijkste bil gaat zitten, en wacht tot anderen de oplossing hebben voor mijn (commercieel?) probleem.

Het gaat hier om de code die in Deze thread wordt gegeven op pag1.
Ik vraag hierbij een oplossing voor een probleem die onstaat bij het gebruik van deze code.
 
Het gaat hier om de code die in Deze thread wordt gegeven op pag1.
Ik vraag hierbij een oplossing voor een probleem die onstaat bij het gebruik van deze code.

ok, dan heb je gelijk (denk ik ;) ). Ik dacht dat het om een soortgelijk probleem ging, dat om een nieuwe oplossing vroeg.

Welke problemen heb je dan juist, want dat haal ik niet helemaal uit je post?
 
ok, dan heb je gelijk (denk ik ;) ). Ik dacht dat het om een soortgelijk probleem ging, dat om een nieuwe oplossing vroeg.

Welke problemen heb je dan juist, want dat haal ik niet helemaal uit je post?

vbexcelvi8.jpg


Bij bovenstaand voorbeeld kun je zien dat er 3 kolommen zijn.
Bij kolomA staat de volledige tekst. Kolom B het 1e karakter t/m 99.
Bij Kolom C 100 t/m 199

Bij de eerste zin (bovenste) gaat Kolom B goed, enkel bij kolom C wordt het laatste woord voor de afbreking meegenomen terwijl dit leeg moet blijven omdat er minder als 100 karakters zijn.
Bij de andere zinnen wordt wel gwn 100t/m 199 meegenomen omdat de zin ook uit meer dan 100 karakters bestaat.

Mijn vraag is dus eigenlijk hoe ik er voor kan zorgen dat bij zinnen die korter zijn dan 100 karakters kolom C gewoon leeg blijft. :thumb:

Alvast bedankt.
 
...Ik weet dus ook niet of mijn reactie nou heel erg de forumregels schaadt...:o

Desmond87, ik kon het toch niet laten (oefening voor mezelf :rolleyes:) om er een aparte functie voor te schrijven.
Code:
Function SplitsOpN(sTekst As String) As String
Dim arrSpatiePos()  As Integer 'de array van de positie van de spaties
Dim i               As Integer 'de teller van de array
Dim x               As Integer 'de positie in de string van de spatie
Dim y               As Integer 'de teller van de do lus
Const conSTAP       As Integer = 100  'stapgrootte door de string; opzoek naar spaties

    If Len(sTekst) = conSTAP Then 'de tekstlengte is kleiner dan 100
        SplitsOpN = sTekst
        Exit Function
    End If
    
    x = conSTAP 'de 1e postitie waar naar een spatie gezocht wordt
    i = 0
    
    For y = x To Len(sTekst)
        If Mid(sTekst, x, 1) <> " " Then
            Do Until Mid(sTekst, x, 1) = " " 'tel net zolang terug tot er een spatie wordt gevonden
                x = x - 1
            Loop
        End If
        
        ReDim Preserve arrSpatiePos(i)
        arrSpatiePos(i) = x
        i = i + 1
        x = x + conSTAP
        y = x
    Next y
        
    For a = LBound(arrSpatiePos) To UBound(arrSpatiePos)
        sTekst = WorksheetFunction.Replace(sTekst, arrSpatiePos(a), 1, "$")
    Next
    
    SplitsOpN = sTekst
    
End Function
Je kan (als je deze code in een VBE module plakt) de functie =SplitsOpN(A1) zo in je worksheet gebruiken (in dit voorbeeld staat je hele string in cel A1). Je krijgt dan in 1 cel dezelfde regel terug, maar dan steeds op ongeveer de 100-ste positie een dollarteken. Hoef je zo'n cel alleen nog maar te copieren en te plakken als tekst...

Groet, Leo
 
Laatst bewerkt:
Ginger, alle lof voor je poging hoor, maar als je dit als UDF wilt gebruiken zou ik hem iets universeler maken, daarmee wil ik zeggen in je functieargumenten 2 zaken toevoegen. Ten eerste op het hoeveelste teken de tekst afsplitsen (nu staat die 100 als constante), en ten tweede kunnen aangeven welk deel je wil zien, dat voor het 100 teken, of na het honderste teken (kan via een boolean).

Eventueel kan je nog een optioneel argument meegeven, spltsen op exact karakter of op laatste spatie.

Het is hier niet mijn bedoeling je code af te breken, ik wil enkel een suggestie doen om ze flexibeler te maken, zonder dat een pak extra codeerwerk gaat opleveren.
 
@Desmond87 Ik heb je vraag een eigen topic gegeven. Graag de volgende keer de regels doornemen. Het is niet toegestaan om in iemand anders zijn/haar vraag jou probleem aan de orde te stellen. Het wordt op die manier erg chaotisch.
 
@Huijb, Excuses dat ik ben gaan reageren op deze topic...:o

@Finch
Het is hier niet mijn bedoeling je code af te breken
....dat wéét ik toch! Ik ben alleen maar blij als anderen de moeite nemen te reageren. :thumb:

maar als je dit als UDF wilt gebruiken zou ik hem iets universeler maken
...nou bij deze dan...:D
Code:
Function SplitsOpN(sTekst As String, iStap As Integer, _
                   Optional sTeken As String = "$", _
                   Optional Voor As Boolean = True, _
                   Optional Precies As Boolean = False) As String
Dim arrSpatiePos()  As Integer 'de array van de positie van de spaties
Dim i               As Integer 'de teller van de array
Dim x               As Integer 'de positie in de string van de spatie
Dim y               As Integer 'de teller van de do lus

    If Len(sTekst) = iStap Then 'de tekstlengte is kleiner dan N
        SplitsOpN = sTekst
        Exit Function
    End If
        
    x = iStap 'de 1e postitie waar naar een spatie gezocht wordt
    i = 0
    
    For y = x To Len(sTekst)
        If Precies = False Then 'afbreken op een spatie of niet
            If Mid(sTekst, x, 1) <> " " Then
                Do Until Mid(sTekst, x, 1) = " " 'tel net zolang terug tot er een spatie wordt gevonden
                    If Voor Then    'geef de spatie vóór het N-de getal
                        x = x - 1
                    Else:            'geef de spatie ná het N-de getal
                        x = x + 1
                    End If
                Loop
            End If
        End If
        
        ReDim Preserve arrSpatiePos(i)
        arrSpatiePos(i) = x
        i = i + 1
        x = x + iStap
        y = x
    Next y
        
    For i = LBound(arrSpatiePos) To UBound(arrSpatiePos)
        sTekst = WorksheetFunction.Replace(sTekst, arrSpatiePos(i), 1, sTeken)
    Next
    
    SplitsOpN = sTekst
    
End Function
De functie heeft er nu 3 optionele en 1 verplichte argument bij gekregen. De syntax wordt:
=SplitsOpN(celverwijzing of tekst; aantal characters per stap (getal); [het scheidingsteken (def = "$"]; [Keuze: de spatie vóór of ná de stap kiezen (boolean: def = True)]; [Keuze: op spatie afbreken of precies op de stap (boolean: def = False)])

Wat denk je er zo van?

Groet, Leo
 
Laatst bewerkt:
Wat denk je er zo van?

Groet, Leo

Ik heb jammergenoeg nu niet de tijd om je functie volledig te ontleden, maar de op het eerste zicht lijkt het me :thumb::thumb:
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan