
大変困っています。
9月の連休に向けて、勤務シフトを組むにあたり、
Excelで入力シートを作っています。
何月何日→○、×をリストから選んでもらう形式です。
そこで、たとえばすべて×という選択ができないように設定したいのです。
当方100人規模のシフトを作っており、
全員に口頭で言うのもなんですので、デフォルトで全部×を禁じたいのです。
いろいろ調べていますが、
プルダウン設定で「入力規則」を使用しており、
範囲内で「×」の個数を数え、一定数以上ならあるセルに「FALSE」が
出るようにはしたのですが、
「入力規則」で違ったデータを入力したときのように、
別ウインドウで禁止テロップを出したいのです。
何か方法ありますでしょうか???
No.3ベストアンサー
- 回答日時:
今家にあるのはExcel2002なので、それで説明します。
(1)メニューの「ツール:マクロ:Visual Basic Editor」をクリックする。
(2)「Microsoft Visual Basic - ブック名」の画面が表示されるので、左側に表示されている「Sheet1(シート名)」をダブルクリックする。
(3)表示される「ブック名 - Sheet1(コード)」の画面に下記のマクロを記述する。(コピー&ペーストしてください)
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row >= 5 And Target.Row <= 35 And Target.Column >= 4 And Target.Column <= 5 Then
If Not Cells(44, 14).Value Then
MsgBox "エラーメッセージ"
End If
End If
End Sub
("エラーメッセージ"の部分は表示したいメッセージを記述してください。)
以上で完了です。
Excel2003はExcel2002と同じですが、Excel2007は画面のメニューやボタンがExcel2003とは大幅に変わっています。
Excel2007の場合、「Microsoft Visual Basic - ブック名」の画面を表示できれば後は同じです。
もしどうしても「Microsoft Visual Basic - ブック名」の画面を表示できない場合は明日また回答しますので、状況を知らせてください。
I5:K35の部分は意味が分からなかったので無視しています。
大変ご丁寧な指導、本当にありがとうございました!!
アルファベットの列が数字に置き換わるわけですね。
理想どおりにエラーメッセージが出て満足しています。
甘えついでにもう少しお願いです。あつかましくてすいません。
例えば、このままだと、別に×のままでもエラーをスルーすれば
保存できるわけですが、×を解除しないと次に進めないような
設定ってできますか???
No.4
- 回答日時:
>×を解除しないと次に進めないような設定ってできますか?
次に進めないような設定というのは分かりませんが、別の方法として次の2つが考えられます。
1.メッセージを出した後に×を強制的に消す。
2.終了するときに再度チェックして、エラーなら終了できないようにする。
1の方法は、
MsgBox "エラーメッセージ"
の後に、
Target.Value = ""
を追加してください。
そうすると、OKを押した直後×がクリアされます。
2の方法は、次のコードをThisWorkbookのコード画面に記述してください。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not Cells(44, 14).Value Then
MsgBox "エラーメッセージ"
Cancel = True
End If
End Sub
上記の「Cancel = True」で閉じる処理がキャンセルされますので、エラーを解消しない限り終了することができなくなります。
ThisWorkbookのコード画面は、「Microsoft Visual Basic - ブック名」の画面の左側に表示されている「ThisWorkbook」をダブルクリックすると表示されます。
No.2
- 回答日時:
>適当なセルを選択しておいて、「マクロ」を選んで、この構文を入力した後に、どうすれば登録できるのでしょう??
マクロの登録はそういう方法ではありません。
Excelのバージョンによっても操作方法が少し違います。お使いのExcelのバージョンは何でしょうか。
また、前述のマクロのコードは完全ではありません。マクロ初心者ということであれば、必要ならある程度使えるものを作ってみますので次のことを教えてください。
・日付は横に並べているのですか?それとも縦ですか?
・○、×を入力するセルの範囲は?
・「FALSE」を表示するセルの範囲は?
・「FALSE」を表示するセルの計算式は?
・禁止テロップを出したいシートは1つだけですか?複数ありますか?
・複数ある場合、禁止テロップを出す必要がないシートもありますか?
・禁止テロップを出す必要がないシートがある場合、出すか出さないかをシート名で区別できますか?
なお、前述のマクロのコードで、1行目が間違ってました。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ではなくて、
Private Sub Worksheet_Change(ByVal Target As Range)
でした。
大変親切にありがとうございます。
それではお言葉に甘えさせていただきます。
Excelは2007ですが、2003対応の職員もいるので、両方対応できるようにとは思っています。
・日付は縦に並んでおり、時間枠5枠(2+3)が横に並んでいます。
・○・×に関しては、D5:E35と、I5:K35(31日間の場合)になります。
このセルではすべてリストから○×を選ぶ方式です。
・FALSEを出すために、N43くらいを=COUNTIF(D5:E35,"×")として
N44くらいに=IF(N43<20,TRUE,FALSE)で、多くの枠で×を選択しすぎ
るとN44にFALSEが表示されます。
・シートはひとつだけですので、禁止テロップはそのシートだけでOKです。
休みの日に大変な親切に敬服しております。
どうぞよろしくお願いします。
No.1
- 回答日時:
BVAで、セルが変更されたときに「FALSE」になったかどうかを調べてメッセージを出すことができます。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Cells(?, ?) = "FALSE" Then
MsgBox "エラーメッセージ"
End If
End Sub
引数のTargetは変更されたセルのRangeですので、誰の分を入力したかを判断することもできます。
本当にありがとうございます。
マクロはスーパー初心者な私ですので、
ちょこっと基礎的なことをお教えいただけると幸いです。
適当なセルを選択しておいて、
「マクロ」を選んで、この構文を入力した後に、
どうすれば登録できるのでしょう??
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
他シートのある列を検索して一...
-
Googleスプレッドシートで合計...
-
数値を、excelのMOD関数で出た...
-
ローマ字入力で「トゥ」を入力...
-
1点の辻の字に変換したいがエク...
-
ネットカフェから、メールでき...
-
けさ、ツイッター(X)を開いたら
-
すべてのシートを選択してエク...
-
エラーが表示される
-
iMacキーボードの入力 小文字の...
-
OCNメールのバグ?
-
SNSのXのドメイン
-
Excelでエラー(#N/Aなど)値を...
-
ExcelでVBAを使用した際に、『...
-
エクセルからアクセスにインポ...
-
至急お願いします!! Wordで、...
-
word の文字入力 文字が青色に...
-
「メールが届きませんでした」...
-
Eエクセルの計算方法で空欄を0...
-
送信エラー時、レポートメール...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで0.0と表示したい
-
エクセルで網掛けをしたセルを...
-
excelで小数点0を表示させる方法
-
エクセルの文字列を結合しても...
-
【EXCEL】関数で計算された数字...
-
他シートのある列を検索して一...
-
vlookupで返された値が空白だっ...
-
Googleスプレッドシートで合計...
-
エクセル 絶対値の合計
-
エクセル .50以下で切り捨て、...
-
EXCELで上位10個のデータを平均...
-
Excelで合計の金額を違うセルに...
-
エクセル 背景色のついたセル位...
-
Excelで方眼紙を作り、そこに手...
-
エクセルで運賃計算
-
Excel VBAにてUserFormのTextBo...
-
スプレッドシートに関して コピ...
-
エクセルへバーコードリーダー...
-
EXCEL VBA 選択範囲をTargetに
-
大学からの宿題で少しアドバイ...
おすすめ情報