Excel VBA質問箱 IV

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

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


5244 / 13646 ツリー ←次へ | 前へ→

【51934】上下部に分けたセルの大小比較について カスミ 07/10/12(金) 12:49 質問[未読]
【51937】Re:上下部に分けたセルの大小比較について ponpon 07/10/12(金) 13:37 発言[未読]
【51958】Re:上下部に分けたセルの大小比較について ponpon 07/10/12(金) 22:33 発言[未読]
【51961】Re:上下部に分けたセルの大小比較について カスミ 07/10/13(土) 0:27 お礼[未読]

【51934】上下部に分けたセルの大小比較について
質問  カスミ  - 07/10/12(金) 12:49 -

引用なし
パスワード
   いつもお世話になってます。

エクセルで縦250・横250の正方形セルの塊A,Bが上下に2つ並んでいます。

つまり塊Aの横はA1からIP1(250)、縦はA1からA250をそれぞれ1辺とした正方形でそのセルの中には値が入っています。

同様に塊Bの横はA1からIP1(250)、縦はA251からA500で値が入っています。

この2つの塊の同じ位置関係にあるセル同士をそれぞれ大小比較して値の小さいほうに直すにはどうしたらよいでしょうか。
(例:セルA1とA251,B3とB254…をそれぞれ比較し小さい数値を採用します)

学校の問題集にあるような質問になってしまい、お恥ずかしいですがよろしくお願いします。

【51937】Re:上下部に分けたセルの大小比較について
発言  ponpon  - 07/10/12(金) 13:37 -

引用なし
パスワード
   ▼カスミ さん:
>いつもお世話になってます。
>
>エクセルで縦250・横250の正方形セルの塊A,Bが上下に2つ並んでいます。
>
>つまり塊Aの横はA1からIP1(250)、縦はA1からA250をそれぞれ1辺とした正方形でそのセルの中には値が入っています。
>
>同様に塊Bの横はA1からIP1(250)、縦はA251からA500で値が入っています。
>
>この2つの塊の同じ位置関係にあるセル同士をそれぞれ大小比較して値の小さいほうに直すにはどうしたらよいでしょうか。
>(例:セルA1とA251,B3とB254…をそれぞれ比較し小さい数値を採用します)
>
>学校の問題集にあるような質問になってしまい、お恥ずかしいですがよろしくお願いします。

こんにちは。
4×4でやってみるとこんな感じになると思いますが、
意味は取り違えていませんか。
参考にしてください。
ただし、列数、行数とも多いので一度値を配列に入れて、
比較し、吐き出したほうが早いかもしれません。

Sub test()
  Dim myR1 As Range, myR2 As Range
  
  For i = 1 To 4
   For j = 1 To 4
    Set myR1 = Cells(i, j)
    Set myR2 = Cells(i + 4, j)
    If myR1.Value < myR2.Value Then
      myR2.Value = myR1.Value
    Else
      myR1.Value = myR2.Value
    End If
   Next
  Next
End Sub

【51958】Re:上下部に分けたセルの大小比較について
発言  ponpon  - 07/10/12(金) 22:33 -

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

>>(例:セルA1とA251,B3とB254…をそれぞれ比較し小さい数値を採用します)
            ↑
          B3とB253じゃないですか?

>意味は取り違えていませんか。
2つの表はどちらも同じになるのですよね?

>ただし、列数、行数とも多いので一度値を配列に入れて、
>比較し、吐き出したほうが速いかもしれません。
やってみました。

Option Explicit

Sub test2()
  Dim myR1 As Range, myR2 As Range
  Dim myAry1 As Variant, myAry2 As Variant
  Dim i As Long, j As Long
  
  Set myR1 = Range(Cells(1, 1), Cells(250, 1)).Resize(, 250)
  Set myR2 = Range(Cells(251, 1), Cells(500, 1)).Resize(, 250)
  
  myAry1 = myR1.Value
  myAry2 = myR2.Value
  For i = 1 To UBound(myAry1, 1)
    For j = 1 To UBound(myAry1, 2)
      If myAry1(i, j) < myAry2(i, j) Then
       myAry2(i, j) = myAry1(i, j)
      Else
       myAry1(i, j) = myAry2(i, j)
      End If
    Next
   Next
  myR1.Value = myAry1
  myR2.Value = myAry2
 
End Sub

【51961】Re:上下部に分けたセルの大小比較について
お礼  カスミ  - 07/10/13(土) 0:27 -

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

お礼が遅くなってごめんなさい。ばっちりでした!

>>>(例:セルA1とA251,B3とB254…をそれぞれ比較し小さい数値を採用します)
>            ↑
>          B3とB253じゃないですか?

はい、すみません。ミスってしまいました(#^.^#;)

>>意味は取り違えていませんか。
>2つの表はどちらも同じになるのですよね?

はい、同じになります。

それにしてもエクセルって奥が深いですね。マクロとか私のような初心者には敷居が高くって考えも及びませんでしたが、使える人にとってはとてもたくさんのことができていいものですね。すごい…

どうもありがとうございました。m(..)m

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