web-dev-qa-db-ja.com

アレイ全体をクリアする方法は?

私はこのような配列を持っています:

Dim aFirstArray() As Variant

アレイ全体をクリアするにはどうすればよいですか?コレクションはどうですか?

EraseまたはReDimステートメントを使用して、配列をクリアできます。

Dim threeDimArray(9, 9, 9), twoDimArray(9, 9) As Integer
Erase threeDimArray, twoDimArray
ReDim threeDimArray(4, 4, 9)

各メソッドの異なる使用法はこちらをご覧ください

更新

コレクションを削除するには、そのアイテムを反復処理し、removeメソッドを使用します。

For i = 1 to MyCollection.Count
  MyCollection.Remove 1 ' Remove first item
Next i
106
Sarfraz

VBAで動的配列を削除するには、Erase命令を使用します。

例:

Dim ArrayDin() As Integer    
ReDim ArrayDin(10)    'Dynamic allocation 
Erase ArrayDin        'Erasing the Array   

このヘルプを願っています!

20

次のように簡単です:

Erase aFirstArray
6
Jaanus
[your Array name] = Empty

その後、配列はコンテンツなしになり、再び入力できます。

2
Koke
ReDim aFirstArray(0)

これにより、配列のサイズがゼロに変更され、すべてのデータが消去されます。

1
SUNIL KUMAR

自分のためのより良い使用法を見つける:私は通常、バリアントが空であるかどうかをテストし、上記の方法はすべてテストで失敗します。実際にバリアントを空に設定できることがわかりました:

Dim aTable As Variant
If IsEmpty(aTable) Then
    'This is true
End If
ReDim aTable(2)
If IsEmpty(aTable) Then
    'This is False
End If
ReDim aTable(2)
aTable = Empty
If IsEmpty(aTable) Then
    'This is true
End If
ReDim aTable(2)
Erase aTable
If IsEmpty(aTable) Then
    'This is False
End If

このように、私は私が望む行動を得る

0
Rafiki

私はdim/redimで配列全体のクリアに失敗した場合に陥りました:

2つのモジュール全体の配列、ユーザーフォーム内のプライベート、

1つの配列は動的でクラスモジュールを使用し、もう1つの配列は固定で特別な型を持っています。

Option Explicit

Private Type Perso_Type
   Nom As String
   PV As Single 'Long 'max 1
   Mana As Single 'Long
   Classe1 As String
   XP1 As Single
   Classe2 As String
   XP2 As Single
   Classe3 As String
   XP3 As Single
   Classe4 As String
   XP4 As Single
   Buff(1 To 10) As IPicture 'Disp
   BuffType(1 To 10) As String
   Dances(1 To 10) As IPicture 'Disp
   DancesType(1 To 10) As String
End Type

Private Data_Perso(1 To 9, 1 To 8) As Perso_Type

Dim ImgArray() As New ClsImage 'ClsImage is a Class module

そして、私はこれらの配列(および関連するランタイム作成されたコントロール)をこのようにユーザーフォームの内側と外側からクリアするためにパブリックとして宣言されたサブを持っています:

Public Sub EraseControlsCreatedAtRunTime()
Dim i As Long
On Error Resume Next
With Me.Controls 'removing all on run-time created controls of the Userform :
    For i = .Count - 1 To 0 Step -1 
        .Remove i
    Next i
End With
Err.Clear: On Error GoTo 0

Erase ImgArray, Data_Perso
'ReDim ImgArray() As ClsImage ' i tried this, no error but wouldn't work correctly
'ReDim Data_Perso(1 To 9, 1 To 8) As Perso_Type 'without the erase not working, with erase this line is not needed.
End Sub

注:この最後のサブルーチンは最初にCall FormName.SubNameで外部(他のフォームおよびクラスモジュール)から呼び出されましたが、エラーを減らしてApplication.Run FormName.SubNameに置き換える必要がありました。

0