• ベストアンサー

セルの値によって、入力可能なセルを動的に変更したい

こんにちは。 Excelで、以下のような動作をしたいと考えています。 B列に入った値が'1'のときは、同じ行のC列・E列・H列にしか入力できないようにする。 B列に入った値が'2'のときは、同じ行のD列・F列・G列・H列にしか入力できないようにする。 (遷移できない列は、選択不可能とする) ある列に入力した値によって、動的にセルのロックを変更する・・・?というイメージなのですが、 具体的な実現方法がわかりません。 実現方法を教えていただけないでしょうか。 よろしくお願いします!!

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

セルのロックも良いが、下記のようにスキップでもできるのではないか。 Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo err1 r = Target.Row c = Target.Column Application.EnableEvents = False With Worksheets("Sheet1") If c >= 8 Then .Cells(r + 1, "B").Select GoTo err1 Else Select Case .Cells(r, "B") Case 1 If c = 2 Then n = 3 'B->C If c = 3 Then n = 5 'C->E If c = 4 Then n = 5 'D->E If c = 5 Then n = 8 'E->H If c = 6 Then n = 8 'F->H If c = 7 Then n = 8 'H->H .Cells(r, n).Select Case 2 If c = 2 Then n = 4 'B->D If c = 3 Then n = 4 'C->D If c = 4 Then n = 6 'D->F If c = 5 Then n = 6 'E->F If c = 6 Then n = 7 'F->G If c = 7 Then n = 8 'G->H .Cells(r, n).Select End Select End If End With err1: Application.EnableEvents = True End Sub =================== 既出のご回答コードを次のようにも表現できると思います。 Private Sub Worksheet_Change(ByVal Target As Range) 列などがはきり見えてよいのではと思いました。 If Target.Column <> 2 Then Exit Sub ActiveSheet.Unprotect 'シートの保護の解除 With Worksheets("Sheet1") r = Target.Row Select Case .Cells(r, "B") Case 1 'B列が1の場合 .Cells(r, "B").Locked = False .Cells(r, "C").Locked = False .Cells(r, "E").Locked = False .Cells(r, "H").Locked = False .Cells(r, "D").Locked = True .Cells(r, "F").Locked = True .Cells(r, "G").Locked = True '-- Case 2 'B列が2の場合 .Cells(r, "B").Locked = False .Cells(r, "D").Locked = False .Cells(r, "F").Locked = False .Cells(r, "G").Locked = False .Cells(r, "H").Locked = False .Cells(r, "C").Locked = True .Cells(r, "E").Locked = True End Select ActiveSheet.Protect 'シートの保護 End With End Sub

lisa_1218
質問者

お礼

回答ありがとうございます。 VBAでやろうと思います。 列の位置がはっきりわかるやり方は大変参考になりました。

その他の回答 (1)

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

Excelの機能を使うのなら C列・E列・H列を選択して「データ」「入力規則」で「ユーザー設定」 「=$B2="1"」 として入力規則を設定、D列・F列・G列・H列も同様にする。 「ツール」「シートの保護」で書式の変更を出来ないように保護を掛ける。 VBAを使うなら、B列に1,2が入ったらその内容で同じ行に ロックを掛けるか、解除するかを変更するように設定ですね。 VBAのはじめで「シートの保護の解除」を行い、最後で「シートの保護」を行えば出来ます。 ※B列のロックは解除しておいてください。 設定するシートの見出しを右クリックして、コードの表示で起動した欄に下記のコードをコピーしてご確認ください。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 2 Then Exit Sub 'B列以外は実行しない ActiveSheet.Unprotect 'シートの保護の解除 Select Case Target.Value Case 1 'B列が1の場合 Target.Offset(0, 1).Locked = False Target.Offset(0, 2).Locked = True Target.Offset(0, 3).Locked = False Target.Offset(0, 4).Locked = True Target.Offset(0, 5).Locked = False Target.Offset(0, 6).Locked = True Target.Offset(0, 7).Locked = False Case 2 'B列が2の場合 Target.Offset(0, 1).Locked = True Target.Offset(0, 2).Locked = False Target.Offset(0, 3).Locked = True Target.Offset(0, 4).Locked = False Target.Offset(0, 5).Locked = True Target.Offset(0, 6).Locked = False Target.Offset(0, 7).Locked = True End Select ActiveSheet.Protect 'シートの保護 End Sub

lisa_1218
質問者

お礼

回答ありがとうございました! VBAで作成しようと思います。 とても助かりました。

関連するQ&A

  • 同一セルに入力した値を記録

    はじめまして。 よろしくおねがいします。 同一セル(A1とB1)にデータ(文字列)、検査値を入力します。 毎回同じセルに入力するので過去のデータが消えてしまいます。 A1のデータと4行目のセルに入力されているデータが一致する列に B2に検査値入力されるたびどんどん追加されるようにしたいです。 例 A1→あ B1→100      A B C D E F G H 4行目→あ い う え お x y z 100←ここに入力されるようにしたい。      ●←次に「あ」の検査値が入力された時は下に入力したい。 ↑のような事は出来ますか? 全くの素人なのですが上司に頼まれてしまって困っています。 どうかよろしくお願いします。 どなたか助けてください;

  • 関数中にセルに入力した値を反映させて計算を行いたい

    こんにちは Excelを用いた計算を行っているのですが 自分の知識では出来なかったために皆様の知恵を借りたいと思っています Excelで単純な足し算を行いたいのですが とあるセルに入力した値によって計算範囲を変更したものを作りたいと考えています 仮にA行1列からA行20列まで各セルに1,23…20と順番に1つの数字が各セルに入力されていたとします この時, B行1列のセルに5という数字が入力されていたら C行1列にA行1列数字とA行5列の数字の和が入力される (イメージとしたら結果として1+5より6が出力される) B行1列のセルに10という数字が入力されていたら C行1列にA行1列数字とA行10列の数字の和が入力される (イメージとしたら結果として1+10より11が出力される) ような関数を作りたいと考えています 自身の甘い考えで B行1列のセルに5という数字が入力されていたら C行1列にA行1列数字とA行5列の数字の和が入力されるのは C行1列に=A1+A(B1)と入力したら出来るのではないかと考えていたのですが どうもできないみたいです なにか方法等浮かぶ方がいらしましたら回答をお願いします

  • ある条件の下でセルに値を入力するには??

    以前、似た様な質問をしたのですが、 今回は、色を付けるのではなく、値を入力することになったのですが 具体例としては ....A........B.......C.......D.......E........F..........G..........H..........J..........K 1 ....................8:00..9:00..10:00..11:00..12:00..13:00..14:00..15:00 2 ..8:00 12:00 1.....1.......1..........1..........1 3 10:00 15:00..................1..........1..........1..........1...........1..........1 このような感じにしたいのです。 (A2からB2間の時間を1行目を参照して2行目のC2以降の セルに値を入力する) 『.』は、あわせるために入れたので気になさらないでください。 色がつけるのは条件付書式で解決しました。 ですが、今回は値を入力する形にして セル内に数値が入力されていると 条件付書式で色を付けたいと考えております。 どうか、ご教授していただけないでしょうか? ちなみに、これはマクロで可能なのでしょうか?

  • セルの値と色を変えたい

    OS WIN10 Office2007の環境で A列B列C列で各行は20づづあります 実現したいのは 1. D列に文字列(D2に)Hが入力されると、その行のB列(B2)の値を削除2の行(A2 B2 C2)の背景色を黄色にしたい 2. D列に文字列(D2に)Gが入力されると、その行のB列(B2)の値を削除2の行(A2 B2 C2)の背景色を緑色にしたい 条件付き書式とか設定していますが うまくいきません ご指南ください

  • Excel 値の入っているものを抽出して連結

    Excel2013を使用しています。 行に値の入っているセルのみを別セルにひとまとめにしたいのです。 イメージのBからE列の値をF列に抽出して連結させる関数をお教えください。

  • Excelの入力式について

    Excelの入力式について教えてください。 たとえば、A1セル~F1セルに数値が入っていて、G1セルA1+B1の値、H列にC1+D1の値 I列にE1+F1の値としたい場合、 G1セルに数式を入れてH列にコピーするとB1+C1になってしまいます。 上手くやる方法はないのでしょうか。 1列ずつわざわざ空白列を作るのは嫌ですし、たくさんあったら数式を打ち込むのも大変です。。。

  • 行と列を指示して表中の値を表示する方法を教えて下さい。

    ある行と列を指示して下表の様な値を表示する方法を教えて下さい。 例)A1セルに2行と入力、A2セルに4列と入力をしたら、A3セルに答えの"8"が出るようにしたい。 1列 2列 3列 4列 5列 1行 A B C D E 2行 1 5 6 8 9 3行 F G H J K 4行 3 4 1 5 8 5行 T R W A S

  • Excel2003 2つのシートから相互にセルの値を変更したいのですが

    Excel2003を使用して2つのシートにあるセルの値を相互に変更できるようにしたいのですが。 例えば Sheet2 のセル A1 に =Sheet1!A1 と入力しておけば Sheet1 のセル A1 に 80 と入力すると Sheet2 のセル A1 は 80 と表示されますが,この状態で Sheet2 のセル A1 に別の値を入力すると,もう Sheet1 のセル A1の値を参照しなくなってしまいます。 そこで教えていただきたいことがあります。 Sheet1 のセル A1 に値(例えば80)を入力すると Sheet2 のセル A1 の値も同じ値(例えば80)になり,逆に Sheet2 のセル A1 に値(例えば80)を入力すると Sheet1 のセル A1 の値も同じ値(例えば80)になるように相互に値が変化できるようにしたいのです。 具体的に私がしたいことは (1) Sheet1 ~Sheet6 の A列 には同じ40人の名簿を使う。 (2) Sheet1 の B列 には国語の得点,同様に Sheet5 まで社会,数学,理科,英語の得点を入力。(本来は複数のテストの合計得点として, K列 にしたいのですが,今回は B列 ということでお願いします。) (3) Sheet1 ~ Sheet5 のセル D1 にそれぞれの教科の合格に必要な得点を入力。 (4) Sheet1 ~ Sheet5 の C列 には =if(B2>=D1,"○","×") のような数式を入力し,合格なら○,不合格なら×を表示するようにする。 (5) Sheet6 の B列 ~ F列 にはそのぞれの教科の○,×が参照されるようにし,B列 ~ F列の42行目にそれぞれの教科の合格に必要な点数が参照されるようにする。 (1)~(5)をすれば, Sheet1 ~ Sheet5 を見れば教科ごとの合格者が分かり, Sheet6 を見たときに誰がどの教科で合格か不合格か分かります。 Sheet6 の全教科の合格者数をみて,それぞれの教科の合格に必要な点数を上げたり,下げたりしたいのです。 Sheet1 ~ Sheet5 に戻れば,合格に必要な点数の上げ下げが可能なのですが, Sheet6の B列 ~ F列 の42行目でも合格に必要な点数の上げ下げをできるようにしたいのです。もちろん Sheet6 で合格に必要な点数を上げ下げしたときには, Sheet1 ~ Sheet5 の合格に必要な点数をも反映されるようにしたいのです。 長文で分かりにくいかもしれませんが,いい方法があれば教えてください。よろしくお願いします。

  • エクセルで数字が入ったセルの値を抽出

    任意1行中のある1列にFALSEと1列だけ数字が入っています(下図参照)。その数字を抽出する関数があれば教えて下さい。 下図の例では、Fの列にB2:E2の範囲の数字「10」を抽出したいのです。マクロを組めば可能なのですが、セルに入力する関数等で簡単に実現できればと思います。 アドバイス宜しくお願いします。

  • 結合セルに結合していないセルの値を貼り付けたいです。

    結合セルに結合していないセルの値を貼り付けたいです。 シート1の1行目の[A1-B1-C1-D1]を結合しています。以下同じように[E1-F1-G1-H1]…のように4つづつ結合しています。 この行に、シート2のA1→B1→C1と続く結合していないセルのデータを貼り付けたいのですが、やりかたがわかりません。色々やってみたのですが、うまくゆきません。ご教授お願いいたします。

専門家に質問してみよう