Avatar billede Martin_34_2 Nybegynder
01. september 2011 - 13:14 Der er 9 kommentarer og
1 løsning

Opslag ind i intervaller

Jeg har en efterhånden maget lang formel på 57 hvis formler inden i hinanden. Den må man da kunne lave smartere.

Jeg har i Ark 1 en kolonne med værdier(vægt(kolonne A)) der skal slås op for hvilken vægt zone de tilhøre. Derfor har jeg lavet et yderligere ark med 3 kolonner(A, B, C). Kolonne A indeholder den laveste vægt i det interval. Kolonne B indeholder den højeste vægt i det interval. Kolonne C indeholder vægt zonen. Vægt Zonen (ark 2 kolonne C) skal returneres til Kolonne B i ark 1.

Eksempel
Ark 1:
    A    B
1    Vægt     Vægt zone
2    13   
3    24   
4    55   
5    777   
6    978   
7    1300   
8    13   
9    87   
10    9   
11    1   
12    666   
13    9134   
       
       

Ark 2:
    A    B    C
1    Laveste vægt    Højestevægt    Vægt zone
2    0    30    1
3    31    40    2
4    41    50    3
5    51    60    4
6    61    70    5
7    71    80    6
8    81    90    7
9    91    100    8
10    101    125    9
11    126    150    10
12    151    175    11
13    176    200    12
14    201    250    13
15    251    300    14
16    301    350    15
17    351    400    16
18    401    450    17
19    451    500    18
20    501    600    19

Det her er kun uddrag af de enkelte ark. Der findes 57 forskellige Vægt zoner (ark 2 Kolonne C) Der går fra en vægt på 0 kg til 30.000kg. Der findes godt 100.000 linjer der skal vurderes (ark 1 kolonne A).
Avatar billede supertekst Ekspert
01. september 2011 - 13:27 #1
Må det være VBA?
Avatar billede supertekst Ekspert
01. september 2011 - 14:20 #2
Hvis ja:

Rem Kopier dette Ctrl+C
Rem Koden indsættes under Ark1 (Højreklik / Visprogramkode / Indsæt (Ctrl+v)
Rem Gem og luk VBA-vinduet
Rem Excel skal være indstillet til at køre makro
Rem ==
Rem Udfør makro: Fra Ark1 Alt+F8 - afspil viste makro (tildelVægtZone)

Dim antalZ As Byte, zTabel() As Integer
Public Sub tildelVægtZone()
Dim antalRæk As Long, vægt As Integer
Dim ræk As Long, vægtZone As Byte

    Application.ScreenUpdating = False
   
    ActiveWorkbook.Sheets(2).Activate
    antalZ = ActiveCell.SpecialCells(xlLastCell).Row
   
Rem opbyg intern tabel
    ReDim zTabel(antalZ)
    For ræk = 2 To antalZ
        zTabel(ræk - 1) = ActiveSheet.Range("A" & ræk)
    Next ræk

Rem Tildel vægtzoner
    ActiveWorkbook.Sheets(1).Activate
    antalRæk = ActiveCell.SpecialCells(xlLastCell).Row
   
   
    For ræk = 2 To antalRæk
Rem vis aktuelle række
        Application.StatusBar = "Ræk: " & ræk
        vægt = Range("A" & ræk)
        vægtZone = findVægtZone(vægt)
        Range("B" & ræk) = vægtZone
    Next ræk
   
    Application.ScreenUpdating = True
End Sub
Private Function findVægtZone(vægt)
Dim f As Byte
    For f = 1 To antalZ
        If zTabel(f) > vægt Then
            findVægtZone = f - 1
            Exit For
        End If
    Next f

End Function
Avatar billede Martin_34_2 Nybegynder
01. september 2011 - 14:41 #3
Hej Supertekst,

Ja det skrev jeg ikke noget om beklager.
I princippet ja så må det godt, men jeg vil klart fortrække en løsning der ikke er en VBA løsning. Da dette spare mig for og skulle indvoldvere andre.
Avatar billede supertekst Ekspert
01. september 2011 - 14:47 #4
OK - men prøv evt. ovennævnte da den nu er udviklet..
Avatar billede Martin_34_2 Nybegynder
01. september 2011 - 15:16 #5
Den bliver helt sikert afprøvet:)

Jeg har ikke selv arbejdet med VBA før, så jeg har lige været forbi vores it afd. for og aftale en tid hvor vi lige kan snakke lidt om det, og de lige viser/hjælper/underviser i det:)
Avatar billede supertekst Ekspert
01. september 2011 - 15:44 #6
Fint nok.

Ellers kan du blot sige til..
Avatar billede Slettet bruger
01. september 2011 - 15:53 #7
Matriksformel, dvs. ved indtastning hold Ctrl og Shift nede før du trykker på Enter:

=INDEKS('Ark2'!$C$2:$C$20;SAMMENLIGN(1;('Ark1'!$A2>='Ark2'!$A$2:$A$20)*('Ark1'!A2<='Ark2'!$B$2:$B$20);0))

(Formlen på 105 tegn returnerer #I/T for vægte større end det der er angivet som sidste "Højeste vægt" (=600), hvor VBA-hoden på 823 tegn returnerer nul).

Hans
Avatar billede Martin_34_2 Nybegynder
10. februar 2012 - 11:14 #8
Vil i ikke lige ligge et svar hver, så fordele jeg lige pointne.

Denne opgave kom til og tage for mange ressurser uanset hvad jeg gjorde:(
Avatar billede supertekst Ekspert
10. februar 2012 - 11:22 #9
Ok..
Avatar billede Slettet bruger
10. februar 2012 - 13:49 #10
Jeg ved ikke om opfordringen gælder mig, men i hvert fald, se gerne bort fra mig i pointsammenhæng.

Hans
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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