Excel VBA質問箱 IV

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

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


13610 / 13646 ツリー ←次へ | 前へ→

【4554】お願い致します。 田中 03/3/26(水) 16:02 質問
【4568】Re:お願い致します。 ポンタ 03/3/27(木) 9:04 回答
【4625】Re:お願い致します。 田中 03/3/29(土) 12:13 お礼
【4629】Re:お願い致します。 ポンタ 03/3/30(日) 10:21 回答

【4554】お願い致します。
質問  田中  - 03/3/26(水) 16:02 -

引用なし
パスワード
   エクセル2000で取引先へ提示する月間納期予定表を作りたいのですが、
専門書などを見ても良く分からず、作ることができません。
自分が作りたいのは以下のようなものです

条件 行には納期(〜日後)   ⇒商品により納期が違う為
                     1日後〜10日後
    列には日付(1日〜31日)⇒注文受付日として
    の表を作成して、納期としてカウントしない
    日曜・外注休み・月末(28or30or31)
    を自分で指定したときに、ボタンひとつで
    表に一発で全ての納品予定日を
    表示させるマクロ
    ※月末は納品日が翌月になるのですが、
      それも計算できるようにしたいです

例           1日 2日 3日 4日(注文日)
    納期翌日
    納期2日
    納期3日 
              ↓
    今月を例にして、2日を日曜日として指定
              ↓
    マクロのボタンを押す
              ↓

            1日 2日 3日 4日(注文日)
    納期翌日   3日 ×  4日 5日
    納期2日   4日 ×  5日 6日 ⇒納品日
    納期3日   5日 ×  6日 7日

このようなマクロが組める方、どうか助けて頂けないでしょうか。
急遽作ることになってしまったので宜しくお願いします。  

【4568】Re:お願い致します。
回答  ポンタ  - 03/3/27(木) 9:04 -

引用なし
パスワード
   >日曜・外注休み・月末(28or30or31)を自分で指定したときに

どんな方法で指定するか、が書いてないので
こちらで勝手に決めさせていただきました。

シートレイアウトを下記の表のようにしてください。

   A    B   C   D   E
1      1日 2日 3日 4日・・・・
2 営業日      ×
3 納期翌日
4 納期2日
5 納期3日
6  :
7  :

(営業日でない日には2行目に「×」をつける)

下記のコードを標準モジュールに貼り付け
このシートをアクティブにしてお試しください。

Sub test()
  Dim i As Integer, j As Long, k As Integer
  Dim MyRange As Range, MyFind As Range
  Application.ScreenUpdating = False
  Call Rows(3).Insert(xlShiftDown)
  Set MyRange = Range("C1", Range("IV1").End(xlToLeft)).Offset(2, 0)
  MyRange.FormulaR1C1 = _
    "=IF(R[-1]C[0]=""×"","""",MAX(R[0]C2:R[0]C[-1])+1)"
  k = 3
  For i = 2 To Range("IV1").End(xlToLeft).Column
    If Cells(2, i).Value <> "×" Then
      Cells(3, i).Value = k
      For j = 4 To Range("A65536").End(xlUp).Row
        Set MyFind = MyRange.Find(j, , xlValues, xlWhole, , xlPrevious)
        If Not MyFind Is Nothing Then
          Cells(j, i).Value = MyFind.Offset(-2, 0)
        End If
      Next
    End If
  Next
  Call Rows(3).Delete(xlShiftUp)
  Application.ScreenUpdating = True
End Sub

【4625】Re:お願い致します。
お礼  田中  - 03/3/29(土) 12:13 -

引用なし
パスワード
   ▼ポンタ さん:
返事が遅くなってすみません
誠に有難うございました。大変助かりました。
ただ、私の言い方が悪かったみたいで一部変更
したい部分があるのですが…

休みを×で指定は問題ないのですが、外注休みに関しては外注休みとなるだけで
納期のカウントは無しで、納品や注文受付はあるんです。
つきましては、×で指定してしまうと外注休みも営業定休日になってしまい
納品日としてカウントされませんので、外注休みは△で指定し、
納品は【あり】納期としてのカウントは【無し】と仕様を
変更できないでしょうか?

   A    B   C   D   E
1      1日 2日 3日 4日 5日 6日 7日・・・・
2 営業日         ×     △
3 納期翌日 2日 4日    5日 6日・・・・ 
4 納期2日 4日 5日    7日 7日・・・・
5 納期3日 5日 7日    8日 9日・・・・
6  :
7  :

我侭言って申し訳ありませんが、宜しくお願い致します。

【4629】Re:お願い致します。
回答  ポンタ  - 03/3/30(日) 10:21 -

引用なし
パスワード
   これでどうでしょう?

Sub test()
  Dim i As Integer, j As Long, k As Integer
  Dim MyRange As Range, MyFind As Range
  Application.ScreenUpdating = False
  Call Rows(3).Insert(xlShiftDown)
  Set MyRange = Range("C1", Range("IV1").End(xlToLeft)).Offset(2, 0)
  MyRange.FormulaR1C1 = _
    "=IF(OR(R[-1]C[0]=""×"",R[-1]C[0]=""△""),"""",MAX(R[0]C2:R[0]C[-1])+1)"
  k = 3
  For i = 2 To Range("IV1").End(xlToLeft).Column
    If Cells(2, i).Value = "×" Then
      For j = 4 To Range("A65536").End(xlUp).Row
        Cells(j, i).Value = ""
      Next
    Else
      Cells(3, i).Value = k
      For j = 4 To Range("A65536").End(xlUp).Row
        Set MyFind = MyRange.Find(j, , xlValues, xlWhole, , xlPrevious)
        If Not MyFind Is Nothing Then
          Cells(j, i).Value = MyFind.Offset(-2, 0)
        End If
      Next
    End If
  Next
  Call Rows(3).Delete(xlShiftUp)
  Application.ScreenUpdating = True
End Sub

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