[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『書込みのマクロに条件を追加する』(右近)
お尋ねいたします。
以下は、以前ここでご教授いただいたものです。
[[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.