• ベストアンサー

●エクセルのセルロックについて…

●エクセルのセルロックについて… 見積書をせいさくしていますが、数量と単価を掛けて合計金額を設定しています。合計金額の数式にロックをかけて数式がDeleteによって削除されないようにしていますが、場合によっては… 数量が「1式」 単価を「空白」 にして、金額を自分で入力するときがあるのですが、 いちいちロックを解除しないとダメでしょうか? わかりにくい説明で申し訳ありませんが、いい方法があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

>Iに一式と入力してもKのロックが外れませんでした… ふむ。それは事実とは違いますね。 ではコピーしたマクロを消して、代わりに次のマクロを貼り付けます。 private sub Worksheet_Change(byval Target as excel.range)  dim h as range  activesheet.protect userinterfaceonly:= true  on error resume next  for each h in application.intersect(target, range("I:I"))  if h = "一式" or h = "1式" or h = "1式" then   cells(h.row, "K").locked = false   cells(h.row, "K").clearcontents  else   cells(h.row, "K").formular1c1 = "=IF(RC[-2]="""","""",RC[-2]*RC[-1])"   cells(h.row, "K").locked = true  end if  next end sub #余談 >したかったことは したかったことはご自分のヤリタイ事だけで、寄せられた回答に対してキャッチボールしたりとかには全く興味ないってことがわかりました。

libert11
質問者

お礼

何回もどうもありがとうございました! 思い通りの見積書ができました。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

わざわざ補足してくれたようですが、それで何を聞きたいのか肝心の事が書かれてないので、マニアな方法でも解説してみます。 準備: シートは「パスワード無し」でシートの保護をしておく 手順: シート名タブを右クリックしてコードの表示を選ぶ 現れたシートに下記をコピー貼り付ける private sub Worksheet_Change(byval Target as excel.range)  dim h as range  activesheet.protect userinterfaceonly:= true  on error resume next  for each h in application.intersect(target, range("I:I"))  if h = "一式" then   cells(h.row, "K").locked = false   cells(h.row, "K").clearcontents  else   cells(h.row, "K").formular1c1 = "=IF(RC[-2]="""","""",RC[-2]*RC[-1])"   cells(h.row, "K").locked = true  end if  next end sub ファイルメニューから終了してエクセルに戻る I列に一式と記入すると、K列のロックを解除する それ以外では掛け算を復元しロックする。

libert11
質問者

補足

とてもありがたい回答ありがとうございます。 したかったことは、普通はこの『I×J』の数式でKに金額が出るようにしておいて、 Iに1式と入力したときだけKのロックが解除されて、手動入力できればな…と 思いまして…。 見積書なので、単価記入せずに1式とまとめてしまうことも度々なので。 あと、上記のものをコピーして貼り付けたのですが、 Iに一式と入力してもKのロックが外れませんでした… エクセル、奥が深くて難しいです(・・;)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

シートの保護の機能に関して言えば、「イチイチ解除する」しか方法はありません。 #敢えて言うと、ご利用のエクセルのバージョンに応じた方法で「範囲の編集を許可」などの機能を使い、シート保護の状態のままシート保護を上書きして編集を許可する(数式を消して生数字を記入できる)設定を取り付けることも、できます。  自分で使う分には、結局シート保護を解除するのとあまり大差はありませんが。 #別の方法 D2にいま =B2*C2 のように掛け算を入れてシートを保護したとすると、 たとえばD2の式を =IF(B2="一式",1,B2)*C2 とでもしておき、一式の時は素直に単価欄に単価を記入、代わりに該当セルに「表示しない設定」としてセルの書式設定の表示形式のユーザー定義で ;;; としておくような手も可能です。 こちらもご利用のエクセルのバージョンが不明なので詳細は割愛しますが、エクセル2007以降を使い、単価列に条件付き書式を取り付けて数量に一式が記入された場合は;;;の表示形式を発動するように仕込んでおくような手も利用できます。 #更にマニアな方法: まぁ、やれば出来るという事では、自動起動マクロをシートに組み込み、一式が記入された場合に限り該当合計欄の「セルのロック」を自動解除させるような仕込みも可能は可能です。 興味があるようなら、具体的にどこ列に何を記入してどんな具合に使うのか、あなたの実際のエクセルの目に見える姿をキチンと情報として添えて、別途ご相談を投稿してみて下さい。

libert11
質問者

補足

お返事ありがとうございます。 使用しているのは、エクセル2010です。   I    J    K 『数量』 『単価』 『金額』 です。