- ベストアンサー
曜日別にExcelシートにデーター入力
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
回答No.1です。 前の回答のワークシート関数を応用したVBAです。 Sub Macro0() With Range("A3:C12") .FormulaR1C1 = _ "=IF(ISNUMBER(1/DAY(R1C1)),IF(INDEX(C5:C25,ROW(),WEEKDAY(R1C1,3)*3+COLUMNS(C1:C))="""","""",INDEX(C5:C25,ROW(),WEEKDAY(R1C1,3)*3+COLUMNS(C1:C))),"""")" .Value = .Value End With End Sub
その他の回答 (2)
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答No.2とはまた別の方式によるVBAです。 Sub Macro01() Dim w As String, c As Range, i, r, r1 As Long If IsDate(Range("A1")) Then w = Format(Range("A1"), "aaaa") Else MsgBox "日付が入力されていません" _ & vbCrLf & "処理を中止します", _ vbExclamation, "日付不明" Exit Sub End If Set c = Range(Cells(1, 5), Cells(1, Columns.Count)) _ .Find(what:=w, LookIn:=xlValues, lookat:=xlWhole) If c Is Nothing Then MsgBox "その曜日のデータが見つかりません" _ & vbCrLf & "処理を中止します", _ vbExclamation, "データ無し" Exit Sub End If r = 3 For i = 0 To 2 r1 = c.Offset(0, i).End(xlUp).Column If r1 > r Then r = r1 Next i Range("A3:C" & Rows.Count).ClearContents With Range("A3:C" & r) .Value = .Offset(0, c.Column - Range("A3").Column).Value End With End Sub
- kagakusuki
- ベストアンサー率51% (2610/5101)
別にVBAなど使わずとも、ワークシート関数でも十分可能な事の様に思いますが、VBAでなければならない理由でもあるのでしょうか? まず、A3セルに次の関数を入力して下さい。 =IF(ISNUMBER(1/DAY($A$1)),IF(INDEX($E:$Y,ROW(),WEEKDAY($A$1,3)*3+COLUMNS($A:A))="","",INDEX($E:$Y,ROW(),WEEKDAY($A$1,3)*3+COLUMNS($A:A))),"") 次に、A3セルをコピーして、A3~C12の範囲に貼り付けて下さい。 これで、A1セルに日付を入力する毎に、A3~C12の値がその曜日ごとのデーターに変わるようになります。
お礼
有難うございます。
お礼
答えを引き出すのにいろいろコードありますね。大変勉強になります。ありがとうございます。