アプリ版:「スタンプのみでお礼する」機能のリリースについて

a列に日付があります。
c列の、a列のx日から6日後までの計7日間の行
(ただし、6日後の日付がa列にない場合、6日未満の一番近い行)
を選択するマクロの構文を教えてください。
わかりにくい表現ですみません…

x日を2013/01/01とした場合、選択範囲は画像のとおりです。
どうぞよろしくお願いします。

「エクセル 選択するマクロ」の質問画像

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/05/30 19:38

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/05/30 19:38

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/05/30 19:38

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に入力されたときなどはエラーになります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/05/30 19:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!