Option Explicit Option Base 0 Private Sub CommandButton1_Click() 'ジェスチャーモードの場合、インクが時間経過で消えてしまい、 '解析中に元のインクが Deleted になることがあります。 'それを避けるため、列挙前にあらかじめ元のインクを複製しておきます。 Dim Ink As InkDisp Set Ink = InkPicture1.Ink.Clone() 'インクデータ内のストロークを解析して Sheet1 に表示します。 Sheet1.Cells.Clear Dim st As IInkStrokeDisp Dim points() As Long, matrix() As Long Dim x As Integer, y As Integer x = 1 For Each st In Ink.Strokes 'GetPoints メソッドは、プロットされた座標群のうち、 'Index 番目か始まる Count 組までの座標を 'X1,Y1,X2,Y2,…形式な Long 型の一次元配列で返します。 ' '引数 Count:=3 を指定すれば 3 組となり、 'points(0)~points(5) の 6 つの値が返されます。 ' '引数を省略した場合(Index:=ISC_FirstElement, Count:=AllElements)は、 '全ての座標が返されます。 ' points = st.GetPoints() '確認のため、取得した座標を Sheet1 に表示させてみます。 matrix = GetMatrixFromPoints(points) y = UBound(matrix, 1) + 1 Sheet1.Cells(1, x + 0).Value = "#" & CStr(st.id) & "のX値" Sheet1.Cells(1, x + 1).Value = "#" & CStr(st.id) & "のY値" Sheet1.Range(Sheet1.Cells(2, x + 0), Sheet1.Cells(y + 1, x + 1)).Value = matrix x = x + 3 Next End Sub 'X, Y 座標が順に並んだ一次元配列を、2 次元配列に変換します Private Function GetMatrixFromPoints(ByRef p() As Long) As Long() Dim matrix() As Long Dim l As Long, u As Long u = UBound(p, 1) ReDim matrix(u \ 2, 2) As Long For l = 0 To u Step 2 matrix(l \ 2, 0) = p(l + 0) matrix(l \ 2, 1) = p(l + 1) Next GetMatrixFromPoints = matrix End Function