Created
April 1, 2025 08:22
-
-
Save YujiFukami/c7a142fca1f6c5656ec60aab720d6552 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'PushValueArray2DRow・・・元場所:IkiAddin.ModArray | |
'ExpandArray2DRow ・・・元場所:IkiAddin.ModArray | |
'IsArray2D ・・・元場所:IkiAddin.ModArray | |
'IsArray2DStart1 ・・・元場所:IkiAddin.ModArray | |
Public Function PushValueArray2DRow(ByRef Array2D As Variant, _ | |
ParamArray Values() As Variant) _ | |
As Variant | |
'二次元配列の行方向に値を追加する | |
'20240324 | |
'20241124 要素がオブジェクトでも対応可能に | |
'https://www.softex-celware.com/post/pushvaluearray2drow | |
'引数 | |
'Array2D・・・対象の二次元配列 | |
'Values ・・・追加する要素の値を可変長引数配列で複数入力 | |
Dim ColCount As Long: ColCount = UBound(Values, 1) + 1 | |
Dim Output As Variant | |
Dim MaxRow As Long | |
If IsEmpty(Array2D) = True Then | |
ReDim Output(1 To 1, 1 To ColCount) | |
MaxRow = 1 | |
Else | |
Output = ExpandArray2DRow(Array2D, 1) | |
MaxRow = UBound(Output, 1) | |
End If | |
Dim I As Long | |
For I = 1 To ColCount | |
If IsObject(Values(I - 1)) = False Then '20241124 | |
Output(MaxRow, I) = Values(I - 1) | |
Else | |
Set Output(MaxRow, I) = Values(I - 1) | |
End If | |
Next | |
'出力 | |
PushValueArray2DRow = Output | |
End Function | |
Private Function ExpandArray2DRow(ByRef Array2D As Variant, _ | |
Optional ByRef AddRow As Long = 1) _ | |
As Variant | |
'二次元配列の最終行の後ろに行を追加する。 | |
'20211103 | |
'20241124 要素がオブジェクトでも対応可能に | |
'https://www.softex-celware.com/post/expandarray2drow | |
'引数 | |
'Array2D ・・・二次元配列 | |
'[AddRow]・・・追加する行の個数/省略なら1 | |
'返り値 | |
'二次元配列の最終行の後ろに行が追加された二次元配列 | |
'引数チェック | |
If IsArray2D(Array2D) = False Then Exit Function '二次元配列かチェック | |
If IsArray2DStart1(Array2D) = False Then Exit Function '開始要素番号が1かチェック | |
If AddRow <= 0 Then | |
MsgBox "AddRowは1以上の値を入力してください", vbExclamation | |
Stop | |
Exit Function | |
End If | |
'処理 | |
Dim I As Long | |
Dim J As Long | |
Dim N As Long: N = UBound(Array2D, 1) '縦要素数 | |
Dim M As Long: M = UBound(Array2D, 2) '横要素数 | |
Dim Output As Variant: ReDim Output(1 To N + AddRow, 1 To M) '出力する二次元配列 | |
For I = 1 To N | |
For J = 1 To M | |
If IsObject(Array2D(I, J)) = False Then '20241124 | |
Output(I, J) = Array2D(I, J) | |
Else | |
Set Output(I, J) = Array2D(I, J) | |
End If | |
Next J | |
Next I | |
'出力 | |
ExpandArray2DRow = Output | |
End Function | |
Private Function IsArray2D(ByRef Array2D As Variant, _ | |
Optional ByRef ArrayName As String = "Array2D") _ | |
As Boolean | |
'入力配列が二次元配列かどうかチェックする | |
'20210804 | |
'20220309 変数名変更 | |
'20241230 Functionプロシージャにして判定結果を返す | |
'https://www.softex-celware.com/post/isarray1d | |
'引数 | |
'Array2D ・・・チェックする配列 | |
'[ArrayName]・・・エラーメッセージで表示する時の名前 | |
On Error Resume Next | |
Dim Dummy2 As Long: Dummy2 = UBound(Array2D, 2) | |
Dim Dummy3 As Long: Dummy3 = UBound(Array2D, 3) | |
On Error GoTo 0 | |
If Dummy2 = 0 Or Dummy3 <> 0 Then | |
MsgBox ArrayName & "は二次元配列を入力してください", vbExclamation | |
Stop 'エラーを確認するために一度停止する | |
Exit Function 'Falseが返ってくる | |
End If | |
'出力 | |
IsArray2D = True | |
End Function | |
Private Function IsArray2DStart1(ByRef Array2D As Variant, _ | |
Optional ByRef ArrayName As String = "Array2D") _ | |
As Boolean | |
'入力二次元配列の開始番号が1かどうかチェックする | |
'20210804 | |
'20220309 変数名変更 | |
'20241230 Functionプロシージャにして判定結果を返す | |
'https://www.softex-celware.com/post/isarray1d | |
'引数 | |
'Array2D ・・・チェックする二次元配列 | |
'[ArrayName]・・・エラーメッセージで表示する時の名前 | |
If LBound(Array2D, 1) <> 1 Or LBound(Array2D, 2) <> 1 Then | |
MsgBox ArrayName & "の開始要素番号は1にしてください", vbExclamation | |
Stop 'エラーを確認するために一度停止する | |
Exit Function 'Falseが返ってくる | |
End If | |
'出力 | |
IsArray2DStart1 = True | |
End Function | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment