• 締切済み

数字を配列に入れるかセルに入れるかに違いはあるのでしょうか

a(10)の配列に10個の数字を代入するのと cells(i,1)のセル(iは1から10)に数字を入れるのは メモリ上で違うんでしょうか? 配列の場合はメモリ上に確保されるのでしょうけど、 セルの場合はどこに確保されるんでしょうか? メモリにロードされたエクセルの領域に確保されるのでしょうか? どっちが良いとかはありますでしょうか?

みんなの回答

回答No.3

既に ある程度の話は出ていますが、あくまでVBAの範疇という仮定で 話をすると、どちらもExcelの管理下にある領域では ありますね。 ただ、セルに格納するということは、Excelの内部的に文字列に変換していたり いろいろ余計な処理をしている可能性が大ですし、そもそも「画面に表示」という処理は、 一般的にはメモリ内だけで処理するより数段遅いです。 処理内容(処理量)が大した事ないのなら、どちらでもいいでしょうが、 処理量が膨大な場合は、少なくとも処理の「途中で」セルをワーク配列の 代わりに使うような事は基本的にはタブーでしょうね。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

多分建前は、配列はメモリの連続領域に確保されます。長い文字列や要素が多いとそうもいかない場合もあるように思うが。 >メモリ上に確保されるのでしょうけど、はそのとおりでしょう。 しかしコンパイル方式で無いプログラム実行ではメモリの確保にいくばくかの時間がかかるという面もあると思う。要は複雑で、少しの勉強ぐらいでは結論を出せないと言いたい。 エクセルのセルは、>メモリ上に確保されるのでしょうけど、は正しいと思いますが、仕組みは我々には公開されていません。 2007のようにセル数が増えると、実際はそうも行かないのではと思いますが。エクセルの操作処理スピードを上げるためメモリに出来るだけ展開しようとしているとは思われる。 こんな質問のようなことは我々は考える課題ではなく、エクセルでも他に勉強することが沢山あるはずだ。 MSのエクセル直接開発担当者にしかわからないことで、あれこれ言ってもしょうがない。表計算もエクセル以外でも2,3あり、標準的な処理方式は、今では確立していると思うが。それを勉強したかったらこんなところへの質問でなく、もっと専門的な研究をすべきだ。 エクセルのセルという仕掛けがあるのに配列をセルの代わりやセル間 計算に使うのは馬鹿げていると思う。 処理スピードを上げるなら、エクセルなんて考えず、独自にソフトを作ればよい(何でもエクセルという者が質問者には多い)。研究者などそうしてるはず。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

どちらもExcelが管理しているメモリー上に配置されます ただし全然別の領域ですが ・・・ セルの場合にどこにどのように確保されるかは公開されていません 配列については確保の仕方により違います 一般的には確保のされ方は気にしなくてもいいように思います Cell(i,j)などは結構アクセスが遅いですよ 大量のデータを扱うならセル範囲のRangeオブジェクトのValueプロパティでデータだけ配列に引っ張り出してループ処理する方が迅速な処理が出来ます 数個から数十個程度なら Cellsでも大差ないと思います

関連するQ&A

  • Excelのセルから配列変数への一括読込み

    VB(というかプログラミング)の超初心者です。 Excelシートの任意の領域にある数値を、配列変数に一括して 入力したいと思っています。 これまで、 Dim XXX(10) As Variant For I = 1 To 10 XXX(I - 1) = Cells(1, I).Value Next I Range(Cells(10, 1), Cells(10, 10)).Value = XXX の様な感じで処理していましたが(最近まで、セルへの書込みも For-Nextで処理していました)、データ数が多くなると処理に 時間がかかってしまいます。 配列YYYへの読込みもセルへの書込みの様に一括して行うには どうすれば良いでしょうか? よろしくお願いします。

  • excelで縦書きのセルの数字の配列

    エクセルで縦書きのセルにカタカナと数字を入力した場合 カタカナは縦書きになるのですが数字がたとえば91と入力すると 9と1が縦書きになってしまいます。横に数字が配列するような方法を教えてください

  • Excel VBA セル値の配列代入について

    Excel VBAで、セルの値を配列に代入する処理を、よくやります。 arr=Range("$A1:$C1000").value とかですね。これに関して、オートフィルタで絞り込んだ結果の可視セルだけを、配列に代入するということは、やっぱり出来ないのでしょうか。

  • セルに多次元配列の値を入力する方法

     Dim A as Variant A = Range(Cells(1,1),Cells(10,2)) としてセルのデータを配列変数に格納した場合  Range(Cells(1,2),Cells(10,2)) を  Range(Cells(1,3),Cells(10,3)) に入力するとき  Aを用いて一発で入力する方法はないですか?  今は For i = 1 to 10 cells(i,3) = A(i,2) Next  という方法しか思いつかないのですが時間がかかります。 良い方法があれば教えてください!

  • ある数字以上のセルを見つける方法

     エクセル2000でマクロを使っています。  例えば、1行目の全てのセルに1から10までのいずれかの数字が 入っている場合、5以上の数字が入っているセルを簡単に見つける 方法はありますか? ループを使って  for i = 1 to 255    if cells(1,i) >= 5 then    ~    end if  next という方法は考えられますが、例えば1行目だけでなく2000行目 まで同じようなことを繰り返す場合、時間がかかってしまうので・・・ どなたか詳しいかた教えてください。 よろしくお願いします!  

  • セルの数字を配列に格納するためのVBAソースは?

    どなたかご存知でしたらご教授願います。 以前、こちらの相談室にて、エクセルで「25C5」という組み合わせを作成するVBAソース を見つけました。これを少し改造して下記のようなソースにしました。 【25C5を作成するソース】 Sub test() Const MaxNum = 25 Dim s(25) As String s(1) = "9" s(2) = "10" s(3) = "19" s(4) = "23" s(5) = "25" s(6) = "8" s(7) = "17" s(8) = "22" s(9) = "24" s(10) = "31" s(11) = "6" s(12) = "7" s(13) = "16" s(14) = "18" s(15) = "21" s(16) = "4" s(17) = "14" s(18) = "15" s(19) = "29" s(20) = "30" s(21) = "2" s(22) = "12" s(23) = "13" s(24) = "27" s(25) = "28" Dim i, j, k, l, m Dim rowX As Long rowX = 1 rowX = rowX + 1 For i = 1 To MaxNum - 4 For j = i + 1 To MaxNum - 3 For k = j + 1 To MaxNum - 2 For l = k + 1 To MaxNum - 1 For m = l + 1 To MaxNum Cells(rowX, 1).Value = s(i) Cells(rowX, 2).Value = s(j) Cells(rowX, 3).Value = s(k) Cells(rowX, 4).Value = s(l) Cells(rowX, 5).Value = s(m) rowX = rowX + 1 Next m Next l Next k Next j Next i End Sub ここで質問ですが、上記ソースの配列は25個(S(1)~S(25))あります。 現在は上記ソースの配列1つずつに毎回直接数字を設定しております。 これが面倒くさいので、下記のようにセルに貼り付けをしたら、 それを自動で配列に格納して、上記ソースへと連動させるためのVBAソースは どうやって記述すればよいですか? 【セルに貼り付ける数字】 9     10     19    23     25 8     17     22    24     31 6     7      16    18     21 4     14     15    29     30 2     12     13    27     28 ●注意事項   (1)セルに貼り付ける数字の値は毎回異なりますが、5×5は毎回同じです。   (2)使用するエクセルは2010です。 以上

  • 配列を使わずに、数字(連番)を使用した変数に値を代入したい。

    配列を使わずに、数字(連番)を使用した変数に値を代入したい。 お世話になっております。 配列を使わずに、数字(連番)を使用した変数($a1,$a2,$a3・・・)に、 forループを使って、値を代入したい。 #================================= for($i;$i<10;$i++){ $a??? = 10; #←ここがわかりません。 } #================================= どなたかご存知の方、ご教授ください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • エクセルVBA 必要な数だけ配列を確保する方法は?

    Dim a(10,1)と宣言して、セルにある10個のデータを配列aに代入したいのですが、セルに何個のデータがあるかはプログラムを書いているときには分かりません。 セルにあるデータは、プログラムを走らせるとn個あることが分かります。 それからDim a(n,1)と宣言できれば、必要な数の配列が確保できるのですが、このように必要な数だけ配列を確保するにはどうすれば良いのでしょうか?

  • excelで、1つのセルに入っている複数の数字を合計するには?

    Excel(2002以降)で、たとえば  セルA1に 33,2,55,764  セルA2に 654,654,8,165,46 のように、カンマ区切りで数字が入っていて、 その数字の合計をB列に表示させるということは可能でしょうか? 試算用にB列・C列などを使い、結果をD列、などという方法でも大丈夫ですが、数字がいくつに分けられるかはわからない(極端な話100個や200個の可能性もある)ので、その分のセルを確保するのは無理です。 数字はいくつ入っているかはセルごとに違い、何も入っていない場合や1つしかない場合もあります。 カンマを+に置換して計算させるような関数があればできそうだと思ったのですが、ヘルプでは探しだせませんでした。 なにかいい方法があればお願いします。

  • 塗りつぶしたセルの対称となるセルの数字を抜き出す2

    いつもお世話になっております。 もう1つよろしければ回答をお願いいたします。 【質問】 添付図の様にA1~G30までに1~37迄の数字が重複有りで入っています。 それを、I2~O2の数字で検索します。 検索できたらそのセルを赤く塗り潰します。 赤く塗りつぶしたセルがD列以外の場合、 対称(A列の対称はG列、B列の対称はF列、C列の対象はE列)となる数字を I5から下に並べる方法が知りたいです。 【注意事項】 ・使用するエクセルは2016です。 ・I2~O2に入る数字は1~37迄で重複無しです。 ・添付図は途中の4行目迄のサンプルとなっております。 以上、よろしくお願いいたします。

専門家に質問してみよう