Odtsránenie jedného prvku poľa


Uvod

Funkcia pole (Array) zoskupuje prvky a jednotlivé prvky opatrí indexom. Rozmery poľa sa deklarujú pomocou kľúčového slova Dim. U dynamického poľa môžeme behom programu meniť jeho rozsah pomocou kľúčového slova ReDim. Indexy predvolene začínajú 0. Ak to chceme zmeniť, aby index začal od jednotky, zadáme príkaz Option Base 1. Tento príkaz sa používa len na úrovni modulu. Najvyšší index v poli sa zistí pomocou funkcie UBound: UBound(pole). Najnižší index v poli sa zistí pomocou funkcie LBound: LBound(pole). Tu uvedený príklad demonštruje, ako možno odstrániť jeden prvok poľa.
Option Base 1
Option Explicit
'Cieľ      :    Odstrániť jeden prvok poľa
'Vstupy    :    Pole      Pole, z kt. sa má odstrániť jeden prvok
'               [ind]     Index prvku, kt. sa má odstrániť
'               [ihod]    Hodnota prvku, kt. sa má odstrániť
'               [poradie] Ak zadáte TRUE, poradie prvkov poľa sa zachová(trochu pomalšie)
'Výstupy   :    Vráti TRUE ak bol prvok odstránený z poľa
'Poznámka  :    Špecifikuj buď  ind alebo ihod
'               Ak je špecifikovaná hodnota (ihod)  a pole obsahuje viac
'               ako 1 prvok tej istej hodnoty, bude odstránený prvý prvok
'               kt. je zhodný so zadanou hodnotou. Polia musia byť deklarované
'               ako dynamické, napr.  Dim Pole() as Integer
Function PolePrvok(ByRef Pole As Variant, Optional _
ind As Long, Optional ihod As Variant, Optional _
poradie As Boolean = False) As Boolean
    Dim hIndex As Long, DocasHod As Variant, dIndex As Long, NajdiPrvok As Boolean
    Dim kk As Long
    On Error GoTo Chyba
    hIndex = UBound(Pole) ' maximálny index poľa
    dIndex = LBound(Pole) ' najnižší index poľa
    
    If IsMissing(ihod) Then
        If hIndex >= ind Then
            'Najdi prvok podľa indexu
            NajdiPrvok = True
        End If
    Else
        'Najdi prvok v poli a odstráň prvok zistený podľa hodnoty
        For ind = dIndex To hIndex
            If Pole(ind) = ihod Then
                'najdený prvok
                NajdiPrvok = True
                Exit For
            End If
        Next
    End If
    
    If NajdiPrvok Then ' keď našiel prvok
        If poradie Then
            'Zachovaj poradie prvkov poľa kopírovaním hodnôt
            For kk = ind To hIndex - 1
                Pole(kk) = Pole(kk + 1)
            Next
        Else
            'kopíruj posledný prvok do dočasnej premennej
            DocasHod = Pole(hIndex)
            'prepíš prvok, kt. sa má odstrániť
            Pole(ind) = DocasHod
        End If
        'zmeň rozpätie poľa
        ReDim Preserve Pole(dIndex To hIndex - 1)
        PolePrvok = True
    End If
    
    Exit Function
    
Chyba:
    Debug.Print Err.Description
    PolePrvok = False
    On Error GoTo 0
End Function
'Príklad použitia funkcie PolePrvok
Sub Test()
    Dim vse() As Long, ii As Long, hind As Long, dind As Long, n As Long
    n = 5
    ReDim vse(n)
    vse(1) = 5
    vse(2) = 10
    vse(3) = 15
    vse(4) = 20
    vse(5) = 25
    'Odstráň prvok s hodnotou 10 a zachovaj poradie prvkov
    PolePrvok vse, , 10, True 'voláme funkciu PolePrvok
    hind = UBound(vse)
        For ii = 1 To hind
            Debug.Print vse(ii)
        Next
End Sub




Zdroje:
  1. Visual Basic(česky)
  2. Manual VBA
  3. Your first macro (anglicky)
Kontakty

Stránka je v súlade s aktuálnymi normami.

Valid HTML 4.01 Transitional



Domov

©  Klára Mrázová