アプリ版:「スタンプのみでお礼する」機能のリリースについて

sheet1
A     B     C     D
日付   名前    事由
1    はさん   休み
4    いさん   早退

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

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

シフト表を作成しており、提出された届出をsheet1に入力し、
sheet2に反映させるようにし、反映後にsheet1のD列に”済”と
入力できればと思っています。
また、次に入力した場合は”済”の次から反映できるように
できればと思っていますが、マクロの組み方が分かりません。

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

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

  • "失敗しました"と出てしまいます(><)

    No.2の回答に寄せられた補足コメントです。 補足日時:2018/12/20 09:52

A 回答 (4件)

No.2の回答者です。


>"失敗しました"と出てしまいます(><)

ふつうは、正しく設定している限りは、このエラーが出てくることはめったにないのですが、ただ、
最初に使おうとしたりするときにオブジェクトが収まっていないと、そのようなエラーが出るようです。こちらで新しくシートから作り直してみましたが、こちらも1回だけ不明なエラーが発生しました。
一応確認だけさせていただきます。
最初に、エラーの時の対処の仕方を書いておきます。
(1)
> Set sh1 = Worksheets("Sheet1")
> Set sh2 = Worksheets("Sheet2")  ←こちら側の名称は正しいですか?

(2)

25行目付近にある
j = .Cells(i, 1).Value
これは、確認のためで不要ですから、削除してください。

(3)
34行目付近にある、このコードですが、
' If Err() <> 0 Then
' MsgBox "失敗しました", vbExclamation
' Exit Sub
' End If

(文字の先頭に、シングルコーテーション「'」で、マクロを使わないようにする)
これは、予定していないエラーのためでしたが、なくても作動するはずでず。

次に、デバッグ・ツールの使い方を念のために書かせていただきます。
(解決すれば、使わなくても結構です)

以下の左端の枠をワンクリックして「●」をつけます。(通常茶色の丸)
●  If .Cells(i, dt + 1).Value = "" Then '日付が2列目を1日とした場合 dt +1【修正】
そして同じようにマクロを実行させます。
その部分に来るとマクロが止まります。、次に、F8 を押すと、ステップモードに切り替わりますので、1行ずつエラーがないのか探します。

それは、ローカルウィンドウを、画面下に出して、変数が正しく返っているか、0になったりしていないか、エラーが出たところを見つけるわけです。

●は、メニューのデバッグで、「すべてのブレークポイント削除」を選択していただけると早いです。

なお、マクロとワークブックはアドインというスタイルで、分離させることも可能です。
「交差するセルの入力方法について」の回答画像4
    • good
    • 0

此は 如何でしょう?



代表式、
=IFERROR(OFFSET(Sheet1!$A$2,
SUMPRODUCT((C$2=OFFSET(Sheet1!$A$2,1,0,COUNTA(Sheet1!$A$3:$A$102),1))*($B3=OFFSET(Sheet1!$A$2,1,1,COUNTA(Sheet1!$A$3:$A$102),1))*ROW(OFFSET(Sheet1!$A$2,1,0,COUNTA(Sheet1!$A$3:$A$102),1)))-2,2,1,1),"")&""

ファイル、
https://1drv.ms/x/s!AjviygfJDgV_2nv6LrEwFAiIMjOr
「交差するセルの入力方法について」の回答画像3
    • good
    • 0

こんばんは。




'//フォームコントールのボタンを想定したマクロ
Sub ボタン1_Click()
 Dim rw As Long, dt As Variant, c As Variant
 Dim i As Long, j As Long
 Dim DataRow As Range
 Dim sh1 As Worksheet, sh2 As Worksheet
 Dim sReason As String
 Dim Psn As String
 Set sh1 = Worksheets("Sheet1")
 Set sh2 = Worksheets("Sheet2")
 With sh1
  rw = .Cells(Rows.Count, 4).End(xlUp).Row + 1
  dt = .Cells(rw, 1).Value '日付
  Psn = .Cells(rw, 2).Value '人
  sReason = .Cells(rw, 3).Value '事由
 End With

 On Error Resume Next
 With sh2
  Set c = .Cells.Find(Psn, , xlValues, xlPart)
  If c Is Nothing Then
   MsgBox Psn & "のお名前が見つかりません。", vbExclamation
   Exit Sub
  End If
  i = c.Row
  j = .Cells(i, 1).Value
  If .Cells(i, dt + 1).Value = "" Then '日付が2列目、1非とした場合 dt +1
   .Cells(i, dt + 1).Value = sReason
  Else
   If MsgBox("すでに" & .Cells(i, dt + 1).Value & "と書かれています。" & vbCrLf & _
    "上書きしますか?", vbYesNo) = vbNo Then: Exit Sub

  End If
 End With
 If Err() <> 0 Then
  MsgBox "失敗しました", vbExclamation
  Exit Sub
 End If
 On Error GoTo 0
 sh1.Cells(rw, 4).Value = "済"
End Sub

p.s. 「葉」さんの読みは、本当は[よう]と言います。
「交差するセルの入力方法について」の回答画像2
この回答への補足あり
    • good
    • 0

マクロでなければ、


駄目なのですか?


式で 作る方が、
簡単ですよ?

「式の方が 重くなる」と、いうのは、
噓ですよ。


式だと、
瞬時に、漏れなく、
繁栄されるから、

「済み」の 処理は、
要りませんよ。
    • good
    • 0

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