| [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 コードで指定したら上手く行ったケースがあった。 |