【解消】質問投稿時のカテゴリ選択の不具合について

sheet1
A     B     C     D         E
日付   名前    事由
1    はさん   休み
4    いさん   早退    9:00~12:00

sheet2
A     B     C     D     E...    AF
日付    1      2     3      4...    31
いさん                    早退  
ろさん
はさん   休み

---------------------

シフト表を作成しており、提出された届出をsheet1に入力し、
sheet2に反映させるようにしたいです。

・早退、遅刻の場合はDに入力したコメントを挿入(勤務時間 9:00~12:00)
・反映後にsheet1のE列に”済”
・次に入力した場合は”済”の次から反映
・該当するセルに入力があった場合はメッセージボックスを出し、スキップして次の入力へ
・事由ごとにセルに色付け(休み:青 早退:ピンク 遅刻:オレンジ)

上記の項目を含めてマクロを作成することは可能でしょうか?
担当を直接入力するため、sheet2の欄には関数は使えません。

よろしくお願いいたします。

質問者からの補足コメント

  • Private Sub CommandButton1_Click()

    Dim val As String
    Dim list1 As Range
    Dim list2 As Range
    Dim list As Range
    Dim r As Integer
    Dim c As Integer
    Dim ws As Worksheet

    Set ws = Worksheets("sheet2")
    Set list = ws.Range("B2:AF35")
    Set list1 = ws.Range("B2:B35")
    Set list2 = ws.Range("B2:AF3")

      補足日時:2018/12/20 13:19
  • r = Application.WorksheetFunction.Match(Range("A2"), list1, 0)
    c = Application.WorksheetFunction.Match(Range("B2"), list2, 0)
    val = Range("C2")

    Application.WorksheetFunction.Index(list, r, c) = val

    End Sub

    ---------------------
    ここまでは組めたのですが、難しくて進みません(><)

      補足日時:2018/12/20 13:20

A 回答 (2件)

別所で回答をした者なのですが、


http://oshiete.goo.ne.jp/qa/10883143.html

そのお書きになったコードは、関数からの発想だと思います。

ワークシート関数は、しょせんVBAにとって借り物なのです。ExcelとVBAは、インターフェイスでつながっているだけです。その方式で頑張ってみるのもよいけれども、それはエラーが出たときに、そのエラーの対処法は、逆に、難しくなるのです。

今回の場合は、私は、関数での処理というのは、基本的には賛成はしかねますが、マクロの場合は、1~2週間程度での知識は最低でも必要かもしれません。

こちらは、気まぐれの上に、制作の依頼であることは承知で書きましたが、私がダメだと思うなら、次の親切な方を探してください。ここには、ずっと辛抱強くお付き合いしてくれる奇特な人もいますから。というか、私は、本当は、今週は、そんなに暇ではないのです。焦っているくせにここで書いててよいのかという状態でして……。とにかく、前回のコードがクリアしないようでしたら、こちらのものは一切見捨ててください。来週になれば少し落ち着くのですが。

ご質問者さんの条件や環境を知らないままでピタッと合うようには、こちらは作れません。

なお、
CommandButton1_Click()  'シートをまたぐようなコードは、特にActiveX コントロールは使わないほうがよいです。フォームコントロールのボタン用に作りました。
Windows 10 以降、ActiveX コントロールは不調が多いようです。

また、私は、標準モジュールを使うことを希望します。そうしないと、モジュールの親オフジェクトの負担が増えるのです。

Set list = ws.Range("B2:AF35")
Set list1 = ws.Range("B2:B35")

これを見る限りは、私の書いたコードの位置関係が違うようですね。
    • good
    • 0

できるとは思いますが、


そのシフト表作成の中で何が分からないのでしょうか。

「全部代わりに作って!」
と言うのは【質問】ではなく【依頼】ですので、他で依頼されることを強く勧めます。
シフト表を作るうえで分からない点を分かるようにすることが「疑問・問題点の解決」ですから、
作ってもらったマクロを使えば問題が解決するのではありません。
目の前にある「疑問・問題点」を先送りにするだけです。
(条件が少しでも変わったらマクロの習性に手も足も出ないのでは意味がないということです)


・・・余談・・・

>担当を直接入力するため、sheet2の欄には関数は使えません。
そんなことはありませんよ。
名前の箇所を手入力するだけで、表が完成するように数式を記入することができます。
    • good
    • 0

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


おすすめ情報