Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5259 / 13644 ツリー ←次へ | 前へ→

【51871】対称位置にあるセルの大小判定 カスミ 07/10/8(月) 21:47 質問[未読]
【51872】Re:対称位置にあるセルの大小判定 りん 07/10/9(火) 7:33 回答
【51885】Re:対称位置にあるセルの大小判定 カスミ 07/10/9(火) 15:24 お礼[未読]
【51895】Re:対称位置にあるセルの大小判定 りん 07/10/9(火) 20:53 回答[未読]
【51896】Re:対称位置にあるセルの大小判定 カスミ 07/10/9(火) 22:31 お礼[未読]

【51871】対称位置にあるセルの大小判定
質問  カスミ  - 07/10/8(月) 21:47 -

引用なし
パスワード
   Excel(VBA)の質問です。

A〜CYのうちそれぞれの2つを取り出したときの距離をすべての組み合わせについてエクセル一覧に記述します。

セル1B〜1CZまで横一列、セル2A〜104Aまで縦一列にそれぞれ項目名の記号をA〜CYという具合に記述します。(対応する2点の名称)

セル2B、3C、4D…には数字の0を表示させるマクロを教えてください。
(これはセル2B(A同士の距離の値)に関して、1Bと2Aにそれぞれ地点名「A」が記入されA同士の距離は0となるためです)

そしてセル全体に数値が入っていると仮定して2B,3C,4D…を対称軸として、3Bと2Cに入力されている数値で2つのうちの小さいほうの数値に変換する、同様に4Bと2D,4Cと3D…の2つずつの数値を比べて小さいほうの数値に変換するにはどうしたらよいでしょうか。
(各2点間の距離は対称になり、たとえば3BにはA,B間の距離、2Cには同じくA,B間の距離が入り3B,2Cに入る数値はどちらから見ても等しいはずです。つまり等しくなかったときのエラーチェック(小さいほうにあわせる)を行いたいです)


お手数ですがどうかよろしくお願いします。

【51872】Re:対称位置にあるセルの大小判定
回答  りん E-MAIL  - 07/10/9(火) 7:33 -

引用なし
パスワード
   カスミ さん、おはようございます。

>セル1B〜1CZまで横一列、セル2A〜104Aまで縦一列にそれぞれ項目名の記号をA〜CYという具合に記述します。(対応する2点の名称)

B1〜CZ1と、A2〜A104ということで、

 ■123
 1■45
 24■6
 356■

とそれぞれの数値を比較したいということでしょうか?

Sub test()
  Dim II As Long, JJ As Long
  '
  For II = 2 To 104
   For JJ = II To 104
     If II = JJ Then
      '中央線
      Cells(II, JJ).Value = 0
     Else
      '行列をひっくり返したセルを比較
      If Cells(II, JJ).Value > Cells(JJ, II).Value Then
        '大きい場合は入れる
        Cells(II, JJ).Value = Cells(JJ, II).Value
      Else
        'それ以外は逆
        Cells(JJ, II).Value = Cells(II, JJ).Value
      End If
     End If
   Next
  Next
End Sub

こんな感じです。

【51885】Re:対称位置にあるセルの大小判定
お礼  カスミ  - 07/10/9(火) 15:24 -

引用なし
パスワード
   ▼りん さん:

お答えいただきありがとうございました。
おかげさまで解決いたしました。

ちなみに今の理論でA2〜A104ではなくA105〜A207といったように行の始まりをA105以降にするにはどうしたらよいでしょうか…

このようなイメージなのですが

   1B1C…
A105 ■123
A106 1■45
A107 24■6
A108 356■


よろしくお願いします。

【51895】Re:対称位置にあるセルの大小判定
回答  りん E-MAIL  - 07/10/9(火) 20:53 -

引用なし
パスワード
   カスミ さん、こんばんわ。

>ちなみに今の理論でA2〜A104ではなくA105〜A207といったように行の始まりをA105以降にするにはどうしたらよいでしょうか…
>
>   1B1C…
>A105 ■123
>A106 1■45
>A107 24■6
>A108 356■

表の位置を行方向にずらすための変数を一つ追加します。

Sub test()
  Dim II As Long, JJ As Long
  Dim KK As Long
  '
  KK = 103 '2を足すと105
  '
  For II = 2 To 104
   For JJ = II To 104
     If II = JJ Then
      '中央線
      Cells(II + KK, JJ).Value = 0
     Else
      '行列をひっくり返したセルを比較
      If Cells(II + KK, JJ).Value > Cells(JJ + KK, II).Value Then
        '大きい場合は入れる
        Cells(II + KK, JJ).Value = Cells(JJ + KK, II).Value
      Else
        'それ以外は逆
        Cells(JJ + KK, II).Value = Cells(II + KK, JJ).Value
      End If
     End If
   Next
  Next
End Sub

こんな感じです。

【51896】Re:対称位置にあるセルの大小判定
お礼  カスミ  - 07/10/9(火) 22:31 -

引用なし
パスワード
   ▼りん さん:

素晴らしいです!本当にありがとうございました。
りんさんのおかげで大変助かりました。

変数を増やすとか思いつきもしませんでした…(^v^;)

5259 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free