私は、SolidWorksインターフェイスで選択された各行の単位ベクトルの値をエクスポートするVBAマクロを作成していますが、それがExcelに書き込まれる前に私はExcelの範囲B2をD2に分類する必要があります(B2は部分ベクトルの部分iを表し、C2は部分jを表し、D2は部分kを表します)。範囲は選択された行の数に依存します。選択された各行はベクトルを表し、各ベクトルはExcelの行を表します。Excel VBAを使用して降順と昇順でデータを並べ替える
列Dでソートして、セルD2の最大値、セルD3の最小値でソートし、そこから昇順に並べ替える必要があります。最初は上がり、次に2番目の行から降りる。
選択した4本のラインがあったのであれば、D列には、次のようになります。
-0.99221 -1 -0.99789 -0.99664
現在、それは次のようになります。
しかし、最初にソートする必要があった行の数はわかりません。関連するコードは次のとおりです。
Dim r As Long
Dim ws As Worksheet
Set ws = ActiveSheet
For q = 3 To NumberOfSelectedItems
Columns("B:D").Sort key1:=Range("D2:D2"), order1:=xlDescending, Header:=xlYes
r = ws.Cells(ws.Rows.Count, 4).End(xlUp).Rows
Range("B3:D2" & r).Sort key1:=Range("D2:D2"), order1:=xlAscending, Header:=xlNo
bRes = WriteToExcel(((q - 1) * 1) + 1, vModelSelPt4, "Unit Vector")
Next
現在のところ、このコードでは1004エラーが表示されます。私はそれが間違っているが、確かではない小さなものだと思う。上記の順序でD列でどのように注文すればよいですか?
Private Function WriteToExcel(startRow As Integer, data As Variant, Optional label As String = "") As Boolean
'get the results into excel
With xlWorkbook.ActiveSheet
.Cells(startRow + 2, 2).Value = data(0)
.Cells(startRow + 2, 3).Value = data(1)
.Cells(startRow + 2, 4).Value = data(2)
End With
End Function
上記のコードは、Excelにデータを書き込む機能です。それは非常に重要です。これはSolidWorks APIで行われているため、構文は少し異なります。
こんにちはRalph、ロジックは素晴らしいと私はそれを私のコードに統合し、それを体の早い段階で呼び出すが、私はそれを実行すると、Excelファイルが空白になります。 A列に各ベクトル1,2,3をラベリングしていることに言及することは重要です。 WriteToExcel関数を以前の投稿にも編集しました。何か案は?ありがとう、コード全体が必要な場合はお知らせください。 – nesco88
上記のコードは、提供したサンプルデータに基づいて意図したとおりに動作します。私が別のデータをテストしたい場合は、この追加/異なるテストデータを投稿してください。あなたが上記のコードを他のコードに統合した場合、あなたがやったことややったことを言うことができず、私のコードがあなたのコード内で意図した通りに動作しないのかどうか、別のコンテキストを考慮したい場合は、考慮するコード全体を投稿してください。それ以外の場合は、上記のコードを単独でテストすると、指定されたテストデータで動作することがわかります。 – Ralph
私はいくつかの実験の後に動作するようになった。最後の "Copy"コマンドを "Cut"に変更しなければなりませんでした。なぜなら、行の1つが2回現れたからです。しかし、私はより多くのテストを続けますが、ありがとう、ありがとう。 – nesco88