Excel VBA質問箱 IV

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

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


8886 / 13646 ツリー ←次へ | 前へ→

【30513】否定の方法 VBAビギナー 05/10/29(土) 9:03 質問[未読]
【30514】Re:否定の方法 かみちゃん 05/10/29(土) 9:18 回答[未読]
【30515】Re:否定の方法 VBAビギナー 05/10/29(土) 9:55 回答[未読]
【30516】Re:否定の方法 かみちゃん 05/10/29(土) 10:15 回答[未読]
【30517】Re:否定の方法 VBAビギナー 05/10/29(土) 10:52 回答[未読]
【30522】Re:否定の方法 かみちゃん 05/10/29(土) 11:33 発言[未読]
【30528】Re:否定の方法 VBAビギナー 05/10/29(土) 12:52 回答[未読]
【30529】Re:否定の方法 かみちゃん 05/10/29(土) 13:07 回答[未読]
【30537】Re:否定の方法 VBAビギナー 05/10/29(土) 18:10 回答[未読]
【30538】Re:否定の方法 かみちゃん 05/10/29(土) 18:24 発言[未読]
【30539】Re:否定の方法 VBAビギナー 05/10/29(土) 18:58 回答[未読]
【30540】Re:否定の方法 かみちゃん 05/10/29(土) 19:09 発言[未読]
【30542】Re:否定の方法 VBAビギナー 05/10/29(土) 23:17 お礼[未読]

【30513】否定の方法
質問  VBAビギナー  - 05/10/29(土) 9:03 -

引用なし
パスワード
   いつもお世話になっております。
名前のチェックをすることによりシートを追加する・しないというマクロを作成しています。シートを追加する・しないというマクロは作成しているのですが、
ここのシートでは名前のチェックを行いたいのです。
下記のマクロの1.の所はきちんと実行され、
では上手く実行されます。
しかし2.の所では型が一致しませんとエラーがでます。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$3" Then
If Target = "佐藤" Or Target = "田中" Or Target = "森" Then Exit Sub・・・1.
ElseIf Not Target Then・・・2.
  MsgBox "名前が見つかりません"
End
End If
End Sub
質問ですが
2.の所で1.を否定する、つまり田中、佐藤、森以外の名前を入力して
名前がみつかりませんと表示させる方法ってありますか?

【30514】Re:否定の方法
回答  かみちゃん  - 05/10/29(土) 9:18 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>2.の所で1.を否定する、つまり田中、佐藤、森以外の名前を入力して
>名前がみつかりませんと表示させる方法ってありますか?

 If Target.Address <> "$A$3" Then
  If Target = "佐藤" Or Target = "田中" Or Target = "森" Then
   Exit Sub '・・・1.
  Else
   MsgBox "名前が見つかりません"
  End If
 End If
でいいのではないでしょうか?

【30515】Re:否定の方法
回答  VBAビギナー  - 05/10/29(土) 9:55 -

引用なし
パスワード
   回答有難うございます。
> If Target.Address <> "$A$3" Then
>  If Target = "佐藤" Or Target = "田中" Or Target = "森" Then
>   Exit Sub '・・・1.
>  Else
>   MsgBox "名前が見つかりません"
>  End If
> End If
佐藤と入力しても名前がみつかりませんと表示されてしまいます。ステップ実行で行っても表示されてしまいます。

【30516】Re:否定の方法
回答  かみちゃん  - 05/10/29(土) 10:15 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>佐藤と入力しても名前がみつかりませんと表示されてしまいます。

ワークシートモジュールに記述していますよね?
私は、Excel2002 SP3で、A1に「佐藤」と入力すると何も表示されませんし、「VBA」と入力すると「名前が見つかりません」と表示されました。
ちなみに以下のようなコードにするとどうなりますか?
Targetのアドレスがどうなっているのかな?と。

If Target.Address <> "$A$3" Then
 If Target.Value = "佐藤" Or Target.Value = "田中" Or Target.Value = "森" Then
  MsgBox "OK"
  Exit Sub '・・・1.
 Else
  MsgBox "名前が見つかりません" & vbCrLf & Target.Address & " " & Target.Value
 End If
Else
 MsgBox "入力チェック範囲外 " & Target.Address
End If

【30517】Re:否定の方法
回答  VBAビギナー  - 05/10/29(土) 10:52 -

引用なし
パスワード
   VBAを勉強しはじめたばかりで
サンプルを応用して自分なりに作っているため、
ちょっと質問の仕方が悪かったと思い反省しています。

>ワークシートモジュールに記述していますよね?
はい。標準モジュールのコードも下記に書いています。

>私は、Excel2002 SP3で、A1に「佐藤」と入力すると何も表示されませんし、「VBA」と入力すると「名前が見つかりません」と表示されました。
>ちなみに以下のようなコードにするとどうなりますか?
佐藤や田中、森と入力しても名前がみつかりませんと表示されてしまい、
セルA3に入力しているようにしているのですが、そこで名前を消したりすると、
入力チェック範囲外と表示されてしまいます。エクセル2000です。

>Targetのアドレスがどうなっているのかな?と。
Targetが引数というのはわかるのですが、意味をわからず使用しているため、
ただ単に名前のチェックを行いたいという希望のもと使用しています。
ちなみにステップ実行を行うと
.Range("B3") = Date
の所で黄色くなり、シートモジュールにとびます。

Option Explicit

Sub 新清算書シート作成()
'' 新清算書シート作成 Macro
' 新しいシートに交通費清算書を作成する
Dim NewSheet As Worksheet
Dim myno As String
Dim 年
Dim 月
Dim 日
 On Error Resume Next
  Call シートの追加
    Set NewSheet = Sheets(2)
    With Worksheets("メニュー")
      .Range("B3") = Date
        年 = CStr(Year(.Range("B3").Value))
        月 = CStr(Month(.Range("B3").Value))
        日 = CStr(Day(.Range("B3").Value))
       NewSheet.Name = .Range("A3").Value & 年 & 月 & 日
       NewSheet.Range("D4").Value = .Range("A3").Value
       NewSheet.Range("F4").Value = .Range("B3").Value
    End With

End Sub
Public Sub シートの追加()
Dim NewSheet As Worksheet
Sheets("新清算書").Copy Before:=Sheets(2)
Set NewSheet = Sheets(2)
End Sub

【30522】Re:否定の方法
発言  かみちゃん  - 05/10/29(土) 11:33 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>ワークシートモジュールに記述していますよね?
>はい。標準モジュールのコードも下記に書いています。

最初にご提示いただいたコードは、標準モジュールではなく、シートモジュールに
書いてあるということでいいでしょうか?
今回ご提示いただいたコードは、特に関係ないと思います。

>>私は、Excel2002 SP3で、A1に「佐藤」と入力すると何も表示されませんし、「VBA」と入力すると「名前が見つかりません」と表示されました。
>>ちなみに以下のようなコードにするとどうなりますか?
>佐藤や田中、森と入力しても名前がみつかりませんと表示されてしまい、
>セルA3に入力しているようにしているのですが、そこで名前を消したりすると、
>入力チェック範囲外と表示されてしまいます。エクセル2000です。

最初にご提示いただいたコードでは、
If Target.Address <> "$A$3" Then
となっていますから、A3以外に入力したときにチェックの処理は行なわれます。
つまり、A3セルに入力すると「入力チェック範囲外」と一応表示するようにしています。
そうではないのでしょうか?

あと、私があとから提示したコードは、
「名前が見つかりません
 $A$1 VBA」
などと、入力したセルとその値が表示されるようにしてあるのですが、どのように表示されましたか?

>>Targetのアドレスがどうなっているのかな?と。
>Targetが引数というのはわかるのですが、意味をわからず使用しているため、

はい、ひとつのセルにのみ入力しているのか?入力方法を知りたいと思います。
また、過去ログからWorksheet_Changeで検索してみてください。
Targetに関するエラー処理がされているコードが結構あると思います。

>ちなみにステップ実行を行うと
>.Range("B3") = Date
>の所で黄色くなり、シートモジュールにとびます。

このコードは、お初にお目にかかります。
どこにそういうコードがあるのでしょうか?

【30528】Re:否定の方法
回答  VBAビギナー  - 05/10/29(土) 12:52 -

引用なし
パスワード
   ▼かみちゃん さん:
VBA素人の質問に回答または指摘してもらい、嬉しく思い、
また申し訳なく思っています。

>最初にご提示いただいたコードは、標準モジュールではなく、シートモジュールに
>書いてあるということでいいでしょうか?

はい。シートモジュールにかいています。

>今回ご提示いただいたコードは、特に関係ないと思います。

一応標準モジュールも提示しておいた方が、マクロの全体的な流れがわかると思い、
提示させて頂きました。すいません。

>最初にご提示いただいたコードでは、
>If Target.Address <> "$A$3" Then
>となっていますから、A3以外に入力したときにチェックの処理は行なわれます。
>つまり、A3セルに入力すると「入力チェック範囲外」と一応表示するようにしています。
>そうではないのでしょうか?

A3以外に入力したときにチェックの処理が行われるというのは知っていました。
しかし
If Target.Address="$A$3"Then
で佐藤と入力し実行しても
名前がみつかりません。
と表示されたため
If Target.Address <> "$A$3" Then
と変更してしまいました。

>あと、私があとから提示したコードは、
>「名前が見つかりません
> $A$1 VBA」
>などと、入力したセルとその値が表示されるようにしてあるのですが、どのように表示されましたか?

「名前がみつかりません
 $B$3 2005/10/29」
と表示されます。

>はい、ひとつのセルにのみ入力しているのか?入力方法を知りたいと思います。
一つのセル(A3)にのみ名前を入力しています。

>また、過去ログからWorksheet_Changeで検索してみてください。
>Targetに関するエラー処理がされているコードが結構あると思います。

検索して研究しようと思います。

>.Range("B3") = Date
>このコードは、お初にお目にかかります。
>どこにそういうコードがあるのでしょうか?

先ほど書いた標準モジュールの14行目に書いてあります。

すいません。なんか申し訳ないです。

【30529】Re:否定の方法
回答  かみちゃん  - 05/10/29(土) 13:07 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>>あと、私があとから提示したコードは、
>>「名前が見つかりません
>> $A$1 VBA」
>>などと、入力したセルとその値が表示されるようにしてあるのですが、どのように表示されましたか?
>
>「名前がみつかりません
> $B$3 2005/10/29」
>と表示されます。

やっと、わかりました!
.Range("B3") = Date
このコードの書いてある場所もわかりました。(私の見落としです。すみません。)
つまり、名前を入力したからではなく、A3以外のセル(ここではB3セル)の値がマ
クロにより変更された(Date つまり 2005/10/29)から、そのチェックが行なわれ
ています。

A3に入力した値をチェックしたいのであれば、
私が提示したコードの
If Target.Address<>"$A$3"Then

If Target.Address="$A$3"Then
としてみてください。
今度はうまくいくと思います。

今回のご質問内容は、前提条件(どこのセルに入力したらチェックをしたいなど)
が書かれていないことがひとつ原因となっていると思います。
ご質問の際には、前提条件、元データ、期待する結果を書かれていると割りと簡単
に答えはわかると思います。
がんばってください。

【30537】Re:否定の方法
回答  VBAビギナー  - 05/10/29(土) 18:10 -

引用なし
パスワード
   回答有難うございます。

If Target.Address = "$A$3" Then
 If Target.Value = "佐藤" Or Target.Value = "田中" Or Target.Value = "森" Then
  MsgBox "OK"
  Exit Sub '・・・1.
 Else
  MsgBox "名前が見つかりません" & vbCrLf & Target.Address & " " & Target.Value
 End If
Else
 MsgBox "入力チェック範囲外 " & Target.Address
End If
このコードで実行してみましたが、A3のセルに佐藤と入力すると、
「入力チェック範囲外 $B$3」
という風に表示されます。
If Target.Address = "$A$3" Then
でA3のセルを取得しているはずなのになぜ
MsgBox "入力チェック範囲外 " & Target.Address
で$B$3と表示されるのがわかりません。
ちなみに
MsgBox "名前が見つかりません" & vbCrLf & Target.Address & " " &
ではきちんと
「名前がみつかりません
$A$3 名前」
というように表示されます。

【30538】Re:否定の方法
発言  かみちゃん  - 05/10/29(土) 18:24 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>このコードで実行してみましたが、A3のセルに佐藤と入力すると、
>「入力チェック範囲外 $B$3」
>という風に表示されます。

A3に「佐藤」と入れたら「OK」と表示されるようにしていますが、
それも出ませんか?
どういうふうに入力されているのかわかりませんが、
新しいブックでご提示のコードだけにしてみても、同じ事象になりますか?
どうも
.Range("B3") = Date
のコードがなんかしらの原因で動いているように思います。
ただし、チェック対象は、A3セルだけなので、「入力チェック範囲外」のコードは
将来的には、不要です。
逆に「OK」か「名前が見つかりません」のどちらも出ないというのであれば、不思議です。
.Range("B3") = Date
が含まれているマクロをいったんはずしてみるとうまく動くのではないでしょうか?

ちなみに、A3セルに「VBAビギナー」と入力すると「名前が見つかりません」となりませんか?

【30539】Re:否定の方法
回答  VBAビギナー  - 05/10/29(土) 18:58 -

引用なし
パスワード
   ▼かみちゃん さん:
回答有難うございます。

>A3に「佐藤」と入れたら「OK」と表示されるようにしていますが、
>それも出ませんか?

それは出ます。

>どういうふうに入力されているのかわかりませんが、
>新しいブックでご提示のコードだけにしてみても、同じ事象になりますか?

VBAビギナーとセルA3に入力すると
「名前が見つかりません
 $A$3」
と表示され
佐藤とセルA3に入力すると
「OK」
と表示され上手く動きます。
 
>どうも
>.Range("B3") = Date
>のコードがなんかしらの原因で動いているように思います。
>ただし、チェック対象は、A3セルだけなので、「入力チェック範囲外」のコードは
>将来的には、不要です。

現在は「入力チェック範囲外」のコードは外しています。

>逆に「OK」か「名前が見つかりません」のどちらも出ないというのであれば、不思議です。
せるA3に入力する際どちらかは出ます。

>.Range("B3") = Date
>が含まれているマクロをいったんはずしてみるとうまく動くのではないでしょうか?

はいうまく動きます。

>ちなみに、A3セルに「VBAビギナー」と入力すると「名前が見つかりません」となりませんか?
「名前がみつかりません
 $A$3 VBAビギナー」
と表示されます。

マクロの組み直しという事でしょうか?
組み直しという事であれば
この事だけで2週間近く時間がとられてるので
かなりショックですが、
それはそれで素人ですから頑張りたいと思います・・・

【30540】Re:否定の方法
発言  かみちゃん  - 05/10/29(土) 19:09 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>現在は「入力チェック範囲外」のコードは外しています。

であれば、まだ何か問題あるのでしょうか?
はずした状態でA3セルに「佐藤」と入力すると「OK」、「VBAビギナー」と入力
すると「名前が見つかりません $A$3 VBAビギナー」と表示されませんか?

>マクロの組み直しという事でしょうか?

それは、ないと思います。
こちらではご提示のコードでできていますから。

【30542】Re:否定の方法
お礼  VBAビギナー  - 05/10/29(土) 23:17 -

引用なし
パスワード
   ▼かみちゃん さん:

>であれば、まだ何か問題あるのでしょうか?

特に問題ないです。

>はずした状態でA3セルに「佐藤」と入力すると「OK」、「VBAビギナー」と入力
>すると「名前が見つかりません $A$3 VBAビギナー」と表示されませんか?

きちんと上記のように表示されます。

>ご質問の際には、前提条件、元データ、期待する結果を書かれていると割りと簡単
>に答えはわかると思います。

マクロは自分の質問した通り名前のチェックができ
嬉しく思っています。
質問に答えてくれたかみちゃんさんに対して失礼ですが
自分自身の期待する結果(名前のチェックが表示で終わった事)が抽象的すぎたため、
反省しています。質問に質問を重ねるのは悪い気がします。

回答ありがとうございました。

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