[1] 配列を使用のときは、必ず宣言が必要です。 [2] 配列の宣言は「Dim(インデックス最大値)」で行う。 (aa(100) As Integer 、aa(5 To 100) As Integer の指定方法があります) [3] 配列の型宣言は変数と同じです。宣言をしない場合はバリアント型です。 [4] 配列のインデックスは「0」から始まります。 (モジュールシートの先頭に「Option Base 1」と記載すればインデックスは1から始まります。 なお、aa(5 To 100) As Integer と宣言ではは5が先頭) |
Sub 配列1_1() Dim da(5, 100) As String da(1, 1) = "AAA" For i = 0 To 5 For j = 0 To 100 da(i, j) = "" Next Next MsgBox "データチェック(" & da(1, 1) & ")" End Sub -------------------------------------------------------- Sub 配列1_2() ReDim da(5, 100) As String da(1, 1) = "AAA" ReDim da(5, 100) As String MsgBox "データチェック(" & da(1, 1) & ")" End Sub -------------------------------------------------------- Sub 配列1_3() Dim da(5, 100) As String da(1, 1) = "AAA" Erase da MsgBox "データチェック(" & da(1, 1) & ")" End Sub |
Sub 配列2() Dim dat(2) As String Dim datstr As String dat(0) = "ABC" dat(1) = "DEF" dat(2) = "GHI" datstr = Join(dat) & vbCrLf '結果→ABC DEF FHI datstr = datstr & Join(dat, "") & vbCrLf '結果→ABCDEFFHI datstr = datstr & Join(dat, "|") '結果→ABC|DEF|FHI MsgBox datstr End Sub |
※区切り文字の指定を省略した場合は半角スペースが区切り文字となります |
Sub 配列3() Dim w As Integer Dim week As Variant week = Array("日", "月", "火", "水", "木", "金", "土") hia = InputBox("「年/月/日」を入力して下さい") If IsDate(hia) Then hi = CDate(hia) hi = Format(hi, "yyyy""年""mm""月""dd""日""") Else MsgBox "「年/月/日」を入力して下さい" Exit Sub End If w = Weekday(hi) MsgBox hi & " は " & week(w - 1) & "曜日です" End Sub |
Sub 配列5() Dim txtpas As String 'サンプルtxtファイル保存場所 Dim dat(224, 1) As String '2次配列宣言 Dim i As Integer 'カウンター ThisWorkbook.Sheets("Sheet1").Select Application.ScreenUpdating = False txtpas = ThisWorkbook.Path & "\" & "Listsanple.txt" txtデ−タ取り込み i = 0 Open txtpas For Input As #1 Do Until EOF(1) Input #1, dat(i, 0), dat(i, 1) i = i + 1 Loop Close #1 r = UBound(dat, 1) c = UBound(dat, 2) セルへ書き込み Cells(1, 1) = "銘柄コード": Cells(1, 2) = "名称": Range(Cells(2, 1), Cells(i + 1, 2)).Value = dat Range(Cells(2, 1), Cells(r + 2, c + 1)).Value = dat End Sub |
Sub 配列6_1() Dim dat(10) As Integer dat(1) = 3: dat(2) = 1: dat(3) = 8: dat(4) = 0: dat(5) = 9 'サンプル数字 dat(6) = 4: dat(7) = 2: dat(8) = 5: dat(9) = 7: dat(10) = 6 For j = 1 To 10 For r = j + 1 To 10 If dat(j) > dat(r) Then datm = dat(j) dat(j) = dat(r) dat(r) = datm End If Next Next MsgBox dat(1) & " " & dat(2) & " " & dat(3) & " " & dat(4) & " " & dat(5) _ & " " & dat(6) & " " & dat(7) & " " & dat(8) & " " & dat(9) & " " & dat(10) End Sub |
Sub 配列6_2() Dim dat As Variant dat = Array(3, 1, 8, 0, 9, 4, 2, 5, 7, 6) 'サンプル数字 For j = 0 To 9 For r = 9 To j Step -1 If dat(j) < dat(r) Then datm = dat(j) dat(j) = dat(r) dat(r) = datm End If Next Next MsgBox dat(0) & " " & dat(1) & " " & dat(2) & " " & dat(3) & " " & dat(4) _ & " " & dat(5) & " " & dat(6) & " " & dat(7) & " " & dat(8) & " " & dat(9) End Sub |
Sub 配列6_3() Dim dat As Variant dat = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "") 'サンプル文字 For J = 9 To 3 Step -1 dat(J + 1) = dat(J) Next dat(3) = "x" MsgBox dat(0) & " " & dat(1) & " " & dat(2) & " " & dat(3) & " " & dat(4) _ & " " & dat(5) & " " & dat(6) & " " & dat(7) & " " & dat(8) & " " & dat(9) End Sub |
Sub 配列6_4() Dim dat As Variant dat = Array("A", "B", "C", "D", "E", "", "F", "G", "H", "I", "J") 'サンプル文字 For i = 0 To 9 If dat(i) = "" Then For j = i To 9 dat(j) = dat(j + 1) Next End If Next MsgBox dat(0) & " " & dat(1) & " " & dat(2) & " " & dat(3) & " " & dat(4) _ & " " & dat(5) & " " & dat(6) & " " & dat(7) & " " & dat(8) & " " & dat(9) End Sub |
Sub 配列6_5() Dim dat As Variant dat = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", _ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", _ "A", "B", "C", "D", "E", "F", "G", "H", "I", "J") For i = 1 To 30 C = (i - 1) Mod 5 + 1 r = (i - 1) \ 5 + 1 Cells(r, C) = dat(i - 1) Next End Sub |
Sub 配列7() Dim i As Integer Dim haiur As Variant haiur = Split(Cells(1, 2), "/") On Error Resume Next Do Cells(i + 3, 1) = i Cells(i + 3, 2) = haiur(i) If Err = 9 Then Exit Do i = i + 1 Loop Cells(i + 3, 1) = "" haiur(0) = "": haiur(1) = "": haiur(2) = "C:\2第2HP" Cells(i + 5, 2) = Mid(Join(haiur, "\"), 3) Cells(i + 5, 1) = "PC上URL⇒" End Sub |
Split 関数は、各要素ごとに区切られた文字列から 1次元配列を作成し返します。たとえば、文字の 区切りを識別する文字として("/")を指定した場合は、("/")区切りごとに配列へ代入します。 (使用例は配列7プロシージャに示す)。なお、区切りを識別する文字を省略した場合は、区切り 文字にスペース("")が使用されます。 |
下記例は、HTTPオブジェクトでWebページのソースを、文字変数dathamlへ代入し、それを vbCrLf(キャリーリターンとラインフィード)の区切りを識別し一次配列に変換しセルへ表示した例 tmp = Split(dathaml, vbCrLf) For i = 1 To UBound(tmp) Cells(i, 1) = tmp(i) Next ただし、vbCrLfで識別できないWebページがあったが、tmp = Split(dathaml, Chr(10))のASCII コードで指定したら上手く行ったケースがあった。 |