|
▼まめ さん:
こんにちは
「〜シートの〜列目の変数dayを探す」と書いていらっしゃいますが
「〜シートの〜行目の指定領域内で変数dayを探す」ということですよね。
それと、日付と書いていらっしゃいますのでhirofumiさんも、日付型を前提とした
コメントを書いていらっしゃいますが、
Dim day As Integer
day = Range("F4")
と、ありますから、F4の値、および E3:AI3 内の値は 整数で 1〜31なんでしょうね?
うまくいかないというのが、どう、うまくいかなかったのですか?
少なくとも、こちらで、コピペして F4 および E3:AI3 に適当な数値をいれて動かすと
存在する場合はlngYLine、lngXLineに、正しい数値がはいりますし、存在しなかったら
存在しないということを把握できています。
むしろ、存在しなかった場合、【おかまいなし】に、後半の処理をしているのが気になります。
(それと、変数 i が規定されていませんね。Option Explicit の記述はないのですか?)
コードにインデントをつけますと、以下のようになっていますよ。
Option Explicit
Sub 抽出()
Dim lngYLine As Long
Dim intXLine As Integer
Dim Obj As Object
Dim day As Integer
Dim ws As String
Dim i As Long
day = Range("F4")
ws = ActiveSheet.Name
Set Obj = Worksheets("シフト").Range("E3:AI3").Find(day, LookAt:=xlWhole)
If Obj Is Nothing Then
MsgBox "対象の日付が見つかりませんでした。"
Else
lngYLine = Worksheets("シフト").Cells.Find(day).Row
intXLine = Worksheets("シフト").Cells.Find(day).Column
End If
For i = 6 To 38 '見つからなかった場合も、これ以降実行???
ActiveWorkbook.Worksheets("シフト").Activate
If Not (Cells(i, intXLine).Value = "" Or Cells(i, intXLine).Value = "休" Or Cells(i, intXLine).Value = "有 ") Then
If Cells(i, 2).Value <> "" Then
With Worksheets(ws).Range("B9")
.Value = .Value & Cells(i, 2).Value & "、"
End With
Else '<=== このコードは不要でしょ?
End If
End If
Next i
ActiveWorkbook.Worksheets(ws).Activate
End Sub
|
|