0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AutoCAD VBA 選択フィルタ (3) - FilterDataを作るFunction -

Last updated at Posted at 2025-04-14

はじめに

SelectionSet.Selectメソッドや .SelectOnScreenメソッドでは、選択フィルタを設定することが可能です。公式ヘルプのサンプルコードの作り方では毎回書くのが面倒なので、それならFunctionプロシージャ化してしまおうというのが今回の目的です。前回はFilterTypeについて解説しました。今回はFilterDataについて解説します。

FilterData(Variant型配列)を作るFunction

概要

  • 配列の要素は、コンマ区切りテキストを入力し、Split関数を使って配列化します
  • 配列の各要素が数値などと見做せるか判定後、型変換したりしなかったりして別の配列に格納します
  • 戻り値となる配列は Selectメソッド等の引数なので、Variant型とします

戻り値となる配列の要素について

上記の「グループ コードの値のタイプ リファレンス(DXF)」にあるように、各要素には、String型、Integer型、Long型、LongLong型、Double型、Boolean型が格納されます。

今回のサンプルコードには、LongLong型とBoolean型への型変換は含んでいません。また、角度はDouble型のラジアンである必要がありますが、これも含んでいません。

コード

AutoCAD VBA - FilterDataを作成するFunction
Public Function uMakeFilterData(ByVal aTextByComma As String) As Variant
  
  Dim uFilterTypeArrayStr   As Variant ' Split関数の結果を格納する配列
  Dim uFilterTypeArrayVar() As Variant ' 様々な型の要素を格納する動的配列
  
  ' Splitで配列化(要素はすべてString値) ※添え字の最小値は 0
  uFilterTypeArrayStr = Split(Expression:=aTextByComma, Delimiter:=",")
  
  ' 動的配列の要素数確定
  ReDim uFilterTypeArrayVar(UBound(uFilterTypeArrayStr))
  
  ' 配列の要素を文字列以外は型変換して動的配列に移す
  For n = LBound(uFilterTypeArrayStr) To UBound(uFilterTypeArrayStr)
    ' 要素が数値か否か
    If IsNumeric(uFilterTypeArrayStr(n)) = True Then
      ' 数値の場合:小数点を含むか否か
      If InStr(uFilterTypeArrayStr(n)) > 0 Then
        ' 小数点を含む:→ Double型
        uFilterTypeArrayVar(n) = CDbl(uFilterTypeArrayStr(n))
      Else
        ' 小数点を含まない:→ Long型
        uFilterTypeArrayVar(n) = CLng(uFilterTypeArrayStr(n))
      End If
    Else
      ' 要素が数値でない:→ Variant型
      uFilterTypeArrayVar(n) = CVar(uFilterTypeArrayStr(n))
    End If
  Next

  ' 戻り値
  uMakeFilterData = uFilterTypeArrayVar

End Function

おわりに

前回と今回でSelectionSet.Selectメソッド等の引数となるFilterTypeとFilterDataの配列を作るFunctionの解説をしました。角度の判定については、皆さん工夫してみてください。気が向いたら私のやり方を載せるかも……

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?