![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
No.4ベストアンサー
- 回答日時:
サンプルプログラムです
Option Explicit
Private Type wa
No As String
Data As String
End Type
Private Sub Command1_Click()
'サンプルの為の配列作成
Dim A(6) As wa
A(0).No = "No1": A(0).Data = "AAA"
A(1).No = "No1": A(1).Data = "BBB"
A(2).No = "No1": A(2).Data = "CCC"
A(3).No = "No2": A(3).Data = "DDD"
A(4).No = "No2": A(4).Data = "EEE"
A(5).No = "No3": A(5).Data = "FFF"
A(6).No = "No3": A(6).Data = "GGG"
'この下から、再配列
Dim B() As String '再配列用の配列
Dim i As Integer '1次元目
Dim j As Integer '2次元目
Dim k As Integer 'a配列のループ用
Dim w_key As String 'キー(No?)
Dim w_no As Integer '最終のNo
w_no = Val(Mid(A(UBound(A)).No, 3)) '最終のNoから数字のみ取り出す
ReDim B(1 To w_no, 0) '配列bの再宣言
w_key = ""
i = 0
For k = 0 To UBound(A) '配列aを最後までループ
If (w_key <> A(k).No) Then 'キーが変わったら
i = i + 1 '1次元の数を増やす
j = 0 '2次元を0に戻す
w_key = A(k).No '次のキーをセットする
Else 'キーが変わらなければ
j = j + 1 '2次元の数を増やす
End If
If (j > UBound(B, 2)) Then '配列Bの2次元の数よりjが大きくなったら
ReDim Preserve B(1 To w_no, j) '配列bの再宣言(格納されているデータをそのまま残す)
End If
B(i, j) = A(k).Data 'a→bに格納
Next k
'これより先はデバッグ用(イミディエイトウィンドウに表示されます)
For i = LBound(B) To UBound(B)
For j = LBound(B, 2) To UBound(B, 2)
Debug.Print CStr(i) & "," & CStr(j) & ":" & B(i, j)
Next j
Next i
End Sub
2次元配列の1次元目は1度宣言すると変更できません
redim a(1,2)と宣言後、redim a(1,3)は可能ですが、redim a(2,2)は不可能
言い換えると、No?の方は、数(?)がわかっていないといけないという事です。
No10までと分かっている場合は、
w_no = 10にするか、必要の無い場所は削除してください。
>行が何行あるのかがわかっていなく、
配列aはファイルなどから持ってくるのですか?
ファイルから持ってくる場合、No?の数が分からなければ、1度a配列に格納して、
bに再配列という形になると思います。
No.3
- 回答日時:
2次元配列を使ってはどうですか。
b(i,j)のjを「no」が変るとj=j+1にする。
a(k)を構成しなおすプログラムを組めば良い。
この型の回答は出ていますか?
この回答へのお礼
お礼日時:2002/11/07 16:05
最初は2次元配列・・・と思ったのですが、ユーザ定義の方がわかりやすかったので、
そちらを使うことにしました。
ご指導ありがとうございましたm(__)m
No.2
- 回答日時:
補足ありがとうございます。
あくまでも配列を使用したいのならば・・・
>行が何行あるのかがわかっていなく
要素数を確実に指定できないのであれば、Redimを使用して再定義しては如何でしょう?
'------------------------------------
Dim strArg() As String
・・・
'要素数が確定した地点で
Redim strArg(10,5) As String
・・・
'------------------------------------
↑こんな感じで。
場合によってはPreserve キーワードを入れる事も必要かもしれません。
説明不足や見当違いだったらご指摘願います(^-^;
No.1
- 回答日時:
どうやって上記のデータが配列になっているのかがいまいちよくわかりません。
追記してくださると嬉しいです(^-^;
配列でなければいけませんか?
>Noごとに処理をさせたい
select case文でNoを比較するという手もありますが。
それじゃなかったらユーザ定義型(Type型かな?)を使ってみては如何でしょう?
Type MyData
strNo as String ←文字型で"No1"とかって格納
strData as String ←文字型で"AAA"とかって格納
End Type
↑みたいな感じで。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- Visual Basic(VBA) VBAで大量データの処理 3 2022/11/15 21:53
- Excel(エクセル) EXCELで次の数式を教えてください。 5 2022/11/23 18:33
- Excel(エクセル) vba シート名の一覧を2列に分けるには 5 2023/04/24 08:56
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コンボボックスのインデックス...
-
構造体配列の特定のメンバーをF...
-
VB6のメモリ解放に関して
-
テキストボックの文字を一行ず...
-
VBA ブック呼び出しでの無限ループ
-
INPUT関数でのCSV読込がおかしい件
-
C#で作成したdllをVBScriptで使...
-
エクセル(VBA)の空白配列の削除...
-
DBから取得した値を配列へ代入する
-
VB6からの移行したいけど、VB.N...
-
COBOLの基本的な事なので...
-
構造体配列の一部初期化!!!
-
定数配列の書き方
-
OutOfMemoryExceptionの回避策...
-
VBAにて、配列のデータを一度に...
-
VB.NETにて、構造体へデータを...
-
エクセルでXY座標に並べられた...
-
VB.NETの配列とArrayListについ...
-
VBAでMODE関数をつくる
-
Segmentation Fault (メモリ制限?)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
vba フィルター 複数条件 3つ以...
-
Dir関数で読み取り順を操作でき...
-
Excel2010のinputboxで複数デー...
-
配列の中の最大値とそのインデ...
-
構造体配列の特定のメンバーをF...
-
COBOLの基本的な事なので...
-
構造体配列内の文字列検索のよ...
-
コンボボックスのインデックス...
-
エクセルでXY座標に並べられた...
-
エクセル(VBA)の空白配列の削除...
-
Redim とEraseの違いは?
-
定数配列の書き方
-
VB6のメモリ解放に関して
-
CheckBoxの配列化
-
複数のtextboxの処理を一括で行...
-
Excelのメモリ(配列)の上限は2G...
-
大量の変数を定義するにはどう...
-
OutOfMemoryExceptionの回避策...
おすすめ情報