[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『書込みのマクロに条件を追加する』(右近)
お尋ねいたします。
以下は、以前ここでご教授いただいたものです。
[[20180428233458]]
この構文に以下の条件を追加したいのですが、お力添えのほどお願いいたします。
「sh1のセルAS7が36となった場合のみ書込みを許可させる」
このようにしたい思います。どうぞよろしくお願いいたします。
Sub Posting_Input() '入力後のデータをデータベースに登録 Dim sh1 As Worksheet Dim sh2 As Worksheet Dim sh3 As Worksheet Dim v As Variant Dim row1 As Long Dim i As Long
'変数の設定 Set sh1 = Sheets(sh1Name) Set sh2 = Sheets(sh2Name) Set sh3 = Sheets(sh3Name) v = sh3.Range("A1").CurrentRegion.Value
'データの存在チェック If sh1.Range(v(2, 2)).Value = "" Then MsgBox "未入力箇所があるのでデータベースに登録できません。" Exit Sub End If If WorksheetFunction.CountIf(sh2.Range("A:A"), sh1.Range(v(2, 2))) Then If MsgBox("すでにDBに登録されています。" & vbLf & "上書きしますか?", vbYesNo) = vbYes Then row1 = WorksheetFunction.Match(sh1.Range(v(2, 2)), sh2.Range("A:A"), 0) Else Exit Sub End If Else row1 = sh2.Range("A" & Rows.Count).End(xlUp).Row + 1 End If
'データの転記 sh2.Unprotect "11100" For i = 2 To UBound(v, 1) sh2.Cells(row1, v(i, 3)).Value = sh1.Range(v(i, 2)).Value Next i sh2.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True ReProtect sh2, "11100"
End Sub
< 使用 Excel:Office365、使用 OS:Windows10 >
If sh1.Range("AS7").Value <> 36 Then Exit Sub を追加すればよいのでは? メッセージが必要なら 'データの存在チェック と同様に・・・ (はまちゃん) 2021/01/20(水) 19:11
>これはどの部分に追加すれば良いでしょうか?
ご自分の判断で出来ませんか?
1)プログラム始め
2)入力欄に入力されていなければ、終了
3)すでに一覧に入力値が存在すれば、上書き用行番号取得または終了
4)存在しなければ、リストの最後の行の次の行番号取得
5)データの転記
6)プログラム終わり
という流れで作業するんですよね?(コードを読む限りそう書いてある)
>「sh1のセルAS7が36となった場合のみ書込みを許可させる」
なんか微妙な言い回しですが、
シートの保護を解除しない場合でも、転記は試みるんですか?
もし、
「指定のセルの値が36でなければ、プログラム終了」とか
「指定のセルの値が36ならば、データの転記」
ということなら、
思うタイミングで、そのように書けばよいと思います。
まずは思うように書いてみる。
で、うまくいかなかったら、
「こう書いてみたけど、こうなってしまう。」
ということを書いて相談してみてください。
誰かの意見を待つだけではなく、ご自分で試行錯誤をしてみてください。
(まっつわん) 2021/01/21(木) 14:27
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.