Excel VBA質問箱 IV

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

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


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

【52647】最大値のアドレスについて hato 07/11/23(金) 20:37 質問[未読]
【52648】Re:最大値のアドレスについて かみちゃん 07/11/23(金) 21:03 発言[未読]
【52651】Re:最大値のアドレスについて hato 07/11/23(金) 21:23 お礼[未読]
【52649】Re:最大値のアドレスについて じゅんじゅん 07/11/23(金) 21:09 発言[未読]
【52652】Re:最大値のアドレスについて hato 07/11/23(金) 21:25 お礼[未読]
【52650】Re:最大値のアドレスについて ichinose 07/11/23(金) 21:13 発言[未読]
【52667】Re:最大値のアドレスについて Mari 07/11/25(日) 12:55 質問[未読]
【52668】Re:最大値のアドレスについて neptune 07/11/25(日) 13:05 回答[未読]

【52647】最大値のアドレスについて
質問  hato  - 07/11/23(金) 20:37 -

引用なし
パスワード
   「ある列の、3つおきのセルのうち最大値をもつセルの隣のセルの値を取得する」
という操作が必要なのですが、うまくいきません。

最大値のアドレスについては次のようにしましたが、Goto行でエラーになってしまいます。また最大値のアドレスをその後どのように使えばいいのかも分かっていません。

Dim 範囲 As Range
 Dim m
 
 Set 範囲 = ActiveSheet.Previous.Range("D3, D6, D9, D12, D15, D18, D21, D24, D27")
 With Application
   m = .Match(.Max(範囲), 範囲, 0)
   .Goto 範囲.Cells(m, 1)
   MsgBox 範囲.Cells(m, 1).Address(0, 0)
 End With

初心者で説明下手ですが、不明な点は追記いたします。
よろしくお願いします。

【52648】Re:最大値のアドレスについて
発言  かみちゃん  - 07/11/23(金) 21:03 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>最大値のアドレスについては次のようにしましたが、Goto行でエラーになってしまいます。

以下のような感じにしないといけないのではないでしょうか?
Match関数の検査範囲には、離れたセルは指定できないのではないでしょうか?

Sub Sample()
 Dim 範囲 As Range
 Dim m

 Set 範囲 = ActiveSheet.Previous.Range("D3, D6, D9, D12, D15, D18, D21, D24, D27")
 With Application
   m = .Match(.Max(範囲), 範囲.Cells(1).EntireColumn, 0)
   .Goto 範囲.EntireColumn.Cells(m)
 End With
End Sub

【52649】Re:最大値のアドレスについて
発言  じゅんじゅん  - 07/11/23(金) 21:09 -

引用なし
パスワード
   Match関数ではないですが。

Sub test()
Dim r As Range
Set r = Range("D3,D6,D9,D12,D15,D18,D21,D24,D27")

With Application
   .Goto r.Find(.Max(r), LookIn:=xlValues, lookat:=xlWhole)
End With
End Sub
こんなのはどうでしょう?

【52650】Re:最大値のアドレスについて
発言  ichinose  - 07/11/23(金) 21:13 -

引用なし
パスワード
   こんばんは。

Match関数は飛び飛びのセル範囲には適応不可ですね!!
飛び飛びを連続にすれば・・・・、

新規ブックの標準モジュールに
'======================================================
Sub test()
  Dim 範囲 As Variant
  Dim m
  With Range("d3:d27")
    .Formula = "=int(rand()*30)+1"
    .Value = .Value
    End With
  MsgBox "サンプル作成"
  範囲 = Array([d3], [D6], [ D9], [ D12], [D15], [D18], [D21], [D24], [D27])
  With Application
    MsgBox .Max(範囲)
    m = .Match(.Max(範囲), 範囲, 0)
    MsgBox m
    .Goto Cells(m * 3, 4)
    MsgBox Cells(m * 3, 4).Address(0, 0)
    End With
End Sub

検討してみてください。

尚、コード掲載も必要ですが、サンプルデータの掲載もしてください。

【52651】Re:最大値のアドレスについて
お礼  hato  - 07/11/23(金) 21:23 -

引用なし
パスワード
   ▼かみちゃん さん:
>Match関数の検査範囲には、離れたセルは指定できないのではないでしょうか?

調べてみるとおっしゃる通りのようで、Match内を教えていただいたものにしてうまく行きました。
本当に助かりました、ありがとうございます!

>
>Sub Sample()
> Dim 範囲 As Range
> Dim m
>
> Set 範囲 = ActiveSheet.Previous.Range("D3, D6, D9, D12, D15, D18, D21, D24, D27")
> With Application
>   m = .Match(.Max(範囲), 範囲.Cells(1).EntireColumn, 0)
>   .Goto 範囲.EntireColumn.Cells(m)
> End With
>End Sub

【52652】Re:最大値のアドレスについて
お礼  hato  - 07/11/23(金) 21:25 -

引用なし
パスワード
   ▼じゅんじゅん さん:
ずいぶんすっきりできるんですね。。。
Match関数ばかりで悩んでいました。参考になります!ありがとうございます。

>Match関数ではないですが。
>
>Sub test()
> Dim r As Range
> Set r = Range("D3,D6,D9,D12,D15,D18,D21,D24,D27")
>
> With Application
>   .Goto r.Find(.Max(r), LookIn:=xlValues, lookat:=xlWhole)
> End With
>End Sub
>こんなのはどうでしょう?

【52667】Re:最大値のアドレスについて
質問  Mari  - 07/11/25(日) 12:55 -

引用なし
パスワード
   ▼ichinose さん:
横から失礼します。
いつも勉強させていただいています。
あつかましいのですが、この下のコードで
m = .Match(.Max(範囲), 範囲, 0)←は何を表示しているのでしょうか?
よろしければ、教えてください。

>  With Application
>    MsgBox .Max(範囲)
>    m = .Match(.Max(範囲), 範囲, 0)
>    MsgBox m
>    .Goto Cells(m * 3, 4)
>    MsgBox Cells(m * 3, 4).Address(0, 0)
>  End With

【52668】Re:最大値のアドレスについて
回答  neptune  - 07/11/25(日) 13:05 -

引用なし
パスワード
   ▼Mari さん:
>▼ichinose さん:
>横から失礼します。
>いつも勉強させていただいています。
>あつかましいのですが、この下のコードで
> m = .Match(.Max(範囲), 範囲, 0)←は何を表示しているのでしょうか?
>よろしければ、教えてください。
ichinose さんじゃないですが、

MATCHワークシート関数の書式が
MATCH(検査値, 検査範囲, 照合の型)
なので、
検査値が範囲の最大値、
検査範囲が「範囲」
照合の型が、「検査値 に一致する値のみが検索の対象」の指定
という意味を持つのでは。

詳しくはHelpのMATCH関数のページをご覧下さい。

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