• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Find,Offsetを使ってセルを指定する方法)

Find,Offsetを使ってセルを指定する方法

このQ&Aのポイント
  • エクセルVBAにおいて、FindとOffsetを使用して特定のセルを指定する方法について質問です。
  • 質問者は、「D3からQ3までのセルの中で「年」と入ったセルの左横のセルを探し、その中の値(西暦の年が入っています)を、G4からI100までの範囲に入力される月日の年として置き換える」という処理を行いたいとのことです。
  • しかし、実行時エラーが発生してしまい、修正方法が分からないとのことです。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんにちは! 具体的にどんな動きにしたいのか判らないのですが、 コードを拝見して・・・ >Set FoundCell = Range("D3:Q3").Find("年").Offset(0, -1).Select を >Set FoundCell = Range("D3:Q3").Find("年").Offset(0, -1) に >.Value = DateSerial(FoundCell, Month(.Value), Day(.Value)) はYearが抜けていますので >.Value = DateSerial(Year(FoundCell), Month(.Value), Day(.Value)) としたらどうなりますか?m(_ _)m

qazxcvfr4
質問者

お礼

迅速なご回答ありがとうございました。 しかし、なぜ「Select」が入っているとダメだったのか、教えていただけないでしょうか。

その他の回答 (2)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

続けてお邪魔します。 No.1に >しかし、なぜ「Select」が入っているとダメだったのか、教えていただけないでしょうか。 とありましたので・・・ Selectという動作は単に選択しするだけです。 >Set FoundCell = Range("D3:Q3").Find("年").Offset(0, -1) の部分ですでに FoundCell に Range("D3:Q3")の中の対象セルがセットされています。 どうしてもSelectを使いたい場合は >Set FoundCell = Range("D3:Q3").Find("年").Offset(0, -1) >FoundCell.Select のように2行に分割してやります。 当然 >.Value = DateSerial(FoundCell, Month(.Value), Day(.Value)) も .>Value = DateSerial(Selection, Month(.Value), Day(.Value)) のように変えなければなりません。 ※ Selectを使う場合は FoundCell の宣言は不要で Private Sub Worksheet_Change(ByVal Target As Range) Range("D3:Q3").Find("年").Offset(0, -1).Select With Target If Intersect(Target, Range("G4:I100")) Is Nothing Or Target.Count <> 1 Then Exit Sub If IsDate(.Value) Then If Year(.Value) <> Selection Then Application.EnableEvents = False .Value = DateSerial(Selection, Month(.Value), Day(.Value)) Application.EnableEvents = True End If End If End With End Sub のようなコードになると思います。m(_ _)m

qazxcvfr4
質問者

お礼

丁寧なご説明、ありがとうございました。 ようやく理解できました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

No.1です。 投稿後気になったのですが、 FoundCellがシリアル値ではなく、単に数値の場合は >.Value = DateSerial(FoundCell, Month(.Value), Day(.Value)) >はYearが抜けていますので >.Value = DateSerial(Year(FoundCell), Month(.Value), Day(.Value)) の部分は無視してください。m(_ _)m

qazxcvfr4
質問者

お礼

ありがとうございます。

関連するQ&A

専門家に質問してみよう