配列から不要な列を削除します
エクセルVBAでの内容です。
シートの表を2次元配列に入れて、その後に不要な列を削除したい時にこのコードを使います。
Function 配列の列を削除(myArray As Variant, arrayDeleteCol As Variant)
'配列から対象の列を削除する
Dim deleteColCount As Long
Dim arrayRemove
Dim col As Long
Dim row As Long
Dim delColCnt As Long
Dim isDelCol As Boolean
Dim ary
'削除する列の数
deleteColCount = UBound(arrayDeleteCol) - LBound(arrayDeleteCol) + 1
'削除する列数分だけ減らした配列をつくる
ReDim arrayRemove(LBound(myArray, 1) To UBound(myArray, 1), LBound(myArray, 2) To UBound(myArray, 2) - deleteColCount)
For col = LBound(myArray, 2) To UBound(myArray, 2)
'削除対象の列か確認
isDelCol = False
For Each ary In arrayDeleteCol
If ary = col Then
isDelCol = True
Exit For
End If
Next
' 削除対象の列だったら一つ右の内容をずらして入れる
If isDelCol Then
' 削除するので一列分プラスする
col = col + 1
' 削除した回数だけ調整するので足していく
delColCnt = delColCnt + 1
' 最終列が削除対象の時にarrayRemoveの方が範囲が小さいので
' 何もせずに飛ばして終わる
If UBound(arrayRemove, 2) < col - delColCnt Then Exit For
For row = LBound(myArray, 1) To UBound(myArray, 1)
arrayRemove(row, col - delColCnt) = myArray(row, col)
Next
' 削除のため調整した列を戻す
col = col - 1
Else
For row = LBound(myArray, 1) To UBound(myArray, 1)
arrayRemove(row, col - delColCnt) = myArray(row, col)
Next
End If
Next
配列の列を削除 = arrayRemove
End Function
使う時の例
こんな表があったとして
※個人情報テストデータジェネレーターです
https://testdata.userlocal.jp/
Sub 使う時の例()
Dim myArray
Dim deleteArray
myArray = ActiveSheet.Range("A1").CurrentRegion
deleteArray = Array(3, 4)
myArray = 配列の列を削除(myArray, deleteArray)
ThisWorkbook.Worksheets("Sheet2").Range("A1").Resize(UBound(myArray, 1), UBound(myArray, 2)) = myArray
End Sub
この場合だとdeleteArray = Array(3, 4)
で「年齢、生年月日」を削除指定しているので、このようになります。
列はEnumとかにしておけば、削除したい列を指定しやすいかもです。
こういう時は、列名をそのまま日本語で使う派です。
col.
でインテリセンスきいて日本語出てくれるのが分かりやすいので。
deleteArray = Array(col.年齢, col.性別)
みたいに。
Enum col
氏名 = 1
ひらがな
年齢
生年月日
性別
血液型
End Enum