48本目 配列と数値型

VBA100本ノック

VBA100本ノック 48本目を動画で解説しています。Excelの神髄さんの模範解答はコチラ


問題

#VBA100本ノック48本目
引数が1次元または2次元配列の場合、以下の処理を行いVariantで返すFunctionを作成。
xxx (v as Variant) As Variant
・数値型は整数部のみにする(1.5→1, -1.5→-1)
・数値型以外(文字列、日付、その他)はそのまま
※配列以外と3次元配列以上もそのまま返してください。

解答

Sub test1()

    Dim rng, ary
    Set rng = Range("A1").CurrentRegion
    ary = rng
    rng.Offset(rng.Row + 2) = ノック48本目(ary)

End Sub

Function ノック48本目(v As Variant) As Variant
    
    Dim i, j
    On Error Resume Next
    Select Case これは何次元配列ですか(v)
        Case 1  '1次元配列の中の数値を切り捨て
            For i = LBound(v, 1) To UBound(v, 1)
                v(i) = Fix(v(i))
            Next i
        
        Case 2  '1、2次元配列の中の数値を切り捨て
            For i = LBound(v, 1) To UBound(v, 1)
                For j = LBound(v, 2) To UBound(v, 2)
                    v(i, j) = Fix(v(i, j))
                Next j
            Next i
    End Select
    
    ノック48本目 = v

End Function


Function これは何次元配列ですか(v As Variant) As Long
 
    On Error Resume Next
    Dim 次元数 As Long
    次元数 = 0
    
    Dim 最大要素数 As Long
    
    Do While Err.Number = 0
        次元数 = 次元数 + 1
        最大要素数 = UBound(v, 次元数)
    Loop
 
    これは何次元配列ですか = 次元数 - 1
 
End Function
新人君
新人君

難しそうな問題ですね!

ブチョ
ブチョ

いやいや超ラッキー問題だろ!(笑)

新人君
新人君

ホンマか…?

コメント

タイトルとURLをコピーしました