Inlezen veranderende input matrix

Status
Niet open voor verdere reacties.

BartFr

Gebruiker
Lid geworden
18 jan 2012
Berichten
37
Goedemorgen allen,

Ik heb een probleem met het "inlezen" van data uit een kolom. Deze kolom kan echter langer en korter worden, omdat er vaak rijen toegevoegd worden, en af en toe worden er rijen verwijderd. Nu dacht ik het opgelost te hebben door het begin van de in te lezen data aan te geven, en het einde van de in te lezen data. Helaas wordt dit nu veel te uitgebreid, en blijf ik maar getallen aanpassen. Dit wil ik automatiseren.

Visuele uitleg:

Ik heb data staan in kolom F. De in te lezen data loopt van F12 tot F33. In een aantal cellen staat een woord. Dit woord kan veranderen door input van de gebruiker. F12 tot F33 stelt een configuratie voor. Van deze configuraties heb ik nu 3 verschillende. (het wordt vanzelf duidelijk in de bijgeleverde excel file).

De volgende configuratie wordt samengesteld uit F38 tot F59. De volgende configuratie uit F64 tot F85.

Nu heb ik een code in VBA, die zelf opzoekt welke woorden er in deze kolom staan. Dit heb ik gedaan per configuratie.
In de vorm van: "Als dit woord, daar staat, dan ga je dit doen".
De configuraties geef ik nu aan als volgt:

Code:
For i = 12 To 33

If Sheets("Configuration_generator").Range("F" & i) = "Retracted" Then
             Call Jib_retracted
                ElseIf Sheets("Configuration_generator").Range("F" & i) = "Extended" Then
             Call Jib_extended
                ElseIf Sheets("Configuration_generator").Range("F" & i) = "No_Jib" Then
             Call No_jib
                ElseIf Sheets("Configuration_generator").Range("F" & i) = "On_Jib_ex" Then
             Call COB_jib_extended
                ElseIf Sheets("Configuration_generator").Range("F" & i) = "On_Jib_re" Then
             Call COB_jib_retracted
                ElseIf Sheets("Configuration_generator").Range("F" & i) = "On_hammerhead" Then
             Call COB_nojib
                ElseIf Sheets("Configuration_generator").Range("F" & i) = "No_COB" Then
             Call No_COB
.
.
.
.
.
End If
           
            Next i
    
    Call Calculations
    
    End If

Dit werkt opzich aardig. Het programma doet wat het moet doen. Het probleem is echt dat ik per configuratie moet aangeven, "waar deze zich bevindt" (met de i'tjes). Dit gaat natuurlijk goed wanneer dezelfde format wordt gehanteerd. Nu is het alleen zo, dat er vaak rijen worden toegevoegd, rijen worden verwijderd, en dat er veel configuraties gaan bijkomen. (in het voorbeeld zijn het er 3, ik heb er sowieso al 8).

Wat ik wil is het volgende: Kan ik per configuratie een start en eindpunt aangeven? Zodat hij dit automatisch blijft inlezen, en ik niet per verandering, ook de i'tjes moet aanpassen.

Dus dat ik bij configuratie 1, voor het inlezen s_start010 zet, en aan het eind, s_end010. Configuratie 2 start bij s_start020 en houdt op bij s_end020.

Dat ik iets als het volgende krijg:

Code:
For i = s_start010 To s_end010
.
.
.
End If
           
            Next i
    
    Call Calculations
    
    End If

For i = s_start020 To s_end020
.
.
.
End If
           
            Next i
    
    Call Calculations
    
    End If

etc.

Ik hoop dat het duidelijk is, ik vind het heel lastig uit te leggen.
Bijgevoegd een klein overzichtje. let niet op de namen, dat is configuratie afhankelijk.

Alvast bedankt, en ik hoop dat het duidelijk is! Zo niet, ga ik het uiteraard nog eens proberen.

BartBekijk bijlage 217555
 

Bijlagen

Laatst bewerkt:
Kijk eens naar:

Code:
Sub M_snb()
    For Each ar In Sheet1.Columns(6).SpecialCells(2).Areas
        MsgBox ar.Address
    Next
End Sub
 
Bedankt voor je reactie.

Ik heb alleen werkelijk geen flauw idee wat dit doet...

Als ik hem achter een knopje zet krijg ik een messagebox met wat cellen erin genoemd. Maar dit kan ik niet linken aan dat ik van s_start010 tot s_end010 data wil inlezen.

Bart
 
Kijk eens in de hulpbestanden van de VBEditor bij lemma 'area'.
Met een aanpassing (beter ontwerp) van het werkblad kun je zo een hoop VBA code besparen.
 
Ik zal er eens naar kijken.

Het werkblad in de bijlage is natuurlijk puur een voorbeeld (zoals eerder gezegd...). Hier zit van alles aan verbonden en ziet er gewoon goed uit. Dit kan ik alleen niet volledig laten zien ivm werk.

Ik werk ook met verschillende personen samen, die dit format willen. Het ziet er helemaal goed uit en kan niet veranderd worden.

Het enige wat ik wil is dat de i = getal to getal veranderd wordt in i = s_start010 to s_end010, zodat ik niet meer telkens getallen moet veranderen in mijn code als er rijen toegevoegd worden of verwijderd worden.

Ik zal eens kijken naar je voorstel.

Bart
 
Bart,

Ik zie dat je al een heel programma geschreven hebt, maar zo te zien is het eenmaal gebouwd en wel aangepast
maar eigenlijk nooit goed van een structuur voorzien. Dat is jammer want dit maakt de onderhoudbaarheid van zo'n
programma nodeloos ingewikkeld.
Ik heb je vraag opgelost door te zoeken in kolom F naar s_start010 en s_end010 en dergelijke.
Verder heb ik de structuur wat aangepast. Aangezien ik de macro niet in zijn geheel kan laten lopen heb ik hem niet uitgebreid kunnen
testen.

Bekijk bijlage HelpMijLeesDataMatrix.xlsm

Veel Succes er mee.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan