Page 82 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼最も早い時間の該当者を選択するには? 日付 02/9/8(日) 12:34 ┗Re:最も早い時間の該当者を選択するには? Nakamura 02/9/8(日) 13:19 ┗Re:最も早い時間の該当者を選択するには? 日付 02/9/9(月) 17:48 ┗Re:最も早い時間の該当者を選択するには? Nakamura 02/9/9(月) 22:53 ┗Re:最も早い時間の該当者を選択するには? 日付 02/9/12(木) 15:52 ┗Re:最も早い時間の該当者を選択するには? Nakamura 02/9/12(木) 22:01 ┗問題のブックは動作したのですが・・・ 日付 02/9/13(金) 18:39 ┗Re:問題のブックは動作したのですが・・・ Nakamura 02/9/13(金) 23:14 ┗解決しました。感謝。 日付 02/9/14(土) 21:37 ─────────────────────────────────────── ■題名 : 最も早い時間の該当者を選択するには? ■名前 : 日付 ■日付 : 02/9/8(日) 12:34 -------------------------------------------------------------------------
以下のようなデータがあり、最も早い時間の該当者のセルを 選択したいのですが、B列でオートフィルタをするやり方だと、 抽出状態になり、他のデータが隠れてしまう事は避けたいのです。 データ全体が見える形のまま、該当者のセルをアクティブセルに する方法はないでしょうか? A B 佐藤薫 8/29 6:00 PM 山口真 8/30 12:00 PM 横山隆 8/25 10:00 AM 笹山豊 8/28 11:00 AM 加藤実 8/27 4:00 PM . . . . この例では、横山隆をアクティブセルにしたいのですが・・・。 |
こんにちは B列の表示形式を日付としてこんな感じです。 Sub test() Dim fd As Date Dim frg As Range fd = WorksheetFunction.Min(Columns("B")) Set frg = Columns("B").Find(fd) If Not frg Is Nothing Then frg.Offset(, -1).Activate End If End Sub それでは |
Nakamura さん、こんにちは。 教えて頂いたコードでは、何も起こらなかったです。 他の参照等が必要でしょうか? すみません、お手数かけます。 |
こんばんは 特に参照設定の追加は必要有りません。 今回シート指定が無いので、シートに関する記述をしておりませんが、 コードを該当シートモジュールに記述するか、標準モジュールの場合は 該当シートをアクティブにして実行してみて下さい。 また、B列の表示形式はどうなっているでしょうか?文字列の場合はうまく行きません。 文字列なら、コードを考えて見ます。 それでは |
Nakamura さん、ありがとうございます。 返事が遅くなり失礼しました。 対象ブックB列は文字列でした。自分で他のブックでテスト して、それに気がつきました。 |
▼日付 さん: >Nakamura さん、ありがとうございます。 >返事が遅くなり失礼しました。 >対象ブックB列は文字列でした。自分で他のブックでテスト >して、それに気がつきました。 こんばんは 文字列になっているB列のデータを日付データに変換します。 年のデータが無いのでシステムクロックの年とします。 つまり2002年です。 Sub test() Dim fd As Date Dim frg As Range Dim rg As Range For Each rg In Range("B1", Range("B65536").End(xlUp).Address) If IsDate(rg) Then rg.NumberFormatLocal = "m/d h:mm AM/PM" rg.Value = DateValue(rg.Text) + TimeValue(rg.Text) End If Next fd = WorksheetFunction.Min(Columns("B")) Set frg = Columns("B").Find(fd) If Not frg Is Nothing Then frg.Offset(, -1).Activate End If End Sub それでは |
Nakamura さん、 教えて頂いたコードで動作しました。 お蔭様で大変楽になりました。 ありがとうございます。 他のブックにも、教えていただいたコードを応用できると考えたのですが、 データ形式が、"m/d (aaa) h:mm AM/PM" 形式の文字列で、 "(aaa)" が中に含まれているため、 rg.Value = DateValue(rg.Text) + TimeValue(rg.Text) で、止まります。元データの "m/d (aaa) h:mm AM/PM" を崩さずに、動作させたいのですが、"(aaa)"の処理がわかりません。 何度も申し訳ありません。 |
こんばんは こんな感じでどうでしょう? Sub test2() Dim fd As Date Dim frg As Range Dim rg As Range Dim rgday As String Dim rgtime As String For Each rg In Range("B1", Range("B65536").End(xlUp).Address) With rg .Value = StrConv(.Text, vbNarrow) rgday = Left(.Text, InStr(1, .Text, "(") - 1) rgtime = Right(.Text, Len(.Text) - InStr(1, .Text, ")")) If IsDate(rgday) And IsDate(rgtime) Then .NumberFormatLocal = "m/d (aaa) h:mm AM/PM" .Value = DateValue(rgday) + TimeValue(rgtime) End If End With Next fd = WorksheetFunction.Min(Columns("B")) Set frg = Columns("B").Find(fd) If Not frg Is Nothing Then frg.Offset(, -1).Activate End If Set frg = Nothing End Sub それと、前回のコードの最後にも Set frg = Nothing を追加しておいて下さい。 それでは |
Nakamuraさん、他のブックでも動作しました。 応用が広がり感謝します。 本当にありがとうございました。 |