- ベストアンサー
配列の現在のインデックス数を取得したい
要素を自分でどんどん追加できる動的配列を作りたいんです。 最初に、単語数の限界を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 と、配列に要素を追加したいと思っています。 説明が分かりにくくて申し訳ありません。 どうぞよろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 変数 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 空で書いているのでエラーが出るかもしれませんが……。 なお、インデントを全角スペースにしています。 # でもこれ、最初に要素数定義しているから動的ではないかも。
その他の回答 (6)
- redfox63
- ベストアンサー率71% (1325/1856)
# お使いの開発環境のバージョン、エディションなども明記しましょう 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 ) といった具合です
お礼
おかげ様で無事解決できました。 ありがとうございます!
- D-Matsu
- ベストアンサー率45% (1080/2394)
おっと、読み違えてました。 やっぱり普通にデータ格納済みの最大インデックス番号を保持しておく方向ですかねぇ。
- D-Matsu
- ベストアンサー率45% (1080/2394)
UBound()でいけるはず。 http://msdn.microsoft.com/ja-jp/library/95b8f22f(VS.80).aspx まぁ私もNo1/2両氏同様、専用の変数を持ってる方が楽じゃないかとは思いますが。
お礼
おかげ様で無事解決できました。 ありがとうございます!
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
お礼
おかげ様で無事解決できました。 ありがとうございます!
- pkh4989
- ベストアンサー率62% (162/260)
以下の例を参考にしてください。 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
お礼
おかげ様で無事解決できました。 ありがとうございます!
- higekuman
- ベストアンサー率19% (195/979)
私なら、最大値用の変数を用意しますけど、それでは何か都合の悪いことでもありますか?
お礼
おかげ様で無事解決できました。 ありがとうございます!
お礼
おかげ様で無事解決できました。 ありがとうございます!