• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:日付の入ったセル範囲から、ある日付を選択したい(再)

日付の入ったセル範囲から、ある日付を選択したい

このQ&Aのポイント
  • 日付の入ったセル範囲から、特定の日付を選択する方法について教えてください。
  • 上のコードを実行すると、8月21日が選択されますが、代わりに9月21日を選択する方法を教えてください。
  • セル範囲AL4からCU4には8月18日から10月17日の間の日付が入っています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

#3です。 ということは、AL4:CU4の各セルにはちゃんと日付が入っているわけだよね? じゃあ、前回私が提示したようなFor文でいけるんじゃないですか? Excelはあまり得意でないのだが、ちょっと調べて変えてみた。 Sub 日付選択() For Each objCell In Range("AL4:CU4") If Range("AJ2").Value = objCell.Value Then objCell.Select Exit Sub End If Next Call MsgBox("そんな値ないよ!") End Sub

aitaine
質問者

お礼

貴重な時間を割いて、私の疑問を解決していただき本当にありがとうございました。お蔭様であなた様のコードで自分の思うとおりのことができました。これで次のマクロ作成に取り掛かれます。本当に感謝いたします。

その他の回答 (5)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.5

AL4のセルに入っているのは2015/8/18の日付のシリアル値で間違いないですね? じゃあ、こんな感じかな。 Sub 日付選択()   Range("AL4:CU4").Select   Selection.Name = "日付範囲"   nCol = WorksheetFunction.Match(Range("Aj2"), Range("日付範囲"), 0)   Range("日付範囲").Cells(, nCol).Select End Sub AL4:CU4にAJ2の日付が無い場合等のエラー処理は省略していますので、ご自身で実装してください。

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

>Day(Range("AJ2")はAJ12セルに日付シリアル値がはいっているとして、その日(XX日の部分。年月は問わない。)部分だけ注目して、抜き出す関数です。だから9月21日より前に8月21日があればそれを探してしまうのは当たりまえ。Whatの中には年月も入れた日付けを作って、年月日全体(2015年9月21日)を検索するのが一番手軽。 ーー エクセルの日付シリアル値の仕組みを知らないなら、勉強すべき大切なこと。 エクセル理解が不完全で、にわかにVBAに手を出した人は知らない人がいるようだ。 ーー 月日数字だけを取り出す列を関数などでつくっても、日付シリアル値にならない。 月日の部分の一致を探したいなら (1)検索値(Whatのところ)2015年のような、具体的に「年もいれて」、年月日の日付シリアル値を指定するか (2)検索する月と日の数字を抜き出して、文字列で組み合わせた月日数字(文字列「9月21日」など)を作り、各セルで検索されるセルの日付からも、月日の数字を抜き出して、月と日を組み合わせて文字列を作り両者を比較する。 とか。 その時はFindメソッドを使うのをあきらめて、For Nextで前セル比較して探さざるを得ない。文字列の検索では「ワイルドカードを使った部分一致」ができるが、日付シリアル値(単なる数値なので)では難しいだろう。 次月同日(例9月21日)の日付けシリアル値は、今月のその日(8月21日)の日付シリアル値とは数の上で共通文字部分はないのだから。

aitaine
質問者

お礼

突然頭をたたかれたようになりました。本当に貴方様のいうとおりです。勉強もせず、安易な方法を求める・・・情けないです。またVBAの本を読み返してみました。たかがシリアル値とあなどっていました。複雑なシステムなので難しいと言うことがよくわかりました。ありがとございました。

回答No.3

前回も確認しましたが、 VLOOKUP(J73,年月管理!F17:I39,4,FALSE) これは日付を返すんでしょうか? 2015/8/18みたいな。 それとも日だけを返す?18みたいな。

aitaine
質問者

補足

説明不足をお許しください。=VLOOKUP(J73,年月管理!F17:I39,4,FALSE)+1は、ここにも式が入っており、その式は =I36+1 となっており、表示形式は平成27年7月21日となっています。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

> 教えていただいたコードじっこうすると、オブジェクト変数またはwithブロック変数が設定されていませんというエラーになります。 まぁ、こちらのコピペミスなんですが最後の「t」が抜けてました。 Range("日付範囲").Find(What:=Format(Range("AJ2"), "M月D日"), LookIn:=xlValues).Selec ↓ Range("日付範囲").Find(What:=Format(Range("AJ2"), "M月D日"), LookIn:=xlValues).Select

aitaine
質問者

補足

修正後も同様のエラーとなります。  上のセルはすべて8月 =MONTH(AM$4)&"月" 下のセルはすべて 曜日  =AM4 が表示されています。 AM4には、=+AL4+1 と言う式で、表示は19となっています。AL4:CU4の表示は、「D日」です。よろしくお願いします。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

AL4:CU4の表示が質問の通り「M月D日」であるならこんな感じで良いのでは? Range("日付範囲").Find(What:=Day(Range("AJ2")), LookIn:=xlValues).Select ↓ Range("日付範囲").Find(What:=Format(Range("AJ2"), "M月D日"), LookIn:=xlValues).Selec

aitaine
質問者

補足

教えていただいたコードじっこうすると、オブジェクト変数またはwithブロック変数が設定されていませんというエラーになります。

関連するQ&A