2011-09-17 9 views
0

Excelセルの内容(日付)を使用して別のシートの範囲を検索し、セルに含まれる日付に関する情報をその範囲の日付の権利。私は、日付が休日であるか休日でないか、それが月末であるかどうかを確認する必要があります。範囲があるExcelセルの内容を使用して別のシートの範囲を検索し、情報を返します

Column 1  Column 2  Column 3 Column 4 Column 5 
    Date  Day of Week  BD or WE HD or NH Y or N 

BD =ビジネスデー、WE =週末、HD =休日、NH =未ホリデー、今月のY =終わり、N =未2011年から2016年まで月 のすべての日付を終了を占めています範囲内

ユーザーが入力した日付をワークシート内のセルに入力して、範囲を検索し、日付を探し、その日付の情報を使用して、適切な日付であるかどうかを判断します。 私はプログラミングには新しくないが、現在のプログラミング言語の約20年遅れているので、VBAコードを学んでいる。入力した日付が休日ではなく営業日でない場合は、日付を1つ上げて日付を確認し、日付が正しくなるまでVBAコードを使用したいと考えています。私はまた、月の終わりであれば1を下げてバンプしたいと思う。私はIf文とLoopingを入力することができると信じていますが、ユーザーが入力した日付を入力ボックスではなく、その日付のRangeから返す方法を知りません。ループ内でそれを使用して、私が望む日付を得ることができます。 私は何か助けていただけると感謝しています。ありがとう

答えて

1

ユーザーが最初のシート(最初のシートとそのコードネーム; Sheet1と呼ぶ)に情報を入力すると、Visual Basicコードがトリガーされるように思えます。したがって、あなたはそれが月末である場合には、このコードは実際には1つまでの日付をバンプしたがって、使用することができます...

Private Sub Worksheet_Change(byval target as range) 

Dim SelDate as Date 

If VBA.IsDate(Cells(target.Row,target.Column)) Then 
SelDate=Cells(target.Row, target.Column) 

'Assume other range is on sheet with the codename Sheet2, starting at top of page in first column 

LookRow = 1 

    Do Until (Sheet2.Cells(LookRow, 1) >= SelDate and Sheet2.Cells(LookRow, 3) = "BD" and Sheet2.Cells(LookRow, 4) = "HD" and Sheet2.Cells(LookRow,5) = "N") or Sheet2.Cells(LookRow, 1) = "" 
    LookRow = LookRow + 1 
    Loop 

    If Cells(LookRow, 1) <> "" Then 
    Cells(target.Row, "OutputCol") = Sheet2.Cells(LookRow, 1) 
    End If 
End If 

End Sub 

のVisual Basic EditorでのSheet1内

をあなたのサブルーチンを作成する必要がありますあなたの質問が指定されていない場合、何かが起きると、営業日が営業日外になることがあります。あなたはIF文に対処できると言ったので、私はその詳細についてあまり心配していません。日付だけでなく日付もバンプダウンする場合は、SelDateを見つけるために別々のループが必要です

「OutputCol」は、出力を最初のシートに配置する場所です。一般的には、コードをより堅牢にするために、範囲名を参照して列を定義することをお勧めします。 Expert help with that can be found here。私もエラー処理を使用する

これは、一度に1つの日付しか見つからないことに注意してください。シートに複数の日付を貼り付ける場合は、範囲の左上のセルにのみ作用します。 Worksheet_Changeイベントで定義されている "Target"には完全な選択が含まれているため、target.Count> 1のときに完全な列を再処理するか、target.Rows.Countを使用してループする行の数を確認できます。