ChatGPTでVBAを学ぶ
配列について聞いてみた その2
30個の使い方の紹介がありましたが、6回に分けてご紹介します
6.動的な多次元配列の使用:この例では、動的な多次元配列を宣言し、行数と列数を指定して配列を作成します。その後、値を設定し、ループ処理を使用して値を取得して表示します。動的な配列を使用すると、プログラム実行時に配列のサイズを動的に変更できるため、柔軟性が向上します。
Dim rows As Integer, cols As Integer
rows = 3 ' 行数を設定
cols = 4 ' 列数を設定
Dim dynamicMatrix() As Integer ' 動的な多次元配列を宣言
ReDim dynamicMatrix(1 To rows, 1 To cols) ' 行数と列数を指定して配列を作成
' 値を設定
dynamicMatrix(1, 1) = 10
dynamicMatrix(1, 2) = 20
dynamicMatrix(2, 1) = 30
dynamicMatrix(2, 2) = 40
' 値を取得して表示
Dim i As Integer, j As Integer
For i = 1 To rows
For j = 1 To cols
MsgBox "行 " & i & " 列 " & j & " の値は " & dynamicMatrix(i, j) & " です。"
Next j
Next i
7.配列関数の使用:VBAには、配列を操作するための便利な関数も用意されています。以下はその一例です。
これらの関数を使用すると、配列の合計や最大値などを簡単に計算できます。他にも平均値や中央値など、さまざまな統計関数が利用できます。
Dim myArray(3) As Integer
myArray(0) = 10
myArray(1) = 20
myArray(2) = 30
myArray(3) = 40
‘ 配列の合計を計算
Dim total As Integer
total = WorksheetFunction.Sum(myArray)
MsgBox “配列の合計は ” & total & ” です。”
‘ 配列の最大値を取得
Dim maxVal As Integer
maxVal = WorksheetFunction.Max(myArray)
MsgBox “配列の最大値は ” & maxVal & ” です。”
8.配列のソート:配列の要素を並び替えることは、データの分析や処理においてよく使用されます。
この例では、バブルソートアルゴリズムを使用して配列を昇順でソートしています。ソートされた配列を表示するためのループと、バブルソートのサブルーチンが含まれています。
Dim myArray(4) As Integer
myArray(0) = 30
myArray(1) = 10
myArray(2) = 50
myArray(3) = 20
myArray(4) = 40
' 配列を昇順でソート
Call BubbleSort(myArray)
' ソートされた配列を表示
Dim i As Integer
Dim sortedArray As String
sortedArray = "ソートされた配列: "
For i = LBound(myArray) To UBound(myArray)
sortedArray = sortedArray & myArray(i) & ", "
Next i
MsgBox sortedArray
' バブルソートのサブルーチン
Sub BubbleSort(arr() As Integer)
Dim i As Integer, j As Integer
Dim temp As Integer
For i = LBound(arr) To UBound(arr) - 1
For j = LBound(arr) To UBound(arr) - i - 1
If arr(j) > arr(j + 1) Then
temp = arr(j)
arr(j) = arr(j + 1)
arr(j + 1) = temp
End If
Next j
Next i
End Sub
9.配列の検索:配列内の特定の値を検索することも重要です。
この例では、特定の値を配列内で検索しています。もし値が見つかれば、そのインデックスを表示し、見つからなければメッセージを表示します。
Dim myArray(4) As Integer
myArray(0) = 30
myArray(1) = 10
myArray(2) = 50
myArray(3) = 20
myArray(4) = 40
Dim searchValue As Integer
searchValue = 20
Dim i As Integer
Dim foundIndex As Integer
foundIndex = -1 ' 初期値は見つからなかった場合のために設定
' 配列をループして検索
For i = LBound(myArray) To UBound(myArray)
If myArray(i) = searchValue Then
foundIndex = i ' 値が見つかったらそのインデックスを記録
Exit For ' 一致したらループを終了
End If
Next i
If foundIndex <> -1 Then
MsgBox "値 " & searchValue & " は配列のインデックス " & foundIndex & " にあります。"
Else
MsgBox "値 " & searchValue & " は配列内に見つかりませんでした。"
End If
10.配列の結合:複数の配列を結合して新しい配列を作成することができます。
この例では、2つの配列 array1 と array2 を結合して新しい配列 combinedArray を作成しています。その後、結合された配列を表示しています。
Dim array1(2) As Integer
array1(0) = 10
array1(1) = 20
array1(2) = 30
Dim array2(2) As Integer
array2(0) = 40
array2(1) = 50
array2(2) = 60
Dim combinedArray() As Integer
ReDim combinedArray(1 To UBound(array1) + UBound(array2) + 2) ‘ 結合された配列のサイズを設定
Dim i As Integer, j As Integer
‘ array1の要素を結合配列にコピー
For i = LBound(array1) To UBound(array1)
combinedArray(i) = array1(i)
Next i
‘ array2の要素を結合配列にコピー
For j = LBound(array2) To UBound(array2)
combinedArray(i + j) = array2(j)
Next j
‘ 結合された配列を表示
Dim combinedString As String
combinedString = “結合された配列: “
For i = LBound(combinedArray) To UBound(combinedArray)
combinedString = combinedString & combinedArray(i) & “, “
Next i
MsgBox combinedString
その2は、ここまでになります
いかがでしたでしょうか、追加の質問で、さらに具体的な回答が得られたのではないでしょうか
これでもわからないときは、見方をかえた質問で分かるまで問い詰めてください
何度聞いても嫌がることなく答えてくれるところが、chatGPTの良さでもあります
chatGPTに触れてみたい方があれば、メールお問い合わせくださいませ