• ベストアンサー

配列のメリットは?

下記のコードは同じ動作をします。 Sub 普通() Dim moji1 As String Dim moji2 As String moji1 = Range("a1").Value moji2 = Range("a2").Value MsgBox moji1 & moji2 End Sub --------------------------------------------- Sub 配列() Dim moji(2) As String moji(1) = Range("a1").Value moji(2) = Range("a2").Value MsgBox moji(1) & moji(2) End Sub こういう場合は配列を使ったほうがいいのでしょうか? それとも配列は避けたほうがいいのでしょうか?

  • ijuhyg
  • お礼率99% (460/462)

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

  • ベストアンサー
  • A88No8
  • ベストアンサー率52% (834/1602)
回答No.1

こんばんは  ホントにホントに私見ですが..  質問者さんの例題ていどであれば、どちらでもいい。  もしくは、配列を無理して使わなくてもOk。  配列ってエクセルの表とよく似ています。  分類するほどの要素がないとか、集計の省力化に寄与できないなら使う意味がないような気がします(^^;

ijuhyg
質問者

お礼

確かにこの例題では配列を使うメリットはありませんね 笑 ありがとうございます。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 通常、ワークシートの場合は、一旦、Range オブジェクトに入れて、そこから値を出すように作ります。 ところが、途中で、ワークシートの行を削除したり、値を消したりすると、確保したはずの値も消えてしまいます。Rangeオブジェクトは、最後まで維持しなければなりません。 Sub Test1()   Dim rng As Range      For i = 1 To 3     Cells(i, 1).Value = i   Next i   '--------------------------   MsgBox "値を確保!"   Set rng = Range("A1:A3") 'Range 型で確保   Range("A1").Delete      For i = 1 To 3     msg = msg & "," & Cells(i, 1).Value   Next i   MsgBox Mid(msg, 2) End Sub Sub Test2()   Dim ar As Variant   Dim v As Variant      For i = 1 To 3     Cells(i, 1).Value = i   Next i   '--------------------------   MsgBox "値を確保!"      ar = Range("A1:A3").Value '配列で確保   Range("A1").Delete   For Each v In ar     msg = msg & "," & v   Next v   MsgBox Mid(msg, 2) End Sub >こういう場合は配列を使ったほうがいいのでしょうか? >それとも配列は避けたほうがいいのでしょうか? セルの扱いは、配列のほうが速いけれども、ワークシートでは、一次配列ではなく、2次配列になりますから、その分はややこしくなります。

ijuhyg
質問者

お礼

ありがとうございます。

  • ESE_SE
  • ベストアンサー率34% (157/458)
回答No.2

No.1の方の回答で概ね間違いはありません。 例えばExcelの表から数千カラムの要素を拾ってくるコードを書くとすると、 配列を使わなければ変数を数千個用意しないといけませんが 配列を使うと Dim moji(10000) as String で宣言完了です。 特定の箇所の要素を拾ってくる場合も msgbox moji(5379) だけで指定して拾って来れます。 やっぱり配列は数十個以上の要素を扱うときに力を発揮する機能ですね。

ijuhyg
質問者

お礼

配列を使うと宣言が簡単ですね。 ありがとうございます。

関連するQ&A

  • セルの中の改行された文字をひとつづつ取得したい

    図のように A1には「あ」「い」「う」が改行されて入っています。 Sub test() Dim moji(3) As String moji(1) = Range("a1").Value moji(2) = Range("a1").Value moji(3) = Range("a1").Value End Sub というコードを書いた時、 moji(1) ="あ" moji(2) ="い" moji(3) = "う" としたいのですが すべて"あいう"になってしまいます。 実現させるにはどうすればいいでしょう? アドバイスよろしくお願いします。

  • Const に dim は使えない?

    標準モジュールに ''''''''''''''''''''''''''''''''''''''''''' Dim Const moji As String = "a" Sub test1() MsgBox moji End Sub Sub test2() Dim Const moji As String = "a" MsgBox moji End Sub ''''''''''''''''''''''''''''''''''''''''''' とするとエラーになりますが ''''''''''''''''''''''''''''''''''''''''''' Public Const moji As String = "a" Sub test3() MsgBox moji End Sub ''''''''''''''''''''''''''''''''''''''''''' なら大丈夫です。 Const に対してdimは使えないのでしょうか?

  • midステートメント セルを指定したい

    エクセルなのですが、 Sub N文字目を置換する1() Dim N As Long Range("a1").Value = "abcde" N = 2 '置換する文字の位置 ’start(省略不可) Mid(Range("a1").Value, N) = "X" MsgBox Range("a1").Value End Sub このように、セルを指定することはできないのでしょうか? このコードを実行しようとすると、 Mid(Range("a1").Value, N) = "X"の部分で「変数が必要です」とコンパイルエラーになります。 Sub N文字目を置換する2() Dim moji As String Dim N As Long Range("a1").Value = "abcde" moji = Range("a1").Value N = 2 Mid(moji, N) = "X" MsgBox moji End Sub このように、セルの値を一度変数に入れると問題なく実行できますが、 なぜダイレクトにmidステートメントでセルを指定できないのかわからないので教えてください。 よろしくお願いします。

  • ウォッチウインドウで確認すると、「Range("a1").Value」は「十」ボタンができる

    Sub test() Dim Strmoji As String Strmoji = "a" MsgBox Range("a1").Value MsgBox Strmoji End Sub Range("a1").ValueとStrmojiをウォッチ式に追加して このコードをF8でデバッグしていくと Range("a1").Valueの方だけ「十」ボタンが付き、 クリックすると広がりたくさんの情報が表示されています。 これはRangeだからですか?Cellも試してみたけど同じでした。 しかしなぜ、Strmojiは「十」ボタンがでないのでしょうか? 「十」ボタンがでるのとでないのでは何が違うのですか? よろしくお願いします。

  • Objectで宣言するのとObject型で宣言する

    Objectで宣言するのとObject型で宣言するのではどちらがいいでしょうか? エクセルです。 VBAでコードを作るにおいて、どちらのほうがいいのでしょうか? どちらも同じ動きをします。 Sub Sample1() Dim buf As Range Set buf = Range("A1") MsgBox buf.Value End Sub Sub Sample2() Dim buf As Object Set buf = Range("A1") MsgBox buf.Value End Sub ご回答よろしくお願いします。

  • ifステートメント 大文字も小文字も区別なく

    Sub test() Dim moji As String moji = "a" If moji = "A" Then MsgBox "Aかaです" End If End Sub これだと、変数が小文字のaだからmsgboxが表示されません。 小文字も大文字も区別なく認識させるにはどうすればいいでしょうか? バイナリモードになってるようです。 Replace関数の場合は、vbTextCompareを付ければ Sub Sample() Dim moji As String moji = "a" Debug.Print Replace(moji, "A", "b", , , vbTextCompare) End Sub このように大文字小文字区別なく置換できますが このような事をifステートメントでやる方法を教えてください。

  • 定数と変数、どちらを使った方がいいか?

    vbaの勉強中なので教えてください。 Sub 定数を使った場合() Const moji = "あああ" MsgBox moji End Sub Sub 変数を使った場合() Dim moji As String moji = "あああ" MsgBox moji End Sub 二つのサンプルは答えは一緒なのですが プログラムを作るにおいてどちらを使った方が良いのでしょうか? このサンプルならどっちでもいいのでしょうか?

  • Range.Name プロパティの使い方

    VBAの勉強中のものです。(エクセル) 一つ一つヘルプを見て、検証して勉強していこうと思ってるのですが 使い方がわからないので教えてください。 Range.Value プロパティならうまくいくのですが、 Range.Name プロパティの使い方がわかりません。 ----------------------- Sub test1() MsgBox Range("a1").Name End Sub Sub test2() Dim R As Range Set R = Range("a1") MsgBox R.Name End Sub ----------------------- どちらも、アプリケーション定義またはオブジェクト定義のエラーです。になります。 ----------------------- Sub test1() MsgBox Range("a1").Value End Sub Sub test2() Dim R As Range Set R = Range("a1") MsgBox R.Value End Sub ----------------------- rangeにすればうまくいきます。 Range.Name プロパティの使い方を教えてください。アドバイスよろしくお願いします。

  • 変数の使い方の注意点なんですが・・・?

    Windows XP Home Edition Excel 2002 当方は、まだ基本がしっかり頭に入っていないので、 勝手な疑問が出てきているようでございます。 まだまだ勉強中ですが、 下記コードの場合、動作はしますが、 変数 c の使い方は間違っているのではないですか? 4は、 同プロシージャ内なので、 変数 c と r というように、区別して記述しないといけないのではないかと思って いるのですが。 3は、 プロシージャが違うので問題はないと思っております。 Dim r As Range, s As Range と記載してもいいのでしょうか?   つまり、曖昧に、ごっちゃ混ぜにしてしまうと、エラー等、PCに支障をきたすことになって しまうのではないかと心配でございます。 また、こんな記述だと、エラー等、PCに支障をきたすことになって しまうという例を 1つか2つ(又はHP等) 教えて頂けると有り難いです。 初歩的な例で結構です。 全くの初歩的な(ざっくりな)お答えで結構ですのでよろしくお願い致します。 Sub てす1() Dim r As Range, s As Range   Set s = Cells(1, 1)   s.Select  MsgBox " A1 です " End Sub '------------------------ Sub てす2() Dim r As Range, s As Range   Set s = Cells(1, 2)   s.Select  MsgBox " A2 です " End Sub '------------------------ Sub てす3() Dim r As Range, s As Range   Call てす1   Call てす2  MsgBox "  A1とA2 です " End Sub '------------------------ Sub てす4() Dim r As Range, s As Range   Set s = Cells(1, 1)   s.Select  MsgBox " A1 です "   Set s = Cells(1, 2)   s.Select  MsgBox " A2 です "  MsgBox " A1とA2 です " End Sub

  • 配列をテキストファイルに書き込むことは不可能でしょうか?

    Sub Macro1() Dim No As Long No = FreeFile 文字列 = "1234" Open "D:\Test.txt" For Output As #No Print #No, 文字列 Close #No End Sub 上記のMacro1の文字列の書き込みは可能なのですが Sub Macro2() Dim No As Long Dim 配列 As Variant Range("a1").Value = "1☆2☆3☆4☆" No = FreeFile 配列 = Split(Range("A1").Value, "☆") Open "D:\Test.txt" For Output As #No Print #No, 配列 Close #No End Sub だと「Print #No, 配列」で「型が一致しません」とエラーになってしまいます。 テキストファイルに配列を書き込みたいのですがどうすればいいのでしょうか? よろしくお願い致します。

専門家に質問してみよう