advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 159 for (素人) (0.000 sec.)
[[20161222120048]]
#score: 10177
@digest: 9b12dc13e1088fa60b2258382364a5cd
@id: 72274
@mdate: 2016-12-23T23:50:13Z
@size: 7900
@type: text/plain
#keywords: locked (27128), ・i1 (9344), ・j1 (9020), 列・ (7463), ・j (6915), ・i (6156), 保護 (5255), ・g (4812), 護解 (3586), (素 (3515), 解除 (2696), 素人 (2344), スワ (2243), ロッ (2167), ト保 (1908), 2016 (1604), 人) (1457), 木) (1405), 終行 (1287), range (1123), 確定 (1042), の保 (986), target (975), 状態 (948), パス (945), 最終 (917), 入力 (845), シー (772), 実現 (741), 当然 (740), 消し (721), true (718)
『セルの値によって同行の違うセルのロックとロック解除』(かなめ)
こんにちは エクセルのVBAで以下の動作をさせたいのでご教授くださいませ。 ・エクセルのバージョンは2010になります ・タイトル行が1行〜18行まである入力シート(Sheet1) ・シートには他のセルに関数があるためシートの保護あり ・1ページにつき入力できるのは10行ずつで、デフォルトの設定ページは1ページのみだが、入力行の追加ボタンがあり10行ごとに増やすことが可能 ・データ量は増減するため、毎回総ページ数は違う シートの今の状態 タイトル行を除き、F列・G列・I列・J列・S列(関数入力列)にはロックされておりシートの保護設定済み 《以下にしたいこと》 D列(D19に入力した場合)に"A"を入力した場合 →F列・G列・I列・J列(F19・G19・I19・J19)をロックし、そのセルは選択できなくする D列(D19に入力した場合)に"B"を入力した場合 →F列・G列・I列・J列(F19・G19・I19・J19)をロックを解除し、そのセルに入力できるようにする 普段はマクロの記録程度の動作でなんとかしているのですが、不慣れな方にこのシートは入力してもらうためにどうしても必要なためよろしくお願いします。 < 使用 アプリ: 、使用 OS:unknown > ---- Rangeオブジェクトに対し、LockedプロパティのTrue/False を設定するマクロを書けば、実現できるのではないかと思いますよ。 (???) 2016/12/22(木) 13:46 ---- こんにちは。 久しぶりに書いてみました。 相変わらずダサダサですが、初心者の方には分かり易いのでは、と思います。 ただ、質問者さんのしたい事を満たしているかどうかは不安です。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row < 19 Then Exit Sub If Target.Column <> 4 Then Exit Sub Dim 最終行 As Integer 最終行 = Cells(Rows.Count, 4).End(xlUp).Row Dim I As Long Dim OD As String For I = 19 To 最終行 OD = Range("D" & I) If OD = "A" Then Range("F" & I).Locked = True Range("G" & I).Locked = True Range("I" & I).Locked = True Range("J" & I).Locked = True ElseIf OD = "B" Then Range("F" & I).Locked = False Range("G" & I).Locked = False Range("I" & I).Locked = False Range("J" & I).Locked = False End If Next End Sub (素人) 2016/12/22(木) 15:28 ---- セルの保護を設定して入力可、入力不可 を制御するということは、当然 シートに保護がかかっているわけです。 シート保護の際に、たとえ 書式設定を操作者に許可したとしても、セルの保護タブは表示されず 当然、マクロからの設定も 1004エラーになります。 ですから、どこかで一度、UserInterfaceOnly付のシート保護をかけておくか シート保護解除 --> セルのLockedプロパティの変更 --> シート再保護 いずれかが必要です。 かつ、保護は、いずれの場合にも、現在設定している許可条件を明示的に指定しないと 許されていた操作ができなくなりますので、注意が必要です。 (β) 2016/12/22(木) 15:30 ---- βさん、ありがとう御座います。 最初に保護解除、最後に再保護、のコードを書いていたのですが、 パスワード有りなのか、無しなのか、とかがわからなくて、 質問者さんがマクロの記録を使ってコードを書かれている様なので、 ここはやってもらえるかな、と思って消してしまいました。 (素人) 2016/12/22(木) 15:40 ---- βさんに御指摘頂きましたので、保護はパスワード有りを前提にもう一度アップします。 Private Sub Worksheet_Change(ByVal Target As Range) Sheets("Sheet1").Unprotect Password:="abcde" 'abcdeを今使っているパスワードに書きかえて下さい。 If Target.Row < 19 Then Exit Sub If Target.Column <> 4 Then Exit Sub Dim 最終行 As Integer 最終行 = Cells(Rows.Count, 4).End(xlUp).Row Dim I As Long Dim OD As String For I = 19 To 最終行 OD = Range("D" & I) If OD = "A" Then Range("F" & I).Locked = True Range("G" & I).Locked = True Range("I" & I).Locked = True Range("J" & I).Locked = True ElseIf OD = "B" Then Range("F" & I).Locked = False Range("G" & I).Locked = False Range("I" & I).Locked = False Range("J" & I).Locked = False End If Next Sheets("Sheet1").Protect Password:="abcde" 'abcdeを今使っているパスワードに書きかえて下さい。 End Sub (素人) 2016/12/22(木) 16:01 ---- 素人さま、βさま ご教授ありがとうございます。 仕事中のためすぐにお返事できずに申し訳ありません。 私がしたいと思っていたことが実現できました。 シートの保護の解除につきましては、オープンマクロにマクロからの変更は可のVBを入れていましたので、シートの保護解除がない状態でも動きました。 シートの保護があってもマクロからの変更可のVBはネットで調べている時に見つけました。 入力確認をしている際に気付いたのですが、入力間違いをしてD列のデータを消した時は元の状態に戻す(セルにロックがかかった状態)ことは可能でしょうか? 何度もお手数をおかけして申し訳ございませんが、再度ご教授よろしくお願い致します。 (かなめ) 2016/12/22(木) 16:40 ---- >>D列のデータを消した時 具体的には D列のどこをどうすることが【消した】ことになりますか? (β) 2016/12/22(木) 16:47 ---- シートに変更を加えた時にコードが走る様にしているので、 データを消して確定させればコードは走りますが、 D列に"A"か"B"を書いて変更した時だけ保護したり解除したりしますので、 データを消しても保護の状態は変更されず維持されています。 (素人) 2016/12/22(木) 16:55 ---- お返事ありがとうございます。 当方の説明不足で申し訳ありません。 D列で"B"を入力した後にそこを削除(BackSpaceもしくはDeleteで入力データを消す)すると、F列・G列・I列・J列のロックが解除されたままになってしまいます。 このため、削除した後はセルのロックをした状態に可能であればしたいと思っております。 (かなめ) 2016/12/22(木) 17:04 ---- "B"は解除ですから、確定させればコードが走って解除します。 "B"を入力して確定前に消し、確定させるとコードが走っても空白ですから、 保護の状態は"B"を入力する前の状態を維持しています。 今のコードでは解除してから、もう一度保護させるのであれば、もう一度"A"を書くしかありません。 御免なさい、帰宅しますので最後のコメントとなります。 (素人) 2016/12/22(木) 17:12 ---- D列が削除などして空白の時に必ず保護したいのであれば、 ElseIf OD = "" Then Range("F" & I).Locked = True Range("G" & I).Locked = True Range("I" & I).Locked = True Range("J" & I).Locked = True を追加すればそうなると思います。 (素人) 2016/12/22(木) 17:19 ---- コードアップしましたが、あまりにも無様というか、おバカなコードだったので 再掲します。(12/24 1:06) なお、シート上に18行のタイトル部分しか存在せず、D19 をDeteleキーでクリアする などという、いじわるな操作を行えば不具合がでます。 ↑ やはり、エラーになるのはいかがなものかと思いますし、領域の指定に間違いがありましたので 再再掲(12/24 8:49) 【削除】するのは【D列の値】なんですね? なら、すでに回答が出ていますが、A とともに空白文字もロック対象にしたらいいだけです。 (B を入れて、あっと思った。なら A を入れればいいと思いますが、空白でも、そうしたいということなんですね?) ちょっと気になっているのは、A,B,空白以外の文字が入った時。 なにもしない ということでいいのですね? 一例です。 Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range Dim r As Range Set r = Intersect(Target, Range("D19:D" & Rows.Count)) If r Is Nothing Then Exit Sub For Each c In r With c.EntireRow.Range("F1:G1,I1:J1") Select Case c.Value Case "A", Empty .Locked = True Case "B" .Locked = False End Select End With Next End Sub (β) 2016/12/22(木) 18:35 ...
https://www.excel.studio-kazu.jp/wiki/kazuwiki/201612/20161222120048.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97056 documents and 608292 words.

訪問者:カウンタValid HTML 4.01 Transitional