- ベストアンサー
エクセル 選択するマクロ
- みんなの回答 (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
その他の回答 (3)
- K Kazz(@JazzCorp)
- ベストアンサー率31% (549/1751)
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
お礼
どうもありがとうございます。やってみます。
- KURUMITO
- ベストアンサー率42% (1835/4283)
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
お礼
どうもありがとうございます。やってみます。
- misatoanna
- ベストアンサー率58% (528/896)
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に入力されたときなどはエラーになります。
お礼
どうもありがとうございます。やってみます。
お礼
どうもありがとうございます。やってみます。