Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

Excel 2003 formule om te splitsen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb in excel 2003 een query gemaakt naar mijn MSSQL database toe. In die query staan de volgende velden:

art code | art omschrijving

Mijn art omschrijving is als volgt opgebouwd : <v> <art omschrijving> - <verpakking>

<v> is alleen ingevuld als het een voorraad artikel is.

Mijn bedoeling is dat ik nu een formule maak waarin ik heel die kolom kan splitsen en dus alleen de <art omschrijving> eruit haal.

Als ik data -> tekst naar kolommen gebruik krijg ik wel het gewenste resultaat alleen als ik dan de query bijwerk en er zijn bijv nieuwe regels dan schuift hij alles fout op, dus ik ben echt op zoek naar een formule.

Ook heb ik geprobeerd de functies links, rechts te gebruiken alleen kan ik nergens de scheidingstekens aangeven.

Zie ik hier iets over het hoofd?

Verwijderd

Ja, want je kan toch in links of rechts gewoon een formule zetten die de positie van het scheidingsteken bepaalt?

Verwijderd

Topicstarter
Verwijderd schreef op zaterdag 20 september 2008 @ 12:36:
Ja, want je kan toch in links of rechts gewoon een formule zetten die de positie van het scheidingsteken bepaalt?
De positie van het scheidingsteken is bij elk artikel anders

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Open deur: zorg dat het fatsoenlijk in de DB wordt gezet.

Als het moet: je kunt waarschijnlijk (afhankelijk van de data) wat maken met de combinatie van DEEL() en VIND.SPEC(), waar die tweede is om het scheidingsteken (herhaaldelijk..) te vinden.

Edit: of inderdaad vind.alles()

[ Voor 14% gewijzigd door F_J_K op 20-09-2008 12:50 ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • chicky
  • Registratie: Augustus 2001
  • Laatst online: 01-06 15:35
Hoi,

Je kan met het commando vind.alles eerst bepalen waar je scheidingsteken staat en daar vandaan met links of rechts je string opknippe.

Verwijderd

Verwijderd schreef op zaterdag 20 september 2008 @ 12:41:
De positie van het scheidingsteken is bij elk artikel anders
Ja, maar die positie kan je toch elke x bepalen met functies als match()?

Verwijderd

Topicstarter
De gegevens staan goed in de database. Ik gebruik het namelijk in een boekhoudpakket en dit was de beste oplossing. I

k ben nu aan de slag met vind.alles om de scheidingstekens te bepalen, alleen moet bij <v> mijn resultaat de waarde zijn waar de artikelomschrijving begint. Als ik namelijk een paar kolommen rechts de functie DEEL gebruik dan zet ik bij eerste waarde de waarde die bij <v> uitkomt.

Ook moet ik op een manier kunnen vermelden dat als hij het scheidingsteken van <v> niet vind, de waarde op 1 moet anders pakt hij de tekst niet goed.

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 00:37

Reptile209

- gers -

Verwijderd schreef op zaterdag 20 september 2008 @ 13:05:
De gegevens staan goed in de database. Ik gebruik het namelijk in een boekhoudpakket en dit was de beste oplossing. I
Je DB en je boekhoudpakket zijn twee verschillende dingen. Op dit moment heb je in je DB blijkbaar informatie samengevoegd, die nu beter apart had kunnen staan. Dat is niet persé verkeerd, maar wel onhandig. Je zou de info ook kunnen splitsen in je DB en dan weer samenvoegen voor communicatie met je boekhoudpakket. Wat ooit de beste oplossing was hoeft dat nu niet meer te zijn... ;)
k ben nu aan de slag met vind.alles om de scheidingstekens te bepalen, alleen moet bij <v> mijn resultaat de waarde zijn waar de artikelomschrijving begint. Als ik namelijk een paar kolommen rechts de functie DEEL gebruik dan zet ik bij eerste waarde de waarde die bij <v> uitkomt.

Ook moet ik op een manier kunnen vermelden dat als hij het scheidingsteken van <v> niet vind, de waarde op 1 moet anders pakt hij de tekst niet goed.
Post eens wat voorbeelden van de dingen die je probeert te splitsen met het resultaat dat je wil bereiken èn de formule(s) die (nog) niet doen wat je wil. Er zijn hier maar weinig mensen die willen gaan raden wat er allemaal gebeurt zonder fatsoenlijk voorbeeld... :)

[ Voor 3% gewijzigd door Reptile209 op 20-09-2008 13:43 ]

Zo scherp als een voetbal!


Verwijderd

Gewoon i.d.d. 1 concreet voorbeeld posten,dan heb je binnen 5 minuten de oplossing :)

Verwijderd

Topicstarter
Ik noem even een voorbeeld:

vrd Tefal pannenset - 2st - Tefal
Bekers - 6st - Coca Cola
vrd Lepels - 6st - Jamie Oliver

vrd ervoor betekend dat het artikel een voorraad artikel is.
Hoe ik het nu wil splitsen is:


A | B | C
Tefal Pannenset | 2st | Tefal
Bekers | 6st | Coca Cola
Lepels | 6st | Jamie Oliver


ABC zijn dus de kolommen

vrd hoeft dus nergens meer in komen te staan .

[ Voor 4% gewijzigd door Verwijderd op 20-09-2008 14:16 ]


Verwijderd

Van A naar B en van B naar C is het streepje een duidelijke identifier.

Begint A altijd met een hoofdletter? Als de eerste letter dan een kleine v is dan weet je dat er vrd voor staat en kan je dit wegfilteren...

Verwijderd

Topicstarter
Ik denk dat dit de scheidingstekens zijn :

"vrd "
" - "

hier moet ik dus op splitsen.

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Inderdaad, in de DB staat het niet goed omdat er veel te veel in 1 veld is gedonderd. Maar daaar heb je blijkbaar maar mee te leven.

Makkelijker dan ook vrd gebruiken als splitser: hulpkolom waar de eerste 4 karakters wegvallen als die "vrd " zijn. En dan is het simpelweg in drieen splitsen op basis van "-" (en er dan natuurlijk rekening mee houden dat er een spatie links en rechts van staat).

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Verwijderd

Ik heb even door de Nederlandstalige help zitten spitten. Wat je kan doen is:

Ten eerste kan je "vrd " wegkrijgen door substitueren(), dus van "vrd " naar "".

Dan kan je met vind.spec() bepalen waar voor het eerst een "-" voorkomt. Dit wordt (helaas) een hulpkolom want je hebt het 2x nodig: 1x om A te bepalen en 1x om de oorspronkelijke string af te kappen. Dat bepalen van A doe je met deel() (van positie 1 tot de positie van het streepje dat je bepaald hebt met vind.spec()).

Dan bepaal je de rest weer met deel maar dan na het streepkje en dan bovenstaande exercitie (eigenlijk niet het goede woord want bovenstaande is geen militaire operatie) opnieuw om B te bepalen.

Dus:

- col1: oorspr. string
- col2: string excl. "vrd "
- col3: positie van meest linkse streepje
- col4: A
- col5: reststring (na 1e streepje)
- col6: positie van volgende streepje
- col7: B
- col8: C

Verwijderd

Topicstarter
Verwijderd schreef op zondag 21 september 2008 @ 13:03:
Ik heb even door de Nederlandstalige help zitten spitten. Wat je kan doen is:

Ten eerste kan je "vrd " wegkrijgen door substitueren(), dus van "vrd " naar "".

Dan kan je met vind.spec() bepalen waar voor het eerst een "-" voorkomt. Dit wordt (helaas) een hulpkolom want je hebt het 2x nodig: 1x om A te bepalen en 1x om de oorspronkelijke string af te kappen. Dat bepalen van A doe je met deel() (van positie 1 tot de positie van het streepje dat je bepaald hebt met vind.spec()).

Dan bepaal je de rest weer met deel maar dan na het streepkje en dan bovenstaande exercitie (eigenlijk niet het goede woord want bovenstaande is geen militaire operatie) opnieuw om B te bepalen.

Dus:

- col1: oorspr. string
- col2: string excl. "vrd "
- col3: positie van meest linkse streepje
- col4: A
- col5: reststring (na 1e streepje)
- col6: positie van volgende streepje
- col7: B
- col8: C
Hey, ik ben er mee bezig geweest en het blijkt zo te werken. Ik kom alleen het volgende probleem tegen : als er geen - in de artikelomschrijving staat laat hij het nu leeg, ik wil aan kunnen geven dat als er geen streepje staat dat hij wel heel de tekstregel moet laten weergeven in de artikelomschrijving (dus deel a).

Is dit mogelijk?

Verwijderd

Ik begrijp niet helemaal wat je bedoelt. De items worden toch altijd gescheiden door " - "? Als er geen duidelijke scheiding is gaat het natuurlijk niet werken.

Of bedoel je dat er ook een streepje binnen A kan staan?

Als er soms ook gescheiden wordt door " " (2 spaties) i.p.v. " - " dan kan je dat natuurlijk oplossen met of().

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

PacinoQS, het is wel de bedoeling dat je zelf mee blijft denken. Het lijkt er nu op alsof je achterover leunt, een vervolgprobleem roept en wacht op antwoord.

Hoe zou je het bijvoorbeeld met de hand doen? En probeer dat dan eens om te zetten naar wat regels met ALS() etc.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • Witte
  • Registratie: Februari 2000
  • Laatst online: 15-10 13:46
Je kan toch heel eenvoudig een VBA-functietje aanroepen in de resultaat cellen:

code:
1
2
3
4
5
6
Function mysplit(mystring As String, delimeter As String, deel As Byte) As String
Dim mymatrix
  If Left(mystring, 4) = "vrd " Then mystring = Right(mystring, Len(mystring) - 4)
  mymatrix = Split(mystring, delimeter)
  mysplit = Trim(mymatrix(deel - 1))
End Function


en dan kan je in een cel (bijv B2), opgeven:
=mysplit(A2;"-";1)
voor het eerste deel, etc.

* In regel 3 wordt "vrd " aan het begin eraf geknipt
* In regel 4 wordt mystring opgeknipt in stukken met delimeter als scheidingsteken en in mymatrix geplaatst
* in regel 5 wordt het gewenste element uit mymatrix gehaald en getrimd zodat overtollige spaties wegvallen

[ Voor 35% gewijzigd door Witte op 23-09-2008 09:28 ]

Houdoe

Pagina: 1