- ベストアンサー
回転移動も加味した平行移動のコード修正と数値非表示
- 質問No.2876302で質問された項目に関連して、回転移動だけでなく平行移動を加味するためのコード修正を依頼しています。
- コード修正後、エラーが発生したため、表示される意味不明な数値を非表示にする方法についても質問しています。
- 質問No.2876302と同じく、平行移動量が可変量のため、導入データ群を読み込んでおきます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
オリジナルのプログラムを作ったわけではないのと質問者さんがしたいことがよく分からない(今に 至っても)ので書き込みませんでしたが、回答が付いていない様なので少し、回答しておきます。 1.平行移動量は各点ごとに違うのでしょうか?それが全部、B,C列の横に書いてあると いうことですか?回転の角度は全てにおいて一定なのに平行移動量を点ごとに設定すると 原形を留めないバラバラな結果になってしまいますが。。。 2.元々、大量データに対応するためにデータ組(変数M)を設定してあったと思います。 それをj=0 to M-1のルーティンで処理していたと思うのですが、今回のデータは 元がB,C、平行移動量がA,Dにあるだけならこのルーティンは不要になりますよ。 (M=30で30組処理するならA,B,C,Dの次のデータはどこに入れるのでしょうか?H,I,J,K?) 3.データ数をnx = Range("A65536").End(xlUp).Rowで取得していますが、 実際はi0=3から始めるならデータ数は2個減らさないとダメですね。 とりあえず、(無駄な書き込みも入れたまま)動くプログラムにするには以下のようになると 思います。前提は1.とりあえず横に書いてある量だけ移動する。2.データ組は1だけで処理。 3.実際のデータは3行から最終行まででデー多数はxn-2 Dim i As Long, j As Long, i0 As Long, j0 As Long, i1 As Long, j1 As Long, jj As Long, Ndata As Long Dim x0 As Double, y0 As Double, c As Double, sn As Double, cs As Double Dim xy() As Double ' 回転後の xn,yn Dim Ndada As Long ' データ数 Dim M As Long ' データ組の数 Dim k As Double ' 回転角度(度) Dim nx As Long '追加。導入データ量が可変量のため。 Dim ny As Long ' 追加。同上 Dim xx1 As Double, yy1 As Double '平行移動量を追加 'あらかじめA~D列に導入データ群を平行移動量X値(A列)、X値(B列)、Y値(C列)、平行移動量Y値(D列)、として読込んでおきます。 Sheets("sheet3").Range("A3:EV65535").ClearContents ny = Sheets("Sheet1").Range("A65536").End(xlUp).Row Sheets("sheet3").Range("A3:D" & ny) = Sheets("Sheet1").Range("A3:D" & ny) nx = Range("A65536").End(xlUp).Row i0 = 3 ' x1があるセルの行・・・最初の行として3行目 j0 = 2 ' 最初のx1があるセルの列(B列)・・・最初の列としてB列 i1 = 3 ' 回転後のx1を書き込むセルの行・・・i0と同じ j1 = 5 ' 最初の回転後x1を書き込むセルの列(E列) Ndata = nx - i0 + 1 ' データ数 M = 1 ' データ組の数 k = 360 / 30 ' 角度(度) ' ReDim xy(Ndata, 2) As Double c = 3.14159265358979 / 180 sn = Sin(c * k) cs = Cos(c * k) ' Application.ScreenUpdating = False ' Excelグラフの再描画を禁止する For j = 0 To M - 1 jj = j0 + 2 * j 'もし、次がH,I,J,Kにデータがあるなら正しくはjj = j0 + 7 * j For i = 0 To Ndata - 1 x0 = Val(Cells(i0 + i, jj)) y0 = Val(Cells(i0 + i, jj + 1)) xy(i, 0) = x0 * cs - y0 * sn + Val(Cells(i0, jj - 1)) ' 平行移動量を追加 xy(i, 1) = x0 * sn + y0 * cs + Val(Cells(i0, jj + 2)) '平行移動量を追加 Next i Range(Cells(i1, jj + 3), Cells(i1 + Ndata - 1, jj + 4)) = xy() Next j Application.ScreenUpdating = True ' Excelグラフの再描画を許可する
お礼
平行移動は結局しないことになりました。お世話になりました。
補足
ありがとうございます。今ちょっと取り込んでいまして、 後程結果報告させていただきますね。