プロが教えるわが家の防犯対策術!

ウィンドウズ版のエクセル97を使ってます。
曜日指定の日付の入ったセルを作りたいのですが、セルの連続データのフィルハンドルでうまく行きません。簡単に出来る方法を教えて下さい。
具体例   2月 2日(土)
      2月 5日(火)
      2月 7日(木)
      2月 9日(土)
      2月12日(火)
      2月15日(木)
      2月17日(土)
        ・
        ・
        ・

A 回答 (6件)

#2の方に追加です。


セルの書式設定は m"月"d"日"(aaa)
として
A1セルから始めるとします。

A1に、1月31日を入力
A2に、+A1+2 (2/2)
A3に、+A2+3 (2/5)
A4に、+A3+2 (2/7)

として、A2からA4を選択して
フィルハンドルでOKだと思います。
A1は本当は必要ないのですが
計算式の関係で使っています。
    • good
    • 0
この回答へのお礼

ありがとうございました。未熟な私には、マクロはまだあまり理解出来ないので
適切な回答でした。エクセルを使いこなせないのでまた質問をした時は、宜しくお願い致します。

お礼日時:2002/02/07 20:23

#2 は日付書式の質問と勘違いしていました。

日付が飛んでいましたね。
質問の曜日間隔は例だと思いますので、自由に曜日指定できるようユーザー定義関数を作ってみました。

最初のセル(例えばA1)に最初の日付を入れます。
その下のセル(A2になります)に例えば =youbiFil(A1,"火","木","土") とします。

ユーザー定義関数の引数は、参照するセル、曜日サイクルです。
曜日サイクルは、『"火","木","土"』のように設定します。
『"月","火","水","木","金"』なら土日は出ません。『"土"』しか設定しなければ土曜日しか出しません。
3つ目の日付以降はフィルハンドルを引っ張れば出てきます。列方向もできます。


Public Function youbiFil(rgUp As Range, ParamArray myYoubi())
  '曜日のパターンを登録していなければ何もしない
  If UBound(myYoubi) < 0 Then
    youbiFil = "": Exit Function
  End If

  Dim yb As Integer '前のセルは指定した曜日サイクルの何番目?
  Dim maeYoubi As Integer '前のセルの曜日
  Dim curYoubi As String 'カレントセルの曜日
  Dim curDay As Date 'カレントセルの日付
  '最初の日付の曜日が、指定した曜日サイクルと違っていれば何もしない
  maeYoubi = -1
  For yb = 0 To UBound(myYoubi)
    If myYoubi(yb) = Format(rgUp, "aaa") Then
      maeYoubi = yb
      Exit For
    End If
  Next
  If maeYoubi = -1 Then youbiFil = "": Exit Function

  '前のセルの曜日の次は曜日サイクルのどこにあるか調べる
  If maeYoubi < UBound(myYoubi) Then
    curYoubi = myYoubi(maeYoubi + 1)
  Else
    curYoubi = myYoubi(0)
  End If
  '曜日が一致するまで日付を進める
  curDay = rgUp + 1
  While Format(curDay, "aaa") <> curYoubi
    curDay = curDay + 1
  Wend
  youbiFil = curDay
End Function
    • good
    • 0
この回答へのお礼

ありがとうございました。
未熟者なのでまた質問をした時は、宜しくお願い致します。

お礼日時:2002/02/07 20:29

再びRESです。

(No.3で回答)
回答No.4のkenken0001さんのが、正解です。

最終的にできれば良いと、未熟なマクロを投稿してしまいました。
それにしても、簡単にできますね。発想が大事ですね。
    • good
    • 0
この回答へのお礼

ありがとうございました。私は、未熟なのでマクロはよく理解出来きません。

お礼日時:2002/02/07 20:26

どうも簡単には出来ないようです。



ですが、マクロでできました。

まず、
例えば、セルA1に「2月1日」、セルB1に下記の式をコピペ(テキスト形式で)。 

=IF(ISNUMBER(A1)=FALSE,"",IF(WEEKDAY(A1)=2,"(月)",IF(WEEKDAY(A1)=3,"(火)",IF(WEEKDAY(A1)=4,"(水)",IF(WEEKDAY(A1)=5,"(木)",IF(WEEKDAY(A1)=6,"(金)",IF(WEEKDAY(A1)=7,"(土)","(日)")))))))

(もし、HTMLでコピペした場合はセルB1、B2、B3のセルの結合を解除)

セルの連続データのフィルハンドル

2月1日(金)
2月2日(土)
2月3日(日)
2月4日(月)
2月5日(火)
2月6日(水)
2月7日(木)
  ・
  ・
  ・

そして、マクロに下記のコードをコピペして、実行すれば、できます。

最初の日付の曜日のセルをアクティブにすることと最後の日付の曜日のセルの下のセルは空欄である必要があります。

Sub 火木土抽出()
'《条件》
'最初の日付の曜日のセルをアクティブにすること
'最後の日付の曜日のセルの下のセルは空欄

Dim i As Integer
Dim R As Integer
Dim C As Integer
i = 1
Do Until IsEmpty(Cells(i, 2).Value)
If ActiveCell.Value = "(火)" Then
ElseIf ActiveCell.Value = "(木)" Then
ElseIf ActiveCell.Value = "(土)" Then
Else
R = ActiveCell.Row
C = ActiveCell.Column
Range(Cells(R, C - 1), Cells(R, C)).Select
Selection.Delete Shift:=xlUp
Cells(R, C).Select
If ActiveCell.Value = "(火)" Then
ElseIf ActiveCell.Value = "(木)" Then
ElseIf ActiveCell.Value = "(土)" Then
Else
ActiveCell.Offset(-1, 0).Select
i = i - 1
End If
If ActiveCell.Row <> 1 Then
ActiveCell.Offset(-1, 0).Select
i = i - 1
Else
End If
End If
ActiveCell.Offset(1, 0).Select
i = i + 1
Loop
Range("A1").Select
End Sub
    • good
    • 0

セルに 2/6 と入力して、そのセルを選択して



セルの書式設定→表示形式→ユーザー設定で

 m"月"d"日"(aaa)

とします。あとはフィルハンドルを引っ張ります。
    • good
    • 0

こんにちは セルを分ければできそうです。



セルAに年月日をあらわす数字
例えば2/6を入力します。
(表示はセルの書式設定によって、お好みの
2月6日等へ変更します)

隣り合うセルBにWEEKDAYと言う関数を使い
セルAを参照します。

例えばB1ならWEEKDAY(A1)のように。

そうすると曜日を表す数字が返ってきますので
後はIF関数等で曜日を示す文字(”日”、”月”等)へ
変換すればよいと思います。

連続して作成したい時はコピーでセルを移動すれば
日にちに対応した曜日になるはずです。
    • good
    • 0

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