Excel VBA質問箱 IV

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

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


5724 / 13645 ツリー ←次へ | 前へ→

【49227】検索の方法と、取得種類について すず 07/5/28(月) 6:50 質問[未読]
【49229】Re:検索の方法と、取得種類について りん 07/5/28(月) 7:54 発言[未読]
【49247】Re:検索の方法と、取得種類について すず 07/5/28(月) 21:27 発言[未読]
【49248】Re:検索の方法と、取得種類について りん 07/5/28(月) 22:12 回答[未読]
【49249】Re:検索の方法と、取得種類について すず 07/5/28(月) 22:48 お礼[未読]

【49227】検索の方法と、取得種類について
質問  すず  - 07/5/28(月) 6:50 -

引用なし
パスワード
   初めまして。こんにちわ。
すずと申します。

質問です。
1シート内にボタンを設置し、操作する形でのプログラムを作成しています。
その操作のうちの一環での作業でやり方そのものに対し、
とまってしまったので質問させていただきました。

やりたいことは
 1シート内の5行目の中で日付型を検索し、
 その中で最新日付のある列の列名を取得したい。
  例)E5に「3/22」、F5に「5/27」があった場合、"F"を取得したい。
ということです。

背景は
 使用する人が各々自分で設定する最新日付列を追加作成し、
 グラフを作成するのでそれを能動的(?)に取得したい
 「5行目」限定されてるのは見出しがその行であり、
 7行目以下には未来の日付も入力されているため、
 正確な最新日付を取得したい、という状態の為
という形にあります。

検索にはfindを使用し、そのほかの条件にはIF文で対応すればよいのかと
思ったのですが最新日付を検索する方法がわかりません。
また、表示されてる日付は「mm/dd」の形になっており、年が表示されてませんが
それでも最新日付を取得することは可能でしょうか?

不躾な文で申し訳ありませんが、方法をご存知でしたら教えてください。
よろしくお願いいたします。

【49229】Re:検索の方法と、取得種類について
発言  りん E-MAIL  - 07/5/28(月) 7:54 -

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

>やりたいことは
> 1シート内の5行目の中で日付型を検索し、
> その中で最新日付のある列の列名を取得したい。
>  例)E5に「3/22」、F5に「5/27」があった場合、"F"を取得したい。
>ということです。
一番新しい日付ということなので、Maxワークシート関数で最大値を求め、それと一致するセルを取得するという方法でいかがでしょうか?

【49247】Re:検索の方法と、取得種類について
発言  すず E-MAIL  - 07/5/28(月) 21:27 -

引用なし
パスワード
   りんさん、こんばんわ。
仕事場ではweb接続できないため返信が遅くなりました。

回答ありがとうございます。

>一番新しい日付ということなので、Maxワークシート関数で最大値を求め、それと一致するセルを取得するという方法でいかがでしょうか?
おっしゃってる意味はわかるのですが、
具体的にどのような文になるのですか?
MAX関数を使用してのIF文がわかりませんでした。すみません。

【49248】Re:検索の方法と、取得種類について
回答  りん E-MAIL  - 07/5/28(月) 22:12 -

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

>具体的にどのような文になるのですか?
>MAX関数を使用してのIF文がわかりませんでした。すみません。
IFでの分岐を使用せず、Maxワークシート関数と一致するものをMatchワークシート関数でインデックス値を取得し、そのセルアドレスから行番号をSubstituteワークシート関数で除いてあります。

Sub test()
  Dim r1 As Range
  '5行目が対象
  Set r1 = ActiveSheet.Rows(5)
  '複数のワークシート関数を使用するのでWithでまとめると見た目あっさり
  With Application.WorksheetFunction
   MsgBox .Substitute(r1.Cells(.Match(.Max(r1), r1, False)).Address(False, False), "5", "") & "列"
  End With
  '終了
  Set r1 = Nothing
End Sub


列を示す文字でなく列番号でよければ、

   MsgBox r1.Cells(.Match(.Max(r1), r1, False)).Column & "列目"

こんな感じです。

【49249】Re:検索の方法と、取得種類について
お礼  すず E-MAIL  - 07/5/28(月) 22:48 -

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

すごい!コピペしただけでできてしまいました。
うまくシステムに組み込ませて、完成させたいと思ってます。

またお願いするかもしれません。
ありがとうございました!!

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