• ベストアンサー

エクセル 選択するマクロ

a列に日付があります。 c列の、a列のx日から6日後までの計7日間の行 (ただし、6日後の日付がa列にない場合、6日未満の一番近い行) を選択するマクロの構文を教えてください。 わかりにくい表現ですみません… x日を2013/01/01とした場合、選択範囲は画像のとおりです。 どうぞよろしくお願いします。

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

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

こんばんは! 一例です。 A列の日付データは昇順になっているという前提です。 Sub Sample1() Dim i As Long, c As Range Set c = Range("A:A").Find(what:=DateValue("2013/1/1"), LookIn:=xlFormulas) For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 If Cells(i, 1) <= DateValue("2013/1/1") + 6 Then Exit For End If Next i Range(Cells(c.Row, 3), Cells(i, 3)).Select End Sub こんな感じではどうでしょうか?m(_ _)m

39ioed1qiau8z90
質問者

お礼

どうもありがとうございます。やってみます。

その他の回答 (3)

回答No.3

Option Explicit Sub Within7Days() Const xKey_Col = 1 'データの列番号:A列の場合:1 Const xDays = 7 '検索範囲(計算上は「日数-1」を使う) Dim xRange As Range Dim xBound As Long Dim xRow As Long Dim xColumn As Long Dim kk As Variant Dim nn As Long xBound = Cells(Rows.Count, "A").End(xlUp).Row xRow = Selection.Row xColumn = Selection.Column nn = Selection.Rows.Count kk = Selection.Columns.Count If (nn * kk = 1) And (xColumn = xKey_Col) Then Set xRange = Selection If IsDate(xRange.Value) Then kk = WorksheetFunction.Match(CLng(xRange.Value + xDays - 1), Range(Cells(xRow, "A"), Cells(xBound, "A")), 1) If IsNumeric(kk) Then kk = kk + xRow - 1 If IsDate(Cells(kk, "A").Value) Then Range(Cells(xRow, "C"), Cells(kk, "C")).Select End If Else Debug.Print "バグかもしれない!?" & ":" & kk & ":" & (xRange.Value + xDays - 1) & ":" & Cells(xRow, "A").Value & ":" & Cells(xBound, "A").Value End If Else MsgBox ("選択されたデータが日付ではない!") End If Else MsgBox ("列:" & xKey_Col & " の日付を1つだけ選んでネ!") End If End Sub

39ioed1qiau8z90
質問者

お礼

どうもありがとうございます。やってみます。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

x日についてはA列でその日付を選択したのちに次のマクロを呼び出して実行することでお望みのセルが選択できます。 Sub 範囲選択() Dim n, i As Long Dim xRange As Range If ActiveCell.Column = 1 Then n = ActiveCell.Row For i = 2 To Range("A65536").End(xlUp).Row + 1 If Range("A" & i).Value > ActiveCell.Value + 6 Or Range("A" & i) = "" Then Set xRange = Range(Range("C" & n), Range("C" & i - 1)) xRange.Select Exit Sub End If Next End If End Sub

39ioed1qiau8z90
質問者

お礼

どうもありがとうございます。やってみます。

回答No.1

x日がB1に入力されていると勝手に仮定しますが―― [Alt]+[F11]で開くウィンドウの[挿入]-[標準モジュール]から表示される白紙部分に以下を記述し、そのウィンドウを閉じます。 ------- Sub Test() Dim stt As Range, rng As Range, i As Long Set stt = Range("A:A").Find(Range("B1").Value, LookAt:=xlWhole) Set rng = stt.Offset(1, 2) For i = stt.Row + 2 To stt.Row + 6 If Cells(i, 1).Value <= stt.Value + 6 Then Set rng = Union(rng, Cells(i, 1).Offset(0, 2)) End If Next rng.Select End Sub ------- で、[ツール]-[マクロ]-[マクロ]から、または[開発]リボンの[マクロ]から実行します。 ※エラー処理はしていませんので、A列に無い日付がB1に入力されたときなどはエラーになります。

39ioed1qiau8z90
質問者

お礼

どうもありがとうございます。やってみます。

関連するQ&A

専門家に質問してみよう