またまたExcelもVBAマクロ作成に関するヘルプです。

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

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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2004/06/18 11:35:42
  • 終了:--

回答(5件)

id:aki73ix No.1

aki73ix回答回数5224ベストアンサー獲得回数272004/06/18 11:55:45

ポイント1pt

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

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

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の練習ということでしたら、意に添ってなくてすみませんのでポイント後でお返しします

id:miku1973

やってみました。

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

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

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

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

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

2004/06/18 13:19:44
id:moochin2004 No.2

moochin2004回答回数36ベストアンサー獲得回数02004/06/18 13:08:44

ポイント1pt

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個)がとりうるすべて場合の距離を列記するプログラムを作れば良いのでしょうか?

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

id:miku1973

ありがとう。

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

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

いいのかもしれません。

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

2004/06/18 13:21:19
id:aki73ix No.3

aki73ix回答回数5224ベストアンサー獲得回数272004/06/18 14:29:00

ポイント80pt

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

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

参考

id:miku1973

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

2004/06/18 23:14:09
id:ichi1 No.4

ichi1回答回数24ベストアンサー獲得回数02004/06/18 14:54:48

ポイント80pt

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

id:miku1973

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

2004/06/18 23:15:45
id:wan2ree No.5

wan2ree回答回数12ベストアンサー獲得回数02004/06/18 16:58:54

ポイント8pt

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のときの結果までは確認したので大丈夫だと思いますが、

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

id:miku1973

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

2004/06/22 00:15:32

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません