Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11896 / 13645 ツリー ←次へ | 前へ→

【13426】日にちの設定について あべる 04/5/5(水) 0:22 質問[未読]
【13429】Re:日にちの設定について ぴかる 04/5/5(水) 10:03 回答[未読]
【13430】Re:日にちの設定について Hirofumi 04/5/5(水) 10:22 回答[未読]
【13432】Re:日にちの設定について Asaki 04/5/5(水) 10:38 回答[未読]
【13448】Re:日にちの設定について あべる 04/5/5(水) 17:28 お礼[未読]
【13449】Re:日にちの設定について あべる 04/5/5(水) 17:46 質問[未読]
【13453】Re:日にちの設定について Asaki 04/5/5(水) 22:14 回答[未読]
【13460】Re:日にちの設定について あべる 04/5/6(木) 0:21 お礼[未読]

【13426】日にちの設定について
質問  あべる  - 04/5/5(水) 0:22 -

引用なし
パスワード
   こんばんは。標題について、教えてほしいことがあるのですが、
これは、VBAでやるのか、それともエクセルの機能だけでやるのか
分からなかったので、投稿させてもらいました。

例えば、ブック内のシート1のセルC2に「平成16年4月1日(木)」と入力します。
他のシート2のセルC2に「平成16年4月2日(金)」、シート3のセルC2に「平成16年4月3日(土)」というふうに各シートのセルC2に連続した日付が出るような設定にしたいのですが、これは、どのようにすればいいのでしょうか?どなたか、ご存知の方がいらっしゃいましたら、教えていただけないでしょうか?

【13429】Re:日にちの設定について
回答  ぴかる  - 04/5/5(水) 10:03 -

引用なし
パスワード
   あべるさん、こんにちは。

C2がシリアル値でしたら、こんなんでOKかと思います。どうでしょう?。
Sub test()

  Dim I As Integer

  For I = 2 To Sheets.Count
    With Sheets(I).Range("C2")
      .Value = Sheets(I - 1).Range("C2").Value + 1
      .NumberFormatLocal = "ggge""年""m""月""d""日""(aaa)"
    End With
  Next
  
End Sub

【13430】Re:日にちの設定について
回答  Hirofumi E-MAIL  - 04/5/5(水) 10:22 -

引用なし
パスワード
   実行タイミング、日付の範囲、シートの範囲等が解らないので
ActiveSheetのC2の日付から、其の月の月末までの日付までを
ActiveSheet以降のシートのC2に、もしシートが無いならシートを追加して
代入して行くサンプルを示します

Option Explicit

Public Sub Sample()

  '各シートの書き込み位置
  Const cstrPos As String = "C2"
  
  Dim i As Long
  Dim lngSheetNumb As Long
  Dim vntTop As Variant
  Dim dtmEnd As Date
  
  'ActiveSheetに就いて
  With ActiveSheet
    'C2の値を変数に取得
    vntTop = .Range(cstrPos).Value
    '変数の値が日付と認められ無いなら
    If Not IsDate(vntTop) Then
      '変数の値が文字列なら
      If VarType(vntTop) = vbString Then
        '半角に出きる全角を半角に変換
        vntTop = StrConv(vntTop, vbNarrow)
        '変数の中の"("を捜す
        i = InStr(1, vntTop, "(", vbTextCompare)
        '"("が有る場合
        If i <> 0 Then
          '"("拠り前の文字を取得
          vntTop = Left(vntTop, i - 1)
          '変数の値が日付と認められるなら
          If IsDate(vntTop) Then
            '変数の値をシリアル値とする
            vntTop = CDate(vntTop)
          Else
            'C2の値が日付では無いとする
            i = 0
          End If
        End If
      End If
    Else
      'C2の値が日付で有るとする
      i = 1
    End If
    'C2の値が日付では無いならSubを抜ける
    If i = 0 Then
      Exit Sub
    End If
    '月末の日付を変数に格納する
    dtmEnd = DateSerial(Year(vntTop), Month(vntTop) + 1, 0)
    'ActiveSheetのSheet番号を取得
    For i = 1 To Worksheets.Count
      If .Name = Worksheets(i).Name Then
        lngSheetNumb = i
        Exit For
      End If
    Next i
  End With
  
  'Worksheetsコレクションに就いて
  With Worksheets
    '先頭日付〜最終日付まで繰り返し
    For i = vntTop To dtmEnd
      'Sheet番号がコレクションの最大値を超えるなら
      If .Count < lngSheetNumb Then
        'コレクションにシートを追加
        .Add After:=.Item(.Count)
      End If
      'Sheet番号のC2に就いて
      With .Item(lngSheetNumb).Range(cstrPos)
        '書式を設定
        .NumberFormatLocal = "ggge""年""m""月""d""日(""aaa"")"""
        '日付をC2に代入
        .Value = i
      End With
      'Sheet番号を更新
      lngSheetNumb = lngSheetNumb + 1
    Next i
  End With
  
  Beep
  MsgBox "処理が終了しました"
  
End Sub

【13432】Re:日にちの設定について
回答  Asaki  - 04/5/5(水) 10:38 -

引用なし
パスワード
   こんにちは。

一般機能(今回、結構手作業)の範囲なら、
1) シート1から3を全て選択
2) C2の書式を設定する
  右クリック >> セルの書式設定 >> 「表示形式」タブ
   >> 分類:ユーザー定義、種類:ggge"年"m"月"d"日 ("aaa")"
3) シート1のみを選択
4) 4/1 と入力(日付がシリアル値として扱われる方法なら何でも良い)
5) シート2のC2に数式入力 =シート1!C2+1
6) シート3のC2に数式入力 =シート2!C2+1

【13448】Re:日にちの設定について
お礼  あべる  - 04/5/5(水) 17:28 -

引用なし
パスワード
   ぴかるさん、hirofumiさん、Asakiさん、早速のご回答ありがとうございました。
使用するファイルには、他に様々なマクロが登録されており、容量や迅速化の関係から、一般機能を利用させていただくことにしました。なるべくエクセルの機能を利用したほうが良いと判断させていただきました。色々な案を考えていただいたのですが、誠に申し訳ありませんが、Asakiさんの案を使わせていただきます。ぴかるさん、hirofumiさんの案も、非常に勉強になりますので、今後の過程で、是非、利用させていただきます。ありがとうございました。

【13449】Re:日にちの設定について
質問  あべる  - 04/5/5(水) 17:46 -

引用なし
パスワード
   ▼Asaki さん、ありがとうございました。それで、一つ、わがままな質問で大変恐縮ですが、教えてください。今回は、4月分ということで、各日付名のシート(1日〜30日まで)のセルC2に登録しましたが、30日の次のシート(31日分)のセルC2にも入力しないといけないのです。集計のマクロを作成している関係から、月末が30日までの月については、31日分のセルC2に翌月の日付が出ないようにしたいのですが、エクセルの一般機能だけで、そのようなことは可能なのでしょうか?

【13453】Re:日にちの設定について
回答  Asaki  - 04/5/5(水) 22:14 -

引用なし
パスワード
   ちょっと長くなりますが、↓こんな感じでどうでしょうか?
=IF(MONTH('1日'!C2) =MONTH('30日'!C2+1),'30日'!C2+1,"")

【13460】Re:日にちの設定について
お礼  あべる  - 04/5/6(木) 0:21 -

引用なし
パスワード
   ▼Asaki さん,出来ました!!ありがとうございました。

11896 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free