No.1
- 回答日時:
コード言語は何を求めるのか不明なので文章にて。
例えば
・生徒達の5教科の点数を管理するなら、『生徒数、点数』の【2次元配列】で出来ますよね。それぞれ(特に教科数)は一定ですし。
・そうではなく毎日の食材等の買い出しを管理するなら、『日付、食材等の数』において『食材等の数』は日によって違いますよね。
そうした【1次元(日付)】に対して【総数が変化する分】を管理したい場合に、私はジャグ配列『配列の配列』を使いますね。
例えばVB.Netで言うとしたら、Dictionaryクラスの【キー】を日付とするなら【値】にはListクラスを用いるとかです。
VBAであればDictionaryオブジェクトの【キー】に日付を【値】に.NET FrameworkのSystem.Collections.ArrayListクラスを用いるとか。
No.3
- 回答日時:
こんばんは。
ジャグ配列というのは、多段階配列の一種ですが、Excelでは、一般的なもので、表の構造をそのまま写し取れば、シャグ配列になります。配列の中にまた配列があるようなもののです。
添付画像でみたとおり、縦横格子のマトリックス状になっています。
myArr =Range("A1:D3").Value
● 表を表のままに一気に取り扱う時は便利です。
myPoint = myArr(2, 3)
は、データが、A1から始まっていれば、myArr(2,3)は、2列の3行目、つまり、B3を表します。
事実上、2次元配列ですから、そのまま扱わない限りは、1次元に戻して扱ったほうが早かったりします。
No.4
- 回答日時:
No.1です。
私の不勉強ですかね?
No.3さんの
>myPoint = myArr(2, 3)
って多次元配列とは違うのでしょうか?
てっきりジャグ配列って(例題がC#で申し訳ないですが)
int[][] myArr = new int[][]{
new int[]{1,2,3},
new int[]{1,2,3,4},
new int[]{1,2}};
textBox1.Text = myArr[1][3].ToString(); // 4 が表示(Indexは0から始まるのでそれぞれが-1の位置になる)
こうゆうものかと思いこんでました。
No.5
- 回答日時:
> ジャグ配列とはどういうときに使用するのか
多次元配列で、各次元の要素数が定まらない場合に良く使用します。
データを要素として追加していくので最終的に要素が幾つになるかわからない場合とか?
例えば学校の全生徒の情報を配列に読み込ませて、何かを行いたい場合とか(実際にそういうケースがあるかは知りません)
data = Array() '空の配列を作成
データ読み込み
data(grade)(class)(id)で各データにアクセス
grade:学年番号
class:クラス番号
id:生徒の番号
当然、各学年のクラス数、各クラスの生徒数は異なります。
> てっきりジャグ配列って
私もNo.4さんと同じ認識です。
だからセル上に作成した表などのデータを処理する場合にはあまり使わないのではないかと思います。
> ジャグ配列
> 配列の配列」の場合、内側の配列について、要素数が揃っていることを要求しないデータ構造であることもある。ジャグ配列 (jagged array)、不規則配列などと言う。
https://ja.wikipedia.org/wiki/%E9%85%8D%E5%88%97 …
VBAだとこんな感じ?
Dim ary As Variant
ary = Array(Array(1, 2, 3), _
Array(4, 5, 6, 7), _
Array(8, 9))
MsgBox UBound(ary) ' -> 2
MsgBox UBound(ary(0)) ' -> 2
MsgBox UBound(ary(1)) ' -> 3
MsgBox UBound(ary(2)) ' -> 1
MsgBox ary(0)(0) ' -> 1
MsgBox ary(1)(0) ' -> 4
MsgBox ary(2)(0) ' -> 8
ReDim Preserve ary(UBound(ary) + 1)
ary(UBound(ary)) = Array(10, 11)
MsgBox ary(3)(0) ' -> 10
ListやArrayListがVBAで使用できるということを初めて知りました。いままでは類似のクラスを定義して使用していました。今度試してみます。(確かにReDimは煩わしいですね)
No.6
- 回答日時:
No.4です。
No,5さんへ
>ListやArrayListがVBAで使用できるということを初めて知りました。
私も書いててVBAとVBでごっちゃになりましたが、VBAで使えたのは
System.Collections.ArrayList
System.Collections.SortedList
などですね。(しかも古い.NET 2.0位までのGenericではない方です。なので最新のOSだと古い.NET Frameworkが必要かも)
ListクラスはGenericなので撃沈しました。
No.9
- 回答日時:
No.4のお礼について。
>C#はエクセルで使用できるのでしょうか。
ん~、まだ経験はしていませんが。
やりたい作業をdllと言う拡張子のファイルに纏めて作成しておき、
そこに対して値を与え結果を得る事は可能なのかも知れません。
ただVBA自体が古いVBに近いのでもしかすると今の.NET以前の
VBかVC++などの方になるかもです。
C#(VC#)は.NETになって以降出てきた物のはずですので。
それにこれまで記載したのはVisualStudioと言う開発環境の中の言語というより、
基盤となる.NET Frameworkが持つ機能の一部を使っているだけです。
でもMicrosoftも最新の機能をVBAで使えるようにとはしていなく、あくまで初期の頃のほんの一部にしか過ぎません。
(私は古いMicrosoftOfficeしかないので検証した訳ではないのですが、多分そうだと思います。それに今後はPythonになるとかなんとか話も聞こえてきますし。)
No.10
- 回答日時:
質問はサンプルでしたっけ。
取り敢ず私は通常の使い方はしていなく(文字列型とか数値型とか)なので今回はDictionaryオブジェクトと.NET Frameworkの ArrayList と組み合わせたモドキな物を
書きました。
データと結果は画像にて。
分類と名称がバラバラに並んでいたとして、分類毎に横並びに換える物です。
Sub megu()
Dim Dic As Object
Dim r1 As Range, r2 As Range
Dim i As Integer, key
Set Dic = CreateObject("Scripting.Dictionary")
For Each r1 In Range("A1", Cells(Rows.Count, 1).End(xlUp))
If Not Dic.exists(r1.Value) Then Dic.Add r1.Value, CreateObject("System.Collections.ArrayList")
Dic(r1.Value).Add (r1.Offset(, 1).Value)
Next
Set r2 = Range("D1")
For Each key In Dic.Keys
r2.Value = key
Set r2 = r2.Offset(1)
For i = 0 To Dic(key).Count - 1
r2.Offset(, i + 1).Value = Dic(key)(i) ' ジャグ配列モドキ
Next
Set r2 = r2.Offset(2)
Next
Set Dic = Nothing
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 PCとスマホのテンキー配列の違いの由来は? 2 2023/08/19 11:03
- Ruby 初心者プログラミング 3 2022/10/12 11:31
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Visual Basic(VBA) マクロについて教えてください。 4 2023/06/06 09:06
- Perl perlで2次元配列をサブルーチンに値渡しで渡す 5 2022/12/17 18:49
- 写真 写真(画像)編集スキルを質問する時 1 2022/12/07 14:14
- C言語・C++・C# C言語 配列とポインタについて 2 2022/06/02 11:53
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- 格安スマホ・SIMフリースマホ 楽天モバイルスマホを使用しているのですが、毎回画面上に、刃物のカタログが出てきます。買ったこともない 3 2022/12/25 21:47
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで配列の計算
-
EXCEL VBA で、0から?1から?
-
IF関数でEmpty値を設定する方法。
-
変数を動的に作るには?
-
VBで作った乱数を一度も重複さ...
-
複数のテキストボックスに同じ...
-
動的配列と固定長配列の違いに...
-
動的配列が存在(要素が有る)か...
-
C言語のread関数に関するファイ...
-
2次元配列の、黒いマス目で囲...
-
キーボード
-
Excel VBA 多段階配列の宣言の仕方
-
【MFC】GetCount()とGetSize()...
-
配列プロパティをREDIMする方法...
-
MicroSoft BasicのDim文とVisua...
-
配列をリサイズする
-
4次元配列を2次元配列にするには?
-
VB.net 引数で配列変数を渡す際...
-
配列にnullを代入すると、null...
-
ループ処理の際、最後だけ","を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
IF関数でEmpty値を設定する方法。
-
パソコンキーボードで時分秒を...
-
VBAで配列の計算
-
EXCEL VBA で、0から?1から?
-
変数を動的に作るには?
-
VB.net 引数で配列変数を渡す際...
-
動的配列が存在(要素が有る)か...
-
VBで作った乱数を一度も重複さ...
-
配列の要素数を超えた参照のコ...
-
複数のテキストボックスに同じ...
-
C言語 重複しない4ケタの乱数...
-
javaプログラムについて
-
C#の質問
-
Visual C++ でコントロールを...
-
遅延バインディングを使用でき...
-
Excel VBAで配列の途中から(X)M...
-
排列と配列の漢字の使い分けは
-
For文と配列
-
VBでbyte配列型のインスタンス...
-
C言語で3次元配列の課題をして...
おすすめ情報