• ベストアンサー

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

要素を自分でどんどん追加できる動的配列を作りたいんです。 最初に、単語数の限界を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 と、配列に要素を追加したいと思っています。 説明が分かりにくくて申し訳ありません。 どうぞよろしくお願いします。

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

  • ベストアンサー
  • mbcmu
  • ベストアンサー率68% (15/22)
回答No.6

こんにちは。 変数 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 空で書いているのでエラーが出るかもしれませんが……。 なお、インデントを全角スペースにしています。 # でもこれ、最初に要素数定義しているから動的ではないかも。

mobsquad08
質問者

お礼

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

その他の回答 (6)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.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 ) といった具合です

mobsquad08
質問者

お礼

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

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.5

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

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.4

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

mobsquad08
質問者

お礼

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

noname#140971
noname#140971
回答No.3

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

mobsquad08
質問者

お礼

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

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.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

mobsquad08
質問者

お礼

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

  • higekuman
  • ベストアンサー率19% (195/979)
回答No.1

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

mobsquad08
質問者

お礼

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

関連するQ&A