• 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.

doorgaan op volgende bestek regel

  • Onderwerp starter Onderwerp starter Imod
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Imod

Gebruiker
Lid geworden
13 nov 2003
Berichten
481
Ik heb in excel een rekenblad gemaakt dat ik kan inlezen in een begrotings prog.
Daarin zit een bestek (tekst) aanvast.
Dit bestek kan per regel (cel) 70 caracters bevatten.
Ik heb wel eens dat er per regel meer tekst op gaat door "tekstsamenvoegen"
en het zou handig zijn dat dan automatisch de volgende regel gebruikt zou worden.(niet in dezelfde regel dubbel dat kan niet worden ingelezen)
Wij kan mij helpen??
 
Als ik je vraag goed begrijp dan zou je volgende kunnen doen:

- selecteer de benodigde cellen
- Format
- Cells
- kies tabblad "Alignment"
- "Wrap text" aanvinken

Wanner je text nu het einde van een cel bereikt dan gaat hij binnen dezelfde cel netjes verder op een volgende lijn.

Groetjes - Marrosi
 
nee, iets anders

De tekst moet niet in dezelfde cel verder maar op de daar onder liggende cel.
Maar ik weet niet of dit wel kan,

mvg Imod
 
Imod,

In dit geval moet je bestaande tekst netjes in stukken van minder dan 70 karakters gehakt worden waarbij elk volgend stuk dan in een cel lager komt te staan.

De tekst eenvoudig in stukken van 70 karakters delen lijkt mij niet zo moeilijk maar je zal er ook moeten voor zorgen dat je geen woorden doormidden hakt. Je zal dus moeten gaan bepalen waar er rond de +/- 70e plaats in je tekst een spatie zit.

Naar mijn mening moet dat te doen zijn met een macro maar ik ben zelf nog maar een stuntelend amateurtje in VBA.

Andere HelpMij-ers zullen je wel zo'n macro kunnen maken.

Groetjes - Marrosi
 
Hoi Imod,

=deel(A5;1;70)&teken(10)&deel(A5;71;70)&teken(10)&deel(a5;141;70)

Met Teken(10) kun je een tekst laten teruglopen in een cel. Dit doet hetzelfde als Alt+Enter.

Jeroen
 
Hallo allemaal;

Wat je met teken(10) doet werkt bij mij niet ik krijg een blokje te zien maar dezelfde regel gaat door(excel 2000)

Maar dit is niet wat ik bedoel.
Het database prog. kan geen terugloop in dezelfde cel inlezen.
Dus ik moet de zin op +/- 70 karakters beeindigen met een heel woord aan het eind en dan moet de rest van de regel in de volgende cel daaronder weer verder gaan.(Geen nieuwe cellen invoegen maar bestaande)
Ik denkt dat het VBA wordt
 
Weet iemand hier wat op?

Ik ben er nog niet uit!
 
Hoi Imod,

Ik heb:
- héél wat geprobeerd
- héél wat gevloekt
- héél wat bijgeleerd
en vele uren (+ een halve fles whisky) later ben ik tot het volgende probeerseltje gekomen.

Sub Splitsen1()
Range("B1") = Range("A1")
Line = 1
If Len(Range("B1")) < 70 Then
Cells(2, 1) = Range("B1")
Exit Sub
End If
Do Until Len(Range("B1")) < 70
part = Left(Range("B1"), 70)
plaats = 70
karakter = 1
Do Until karakter = " "
karakter = Mid$(part, plaats, 1)
plaats = plaats - 1
Loop
Line = Line + 1
Cells(Line, 1) = Left(Range("B1"), plaats)

Range("B1") = Mid(Range("B1"), plaats + 2)
Loop
Line = Line + 1
Cells(Line, 1) = Range("B1")
Range("B1").Clear
End Sub

Typ op een blanco worksheet eens een zin in cel A1 en run daarna bovenstaande macro.

Het werkt (althans het geeft mij de indruk te werken).
Ik ben eran overtuigd dat andere help-mij-ers heel wat verbeteringen aan deze macro kunnen aanbrengen of zelfs een totaal andere en veel elegantere oplossing kunnen vinden.

Groetjes en prettig weekend.

Marrosi
 
Met de volgende macro wordt de tekst vanaf de eerste spatie na positie 60 gesplist en op de volgende regel gezet. Dit herhaalt zich totdat de lengte van de tekst korter is dan 70 karakters.

Plaats een lange tekst in B1 en start de macro.

Sub TekstVerdelen()
'
' TekstVerdelen Macro
' De macro is opgenomen op 28-11-2003 door Jan van Asseldonk.
'

Dim txtdeel1, txtdeel2
Dim spatiepos
'
Range("b1").Select
While Len(ActiveCell) > 70
spatiepos = InStr(60, ActiveCell, " ", 1)
txtdeel1 = Left(ActiveCell.FormulaR1C1, spatiepos)
txtdeel2 = Mid(ActiveCell.FormulaR1C1, spatiepos, Len(ActiveCell) - Len(txtdeel1))
ActiveCell.FormulaR1C1 = txtdeel1
ActiveCell.Offset(1, 0).Select
ActiveCell.FormulaR1C1 = txtdeel2
Wend
ActiveCell.Offset(1, 0).Select

End Sub
 
dit werk wel

Hallo Jan;
Dit werk wel maar ik zou hem graag nog meer verfijnt willen zien.
De macro werkt nu op 1 cel maar dit zou ik graag op de gehele kolom (bij mijn staat de tekst in kolom N)willen zien.
Als er in de kolom N een te lange zin in staat dan moet de macro op deze zin(nen) werken.
Kan je hem ook zo maken dat je bij de laatste spatie
voor de 70 je dan op een nieuwe regel begint?
(Nu kunnen er nog kleine woorden achter als die er zijn)
En nu begin je met een spatie op de volgende regel en dit moet gelijk met een woord zijn.
Als dit lukt ben ik geholpen, bedankt alvast.
mvg
 
Hoi Imod,

De volgende macro onderzoekt het bereik B9:B99 en zet de afgebroken zinnen in kolom L9:L...

Sub Afbr()
j = 9: jmax = 99
For i = j To jmax
Zin = Cells(i, 2)
Zin2 = Zin
Do While Zin2 <> ""
If Len(Zin2) > 70 Then
Zin1 = Mid(Zin2, 1, 70)
Zin2 = Mid(Zin2, 71, Len(Zin))
For k = 70 To 1 Step -1
Kar = Mid(Zin1, k, 1)
If Kar <> " " Then Zin2 = Kar & Zin2 Else l = k: k = 0
Next k
Zin1 = Mid(Zin1, 1, l - 1)
Else
Zin1 = Zin2: Zin2 = ""
End If
Cells(j, 12) = Zin1: j = j + 1
Loop
Next i
End Sub

Jeroen
 
graag uitleg hierover

Hallo Jeroen
Ik krijg een foutmelding tw
"ongeldige procedure-aanroep of ongeldig argument"

Nou kan het wezen dat ik iets fout heb gedaan
Ik kan de formule ook niet volgen ik heb ook niet veel verstand van Visual Basic (hoe werkt deze)
en ik heb moeite in welk venster het moet worden neergezet?

Kan je hem ook maken zodat hij werkt op de gehele kolom N (controleert of er te lange zinnen in staan en deze dan kort op +/- 70 kar. (laatste spatie) en de rest van de zin in kolom O komt te staan in dezelfde regel??)

Mijn excel bestand (kolom) is bijna 4000 regels lang (is een bouwkundig bestek) en kan nog veel groter worden.

Nog een vraag: hoe leer je snel Visual Basic
(mijn engels is geen sterk punt van mij en ik heb nooit geen les gehad in excel)
Nou geen tip van boek lezen of een cursus, maar misschien heb je andere tips of aanreikingen daarvoor.
Een boek heb ik maar dit is taaie kost.

mvg
 
Hoi Imod,

Heb je de macro gemaakt in Extra -> Macro -> Macro's
Vervolgens afbr intypen en de knop maken.
De programmacode vervolgens uit dit voorbeeld kopieren.

Dat zou goed moeten gaan.


Sub Afbr()
j1 = 9: jmax = 9999
For i = j1 To jmax
Zin = Cells(i, 14)
Zin2 = Zin
J2=0
Do While Zin2 <> ""
If Len(Zin2) > 70 Then
Zin1 = Mid(Zin2, 1, 70)
Zin2 = Mid(Zin2, 71, Len(Zin))
For k = 70 To 1 Step -1
Kar = Mid(Zin1, k, 1)
If Kar <> " " Then Zin2 = Kar & Zin2 Else l = k: k = 0
Next k
Zin1 = Mid(Zin1, 1, l - 1)
Else
Zin1 = Zin2: Zin2 = ""
End If
Cells(i, 15+j2) = Zin1: j2 = j2+ 1
Loop
Next i
End Sub

Wat doet de macro?
Allereerst leest ie een zin in en bepaald of de lengte van de zin meer is dan 70 karakters. Als dat zo is, dan wordt de zin in tweeen gehakt (functie mid vergelijkbaar bet deel() in Excel), het eerste gedeelte (zin1) bestaat uit 70 karakters, het tweede deel is de rest (zin2). Maar dan zijn we er nog niet. In het eerste deel gaan we van achter naar voren (For k=70 to 1 step-1) doorzoek totdat we een spatie tegen komen. Als het ingelezen karakter geen spatie is voegen we hem toe aan Zin2 (If Kar <> " " Then Zin2 = Kar & Zin2).

Zin1 zetten we in het spreadsheet (Cells(i, 15+j2) = Zin1 en Zin1 wordt Zin2 en we gaan Zin1 (was Zin2) weer opnieuw ontleden.

Hoe leer je snel VBA. Een boek of cursus zal ik nooit aanraden. Snel VBA leren is het zelfde als snel frans of duits spreken. Dat kan alleen maar door het te doen

Vooral wat gekke dingen na proberen te bouwen die op dit en andere fora voorbij komen. Begin heel simpel.
For i=1 to 20
Cells(10+i,5)=Cells(10+i,1)
Next i
Dit macrootje kopieert het bereik A11:A30 naar E11:E30

Maak een formule in Excel, maar voordat je dat doet zet je de macro-recorder aan. Nadat je de formule ingevoerd is stop je de recoreder en bekijk je wat de programmacode is. Vervolgens speel je met de code door er vat wijzigingen in aan te brengen en kijk je wat daarvan het resultaat is.

En NOOIT de Microsoft helpdesk bellen (=tijdverlies)

Jeroen
 
Hallo Jeroen

Ik kom weer een heel stuk verder maar ben er nog niet helemaal.
Het afkorten van de zin gaat goed maar de zin in N wordt nu gecopieerd naar O en de rest komt in P te staan.
Ik zou graag zien dat de kolom N wordt ingekort en de rest van de zin in O komt te staan (of indien mogelijk in de vrije cel daaronder wat nog mooier is)

Hoe werkt een formule op een bepaalde cel, regel of kolom?
Dit kan ik niet terug vinden in de formule.
Er moet toch een bepaald startpunt gegeven worden?
De kolom N en O zie ik niet in de formule staan.
Misschien kun je dit even verduidelijken.

mvg
 
Hoi Imod,

Sorry voor de late reactie (ziek geweest, feestdagen enz).

In de programmacode staat ergens onderaan de volgende regel:
Cells(i, 15+j2) = Zin1: j2 = j2+ 1

Met Cells(i,15+j2) zet je een waarde in een bepaalde Cells(Rij,Kolom). in dit geval had ik gekozen voor 15+j2 (j2 begint met 0), dat betekent kolom 15 oftewel kolom O.

Verander Cells(i,14+j2) en de macro zet de tekst in kolom N.

De tekst uitsplitsen onder elkaar is in deze nieuwe constructie gevaarlijk want dan wordt het tweede deel van de tekst over de volgende tekst geschreven en dat lijkt mij niet de bedoeling (die volgende tekst ben je dan kwijt.

In dat geval zou ik toch kiezen om de tekst in kolom O te zetten.

Verander j2=0 in J2=9 en zet deze bij de regel met J1=9 (bovenaan)
Verander Cells(i,15+j2) in cells(j2,15)

En de tekst komt onder elkaar te staan

Wil je een witregel tussen de bestekregels? zet dan tussen Loop en Next i de regel j2=j2+1

Jeroen
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan