こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

配列の現在のインデックス数を取得したい

要素を自分でどんどん追加できる動的配列を作りたいんです。

最初に、単語数の限界を101個にしようと
Dim word(100) As String にし、
最初から単語帳に入れている単語を6個にしようと
word(0) = "long"
word(1) = "short"
word(2) = "fast"
word(3) = "slow"
word(4) = "blight"
word(5) = "dark"
と書きました。

つまり、宣言での要素数と、実際に存在する要素数に違いがあります。
ここにword(6)、word(7)・・・と追加していくようにしたいのです。

この時、「現在の存在するインデックス番号の最大値(一番最初は5)」を取得するにはどうやればいいのでしょうか?
この値(仮にxとする)を取得したうえで、
newarray = x + 1
と、配列に要素を追加したいと思っています。



説明が分かりにくくて申し訳ありません。
どうぞよろしくお願いします。

投稿日時 - 2008-10-07 16:13:33

QNo.4384176

すぐに回答ほしいです

質問者が選んだベストアンサー

こんにちは。
変数 word をクラス内プライベートにして、単語を追加するサブルーチンをメソッドで実装してはいかがでしょう。

Private prv_word(100) As String '変数:単語格納用
Private cur_index As Long '変数:現在位置保持用
Public Function add_word(word As String) As Boolean 'メソッド
 add_word = False
 If cur_index < UBound(prv_word) Then
  cur_index = cur_index + 1
  prv_word(cur_index) = word
  add_word = True
 End If
End Sub
Public Property Get get_word(index As Long) As String 'プロパティ
 get_word = ""
 If 0 <= index And index <= cur_index Then
  get_word = prv_word(index)
 End If
End Property

空で書いているのでエラーが出るかもしれませんが……。
なお、インデントを全角スペースにしています。

# でもこれ、最初に要素数定義しているから動的ではないかも。

投稿日時 - 2008-10-07 16:47:26

お礼

おかげ様で無事解決できました。
ありがとうございます!

投稿日時 - 2008-10-07 18:09:29

ANo.6

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.7

# お使いの開発環境のバージョン、エディションなども明記しましょう
VB.NET系なら Array.IndexOfでNothingを探してやれば出来そうです

dim n as integer
n = Array.IndexOf( words, Nothing )
if n = -1 then
MessageBox.Show("Error")
exit sub
end if
word.SetValue( 設定するデータ, n )

といった具合です

投稿日時 - 2008-10-07 16:54:07

お礼

おかげ様で無事解決できました。
ありがとうございます!

投稿日時 - 2008-10-07 18:09:40

ANo.5

おっと、読み違えてました。
やっぱり普通にデータ格納済みの最大インデックス番号を保持しておく方向ですかねぇ。

投稿日時 - 2008-10-07 16:37:35

ANo.4

UBound()でいけるはず。
http://msdn.microsoft.com/ja-jp/library/95b8f22f(VS.80).aspx
まぁ私もNo1/2両氏同様、専用の変数を持ってる方が楽じゃないかとは思いますが。

投稿日時 - 2008-10-07 16:35:39

お礼

おかげ様で無事解決できました。
ありがとうございます!

投稿日時 - 2008-10-07 18:08:56

Private Sub CommandButton1_Click()
  Dim words(100) As String

  words(0) = "long"
  words(1) = "short"
  words(2) = "fast"
  words(3) = "slow"
  words(4) = "blight"
  words(5) = "dark"
  
  Debug.Print CharCount(Replace(Join(words, ",|") & ",", "|,", ""), ",")
End Sub

[イミディエイト]
6

幾つ単語が埋まっているか数えるしかないと思います。

Public Function CharCount(ByVal Text As String, ByVal C As String) As Integer
  CharCount = Len(Text) - Len(Replace(Text, C, ""))
End Function

投稿日時 - 2008-10-07 16:34:25

お礼

おかげ様で無事解決できました。
ありがとうございます!

投稿日時 - 2008-10-07 18:08:49

ANo.2

以下の例を参考にしてください。
Sub test()
  Dim word()   As String
  Dim wCnt    As Integer
  '
  '最初
  wCnt = 0
  wCnt = wCnt + 1
  ReDim Preserve word(wCnt)
  word(wCnt) = "long"
  wCnt = wCnt + 1
  ReDim Preserve word(wCnt)
  word(wCnt) = "short"
  wCnt = wCnt + 1
  ReDim Preserve word(wCnt)
  word(wCnt) = "fast"
  wCnt = wCnt + 1
  ReDim Preserve word(wCnt)
  word(wCnt) = "slow"
  wCnt = wCnt + 1
  ReDim Preserve word(wCnt)
  word(wCnt) = "blight"
  wCnt = wCnt + 1
  ReDim Preserve word(wCnt)
  word(wCnt) = "dark"
  '
  '次回から
  wCnt = UBound(word)
  wCnt = wCnt + 1
  ReDim Preserve word(wCnt)
  word(wCnt) = "white"
End Sub

投稿日時 - 2008-10-07 16:26:46

お礼

おかげ様で無事解決できました。
ありがとうございます!

投稿日時 - 2008-10-07 18:08:41

ANo.1

私なら、最大値用の変数を用意しますけど、それでは何か都合の悪いことでもありますか?

投稿日時 - 2008-10-07 16:26:33

お礼

おかげ様で無事解決できました。
ありがとうございます!

投稿日時 - 2008-10-07 18:02:32

あなたにオススメの質問