Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


73812 / 76732 ←次へ | 前へ→

【7393】Re:2次元(多次元)配列の宣言について
回答  Jaka  - 03/9/4(木) 9:32 -

引用なし
パスワード
   おはようございます。
エラーに付いては、Jカーターさんがおっしゃっていますが。

ヘルプより
メモ  動的配列でキーワード Preserve を使用する場合、最後の次元の上限値のみ変更できます。次元数は変更できません。

リストボックスは、ColumnCountが2になっているとして。
配列を1行余分に作らないと、なんかうまくいかなかった。
しかし、この方法だと配列をメモリに維持しつづけるのがちょっと気になる。
数が多くなってくるとトロくなりそう。

Dim A() As String

Private Sub CommandButton1_Click()
Dim X As Integer
X = ListBox1.ListCount
If X = 0 Then
  ReDim Preserve A(0 To 1, 0 To X + 1)
Else
  ReDim Preserve A(0 To 1, 0 To X)
  X = X - 1
End If
A(0, X) = TextBox1.Value
A(1, X) = TextBox2.Value
ListBox1.List = Application.Transpose(A)
Range("C1:D1").Value = Application.Transpose(A)
DoEvents
End Sub

これってバグ??
If X = 0 Then
  ReDim Preserve A(0 To 1, 0 To X + 1)
Else
  ReDim Preserve A(0 To 1, 0 To X)
  X = X - 1
End If
上のIF文をとって単純に下のようにした場合。
ReDim Preserve A(0 To 1, 0 To X)


メモリ無いに維持させない方法。

Private Sub CommandButton1_Click()
  Dim LtTb() As String
  LTC = ListBox1.ListCount
  ReDim LtTb(1 To LTC + 1, 1 To 2)
  If LTC <> 0 Then
    For i = 1 To LTC
      LtTb(i, 1) = ListBox1.List(i - 1, 0)
      LtTb(i, 2) = ListBox1.List(i - 1, 1)
    Next
  Else
    i = 1
  End If
  LtTb(i, 1) = TextBox1.Value
  LtTb(i, 2) = TextBox2.Value
  ListBox1.List = LtTb
  DoEvents
  Erase LtTb
End Sub

1 hits

【7361】2次元(多次元)配列の宣言について KAZ 03/9/3(水) 12:15 質問
【7381】Re:2次元(多次元)配列の宣言について Jカーター 03/9/3(水) 18:37 回答
【7382】Re:2次元(多次元)配列の宣言について Jカーター 03/9/3(水) 18:50 回答
【7383】Re:2次元(多次元)配列の宣言について Jカーター 03/9/3(水) 19:06 回答
【7393】Re:2次元(多次元)配列の宣言について Jaka 03/9/4(木) 9:32 回答
【7394】表現が...。 Jaka 03/9/4(木) 9:40 発言
【7420】Re:2次元(多次元)配列の宣言について Jカーター 03/9/4(木) 16:07 回答
【7433】Re:2次元(多次元)配列の宣言について KAZ 03/9/5(金) 0:01 お礼
【7438】Re:2次元(多次元)配列の宣言について Jaka 03/9/5(金) 9:15 回答

73812 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free