MW211 EXIT

devlog
ExcelVBA/二次元配列の行抽出
2018年07月01日
セル範囲を二次元配列に格納して、特定の列の特定の値の行のみ抽出する関数。
もっとスマートな方法がありそうだが。
┌──────────────────────────────────────┐
│Private Function 二次元配列行抽出(ByVal 入力配列 As Variant, _              │
│                                  ByVal x抽出 As Long, _                    │
│                                  ByVal 値 As String) As Variant            │
│    Dim 出力配列 As Variant                                                 │
│    Dim y出力 As Long, y入力 As Long, x As Long                             │
│    ' 該当件数調査                                                          │
│    y出力 = 0                                                               │
│    For y入力 = LBound(入力配列, 1) To UBound(入力配列, 1)                  │
│        If 入力配列(y入力, x抽出) = 値 Then                                 │
│            y出力 = y出力 + 1                                               │
│        End If                                                              │
│    Next y入力                                                              │
│    ' 該当なしの場合は空の一行を返却                                        │
│    If y出力 = 0 Then                                                       │
│        ReDim 出力配列(1, 1 To UBound(入力配列, 2))                         │
│        二次元配列行抽出 = 出力配列                                         │
│        Exit Function                                                       │
│    End If                                                                  │
│    ' 抽出                                                                  │
│    ReDim 出力配列(1 To y出力, 1 To UBound(入力配列, 2))                    │
│    y出力 = 0                                                               │
│    For y入力 = LBound(入力配列, 1) To UBound(入力配列, 1)                  │
│        If 入力配列(y入力, x抽出) = 値 Then                                 │
│            y出力 = y出力 + 1                                               │
│            For x = LBound(入力配列, 2) To UBound(入力配列, 2)              │
│                出力配列(y出力, x) = 入力配列(y入力, x)                     │
│            Next x                                                          │
│        End If                                                              │
│    Next y入力                                                              │
│    二次元配列行抽出 = 出力配列                                             │
│End Function                                                                │
└──────────────────────────────────────┘
分類:ExcelVBA