• 締切済み

エクセルで必須入力

A列のどこかに入力があるとその行のB~Eまでを必須入力としたいのですが 良い方法はありますでしょうか。 マクロでは無く、できれば関数で簡単にできると助かります。 例A1のセルに入力があるとB1、C1、D1、E1を必須入力とする。 保存時に空白だとメッセージ等で警告を出すか、保存できないようにする。

みんなの回答

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

エクセル関数の本質ことがよ判ってないよ。 A1にデータだ入ったら、必須入力だと言うのをどういう風に伝えるかをよく考えたか。B列に警告などの文字列を出すことは出来ないことは無いが、そこにデータを入れるとその式はデータに置き換わり消える(エクセル関数の本質・特徴)。 それでもよければ、 B1に =IF(A1="","","要入力")の式を入れておく。 A1に何か入れると、B列は「要入力」ガ見える。 B1にデータ(例えば)3を入れるとすると、B1は3になり、もちろん「要入力」は見えなくなる。 ーー しかし、エクセルではこういった関数の使い方は、使わない。 使いたいなら使って。 B列には式を複写しておくことになる。1旦B1にデータを入れて消すと元に戻らないわね。 ーー VBAでならA1にデータが掃いたtことを(イベントと言うで)とらえられるから、メッセージを出せる。 記述は略。 === 条件付書式で jB2セルを選択して、書式ー条件付き書式ー数式が、で =AND(A2<>"",B2="") 書式にセルの色で色を設定。 A2にデータを入れるとB1セルに色がつく。 B2セルにデータを入れると色が消える。 関数と違って、B2セルのデータを削除すると、セルの色が消える。 色がついている意味が使用者に判るかどうか、難しいがね。

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

先の手順でマクロのシートを広げ,先のマクロを完全に消して下記に差し替えます。 private sub Workbook_BeforeClose(Cancel as boolean)  dim h as range  on error resume next  if application.counta(worksheets("Sheet1").range("A:A")) = 0 then exit sub  for each h in worksheets("Sheet1").range("A:A").specialcells(xlcelltypeconstants)  if h <> "" then  if application.counta(h.offset(0, 1).resize(1, 4)) <> 4 then   msgbox "必須セルが入力されていません"   worksheets("Sheet1").select   h.offset(0, 1).resize(1, 4).select   cancel = true   exit sub  end if  end if  next end sub #以後の応用は,まぁなんとか自力でやってみてください。

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

>保存時に空白だとメッセージ等で警告を出すか、保存できないようにする。 いずれも関数やエクセルの一般機能では出来ません。いやでもマクロを使った方が目的は達成できます。 ○とりあえず一般機能だけで出来ること A1を選択した際(入力する前)に,「続いてB~Eも入力が必要です」と事前メッセージを出すことは,入力規則を使ってできます A1に記入した後,B~Eに入力しないと「次にユーザーが入力したがりそうなセル」に「入力できない」ようにする(警告を出す)ことなら,入力規則を使ってできます A1を入力した後,B~Eに条件付き書式を使って入力欄であることをアピールするなどを併用するのも良い方法です。 #参考 マクロの使い方 ブックをエクセルウィンドウの中で「最大化ではない状態」にする ブックウィンドウの左上部分,ブック名の左隣に表示されているアイコンを右クリックしてコードの表示を選ぶ 現れたシートに下記をコピー貼り付ける private sub Workbook_BeforeClose(Cancel as boolean)  if worksheets("Sheet1").range("A1") <> "" then  if application.counta(worksheets("Sheet1").range("B1:E1")) <> 4 then   msgbox "必須セルが入力されていません" & vblf & "B1,C1,D1,E1を記入してください"   cancel = true  end if  end if end sub ファイルメニューから終了してエクセルに戻り,一度ブックを保存する シート1のA1に記入があると,シート1のB1からE1に記入するまでブックを閉じさせない。

tomoto21
質問者

お礼

早速の回答ありがとうございました。 やはりマクロでないとだめなんですね^^; テストしてみた結果、ほぼ理想通りですが下記にも対応するにはどうしたらよいでしょうか? 今回はA1セル限定でしたが、A列のどこかに入力があるとその入力のあったA行のB~Eまでが 必須としたい。 よろしくお願いします。

関連するQ&A