Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8939 / 13644 ツリー ←次へ | 前へ→

【30171】入力制限 VBAビギナー 05/10/21(金) 10:07 質問[未読]
【30175】Re:入力制限 Statis 05/10/21(金) 10:36 回答[未読]
【30204】Re:入力制限 VBAビギナー 05/10/21(金) 15:35 質問[未読]
【30214】Re:入力制限 ni 05/10/22(土) 0:21 回答[未読]
【30217】Re:入力制限 Statis 05/10/22(土) 8:55 回答[未読]
【30220】ありがとうございました。 VBAビギナー 05/10/22(土) 11:57 お礼[未読]

【30171】入力制限
質問  VBAビギナー  - 05/10/21(金) 10:07 -

引用なし
パスワード
   いつもお世話になっています。
たくさんの人が使うエクセルファイルで例えばA3の所に佐藤と入力してシートが開き、鈴木と入力してシートが開かないようにコードを作成したいのですがそのことは可能でしょうか?自分なりにシートを変更するコードを作成しましたがうまくいきません。
このコードをステップ実行で行っても、3行いったりきたりするだけです。


Private Sub Worksheet_Change(ByVal Target As Range)
Set abc = Range("A3")
abc.Value = "佐藤" ←ここに名前を並べても実行しなかったので、

上記のコードとは別にChoose関数を使い下記のコードを作成しました。セルにChoose関数の中に明記されてある森をセルA3に入力するとエラー表示され、このシートのセルのカーソルを移動する際名前がみつかりませんと表示され、このシート毎消えてしまいます。
NewSheet.Deleteがあるから消えるというのはわかりますが、カーソルを移動
した時なぜ名前がみつかりませんと表示されるのかわかりません。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim getchoice
Dim NewSheet As Worksheet

On Error GoTo ryou
 

 Set NewSheet = Sheets(2)
 Set tommy = Range("A3")
  getchoice = Choose(tommy, "佐藤", "田中", "森")
Exit Sub

ryou:
  If Err.Number = 13 Then
    Msg = "名前がみつかりません"
    MsgBox Msg, , "エラー", Err.HelpFile, Err.HelpContext
    Application.DisplayAlerts = False
    NewSheet.Delete
    Application.DisplayAlerts = True
On Error Resume Next
End
End If
End Sub

【30175】Re:入力制限
回答  Statis  - 05/10/21(金) 10:36 -

引用なし
パスワード
   こんにちは
こう言う事がしたいのかな?

Private Sub Worksheet_Change(ByVal Target As Range)
Dim getchoice, tommy

If Target.Address(0, 0) <> "A3" Then Exit Sub

tommy = Array("佐藤", "田中", "森")
getchoice = Application.Match(Target.Value, tommy, 0)

If Not IsError(getchoice) Then
  MsgBox "シートを開いて良いよ"
Else
  MsgBox "シートを開けないよ"
End If

End Sub

【30204】Re:入力制限
質問  VBAビギナー  - 05/10/21(金) 15:35 -

引用なし
パスワード
   Statis さん回答有難うございます。
A3に名前を入力し、B3に日付を入力し、マクロを実行する時にシートが追加され
A3とB3のセル名が反映されるコードを作っています。
また名前のチェックによりシートを追加する・しないというコードを作成しようと思っています。説明不足で申し訳ないです。


>tommy = Array("佐藤", "田中", "森")

上記のコードについて質問なのですが、このコードは意味として下記(もちろん実行できませんけど)と同じ事を意味しているのですか?

abc.Value="佐藤"
abc.Value="田中"

【30214】Re:入力制限
回答  ni  - 05/10/22(土) 0:21 -

引用なし
パスワード
   こんにちは

色々なケースと比較するなら、

Select Case Range("A1").Value
  Case "佐藤", "田中","森": MsgBox "OK"
  Case Else: MsgBox "NG"
End Select

という方法も使えそうですね。

【30217】Re:入力制限
回答  Statis  - 05/10/22(土) 8:55 -

引用なし
パスワード
   ▼VBAビギナー さん:
>Statis さん回答有難うございます。
>A3に名前を入力し、B3に日付を入力し、マクロを実行する時にシートが追加され
>A3とB3のセル名が反映されるコードを作っています。
>また名前のチェックによりシートを追加する・しないというコードを作成しようと思っています。説明不足で申し訳ないです。
>
>
>>tommy = Array("佐藤", "田中", "森")
>
>上記のコードについて質問なのですが、このコードは意味として下記(もちろん実行できませんけど)と同じ事を意味しているのですか?
>
>abc.Value="佐藤"
>abc.Value="田中"

違います。上記のコードだとセルA3に「佐藤」次に「田中」と入力しているだけです。
実行するとセルには「田中」のみ表示されています。
私のは配列に値をセットしているのです。

【30220】ありがとうございました。
お礼  VBAビギナー  - 05/10/22(土) 11:57 -

引用なし
パスワード
   niさん、Statisさん回答有難うございました。自分が悩んでいた悩みが
無事解決いたしました。

8939 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free