人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

またまたExcelもVBAマクロ作成に関するヘルプです。
いろいろな距離(パターンが多い)を計算するマクロを作りたいのですが、
VBAのスキルが低いこともあり、自力ではできそうにありません。
どうぞよろしくお願い致します。

(↓詳しくはの内容を参照してください。)
http://www.geocities.jp/yukitsun001/200406018q.txt

●質問者: yoshifuku
●カテゴリ:コンピュータ 科学・統計資料
✍キーワード:Excel VBA またまた スキル パターン
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● aki73ix
●1ポイント

http://nifberry.727.net/test/hatena13.xls

正直言ってマクロにするまでも在りません

・・・・と言うのは駄目ですか?

CSV形式で

パターン,3

任意の点のX座標,1

任意の点のY座標,2

AのX座標,=INT((B$1+2)/2)

AのY座標,=INT((B$1+2)/2)

BのX座標,3

BのY座標,4

Aまでの距離,=ABS(B$2-B$4)+ABS(B$3-B$5)

Bまでの距離,=ABS(B$2-B$6)+ABS(B$3-B$7)

これだけで終わるのでVBAで組むのはかなり無駄だと思うのですが・・・

場合に応じてVBAで組む必要があります

VBAの練習ということでしたら、意に添ってなくてすみませんのでポイント後でお返しします

◎質問者からの返答

やってみました。

本質的には間違っていません。

しかし、この場合、任意の点は自分で1個1個決めて入力することになると思います。

同様に点Bも自分で1個1個決めて入力することになると思います。

つまりこの場合、同時に出力できるのは1通りだけだと思います。

PTN10の場合だと10000通りあるので、10000通りすべてを同時に出力できればベストです。


2 ● moochin2004
●1ポイント

http://www.yahoo.com/

Yahoo!

URLはダミーです。

パターンをnとすると

点Aは(INT((n+1)/2),INT((n+2)/2))となりますので、任意点を(x,y)とすると

?はABS(x-INT((n+1)/2))+ABS(x-INT((n+2)/2))で求まるかと思います。

?は任意点から任意動点までの距離ということだと解釈したのですが、任意点の値を入力すれば、動点(最大100個)がとりうるすべて場合の距離を列記するプログラムを作れば良いのでしょうか?

※半分も回答していないのでポイントは結構です。(また回答させていただくつもりです)

◎質問者からの返答

ありがとう。

本質的なところは前の回答者の方と同じと思います。

ご指摘の通り、「とりうるすべて場合の距離を列記するプログラム」がつくれれば

いいのかもしれません。

どうぞよろしくお願い致します。


3 ● aki73ix
●80ポイント

http://nifberry.727.net/test/hatena14.xls

えっと、何通りずつあるか表示できればいいのでしょうか?

2回目なのでもう回答できないのですが、こんな感じになります

Forループで任意の点をPtnxPtn通り決定した後、内部のループで PtnxPtnとおりBについても決定しその距離を求めます

求めたのをセルに出力すれば表にもできますが

表を書くとは書いてないのでこれでいいのかなと思いますB2のコンボボックスにマクロを関連付けています

Sub ドロップ2_Change()

’距離の個数を入れる配列変数

Dim AD(20) As Long

Dim BD(20) As Long

For i = 0 To 20

AD(i) = 0

BD(i) = 0

Next

For i = 1 To Cells(1, 2).Value

For j = 1 To Cells(1, 2).Value

’ 任意の点の座標 (j,i)

m = Abs(i - Cells(4, 2).Value) + Abs(j - Cells(5, 2).Value)

’ Aとの距離を求める

AD(m) = AD(m) + 1

For k = 1 To Cells(1, 2).Value

For l = 1 To Cells(1, 2).Value

’ 点Bの座標 (l,k)

’ 任意の点とBの距離を求める

n = Abs(i - k) + Abs(j - l)

BD(n) = BD(n) + 1

Next

Next

Next

Next

’配列を書き出す

For i = 0 To 20

Cells(i + 13, 2).Value = AD(i)

Cells(i + 13, 4).Value = BD(i)

Next

End Sub

http://www2.cty-net.ne.jp/~hidenori/vba/index.html

参考

◎質問者からの返答

ありがとう。やってみます!


4 ● ichi1
●80ポイント

http://www.hatena.ne.jp/1087526142#

またまたExcelもVBAマクロ作成に関するヘルプです。 いろいろな距離(パターンが多い)を計算するマクロを作りたいのですが、 VBAのスキルが低いこともあり、自力ではでき.. - 人力検索はてな

VBAの標準モジュールに貼り付けて下さい。

ptn1からptn10まで、すべての点Bについて列挙しています。

結果はデバッグウィンドウに出力しています。

必要に応じて修正して下さい。

Sub main()

Dim ptnX As Integer

Dim AX, AY As Integer ’A点座標

Dim BX, BY As Integer ’B点座標

Dim CX, CY As Integer ’C点座標(任意点)

For ptnX = 1 To 10

Debug.Print ”ptnX = ” & ptnX

AX = Int((ptnX + 1) / 2)

AY = Int((ptnX + 2) / 2)

Debug.Print ”pointA = (” & AX & ”,” & AY & ”)”

For BX = 1 To ptnX

For BY = 1 To ptnX

Debug.Print ”pointB = (” & BX & ”,” & BY & ”)”

Debug.Print ”distance A-B = ” & Abs(AX - BX) + Abs(AY - BY)

For CX = 1 To ptnX

For CY = 1 To ptnX

Debug.Print ”pointC = (” & CX & ”,” & CY & ”)”

Debug.Print ”distance A-C = ” & Abs(AX - CX) + Abs(AY - CY)

Debug.Print ”distance B-C = ” & Abs(BX - CX) + Abs(BY - CY)

Next CY

Next CX

Next BY

Next BX

Next ptnX

End Sub

◎質問者からの返答

ありがとう。やってみます!すごいうれしい!


5 ● wan2ree
●8ポイント

http://www.geocities.jp/wan2ree/Book1.xls

URLのところにあるファイルのMacro1を実行すると、

PTN番号を選ぶものが出てきますので、

それを選んでから(1)か(2)ボタンを押してください。

マクロ実行時に表示していたシートを全クリアしてから結果書き出します。

結果表示を、横方向にx、縦方向にy軸にしています。

各軸の目盛りはx軸を一番下、y軸を一番左に書き出しています。

座標系がxy平面となっていますが、(x,y)じゃなく点の表現は(y,x)の表現になってるということでいいでしょうか?

PTN2を例にとると、x=2,y=1ですよね?

あと、(2)のほうは(「任意点」から「点B」までの距離)+(その「点B」から「点A」までの距離)の値でいいんでしょうか。

とりあえずマクロ内で変数D1とD2にそれぞれ値入れてから、合計をセルに書き出すようにしていますが・・・

PTNによる点Aを確認して、PTN1と2のときの結果までは確認したので大丈夫だと思いますが、

大きい数字のところは見てないです・・・

◎質問者からの返答

皆様ありがとうございました。できました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ