Excel VBA質問箱 IV

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

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


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

【8571】バッティングチェック 学生です 03/10/24(金) 12:28 質問
【8572】Re:バッティングチェック BOTTA 03/10/24(金) 12:50 回答
【8576】Re:バッティングチェック ぴかる 03/10/24(金) 13:39 回答
【8595】Re:バッティングチェック りん 03/10/24(金) 19:24 回答
【8612】Re:バッティングチェック 学生です 03/10/27(月) 10:08 お礼
【8636】Re:続バッティングチェック りん 03/10/27(月) 18:54 回答
【8694】りんさんへ 学生です 03/10/29(水) 14:29 お礼
【8577】Re:バッティングチェック INA 03/10/24(金) 13:49 回答
【8579】BOTTAさん、ぴかるさん、INAさん 学生です 03/10/24(金) 14:17 お礼
【8581】Re:BOTTAさん、ぴかるさん、INAさん INA 03/10/24(金) 14:22 回答
【8697】Re:BOTTAさん、ぴかるさん、INAさん 学生です 03/10/29(水) 14:40 お礼
【8613】追加のバッティングチェックの質問 学生です 03/10/27(月) 10:13 質問
【8614】Re:追加のバッティングチェックの質問 INA 03/10/27(月) 11:10 回答
【8693】INA さんへ 学生です 03/10/29(水) 14:27 お礼
【8703】追加のバッティングチェック 学生です 03/10/29(水) 16:07 質問
【8722】Re:追加のバッティングチェック INA 03/10/30(木) 10:57 回答

【8571】バッティングチェック
質問  学生です  - 03/10/24(金) 12:28 -

引用なし
パスワード
    A列に同じに同じ文字、数値が入力されたら、msgboxで教えてくれる、マクロを今製作中ですが、なかなかうまくいきません、同じようなものを造ったことのある人は作り方を教えてください。
EXCELのバージョンは2002です。

【8572】Re:バッティングチェック
回答  BOTTA  - 03/10/24(金) 12:50 -

引用なし
パスワード
   学生ですさん、こんにちは。

重複禁止なら、入力規則。
VBAではありませんが、
[#3699]を参照してみて下さい。

【8576】Re:バッティングチェック
回答  ぴかる  - 03/10/24(金) 13:39 -

引用なし
パスワード
   学生ですさん、BOTTAさん、こんにちは。

マクロ版、作ってみました。該当シートモジュールに貼り付けて下さい。
RangeとかSet、あんまり分かってないんで変かもしれませんけどネ。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim MyR As Range
Dim セル As Range

  Set MyR = Columns("A:A").SpecialCells(xlCellTypeConstants, 23)
  For Each セル In MyR
    If (Target.Column = 1) And (Target.Value = セル.Value) And _
      (Target.Row <> セル.Row) Then
      Cells(Target.Row, Target.Column).Select
      MsgBox Target.Value & "は、入力済みです"
      Target.Value = ""
      Exit For
    End If
  Next
  
  Set MyR = Nothing
  Set セル = Nothing

End Sub

【8577】Re:バッティングチェック
回答  INA  - 03/10/24(金) 13:49 -

引用なし
パスワード
   > A列に同じに同じ文字、数値が入力されたら、
>msgboxで教えてくれる、マクロを今製作中ですが、なかなかうまくいきません、

これで良いかと思います。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim myFind As Range
If Target.Column <> 1 Then Exit Sub
If Target.Value = "" Then Exit Sub

Application.EnableEvents = False

  Set myFind = Range("A:A").Find(Target.Value, LookIn:=xlValues, LookAt:=xlWhole)
  
  If Not myFind Is Nothing Then
    MsgBox "既に入力されています。"
    Target.Value = "" ' ←入力値を削除しないなら不要
  End If

Application.EnableEvents = True
End Sub

【8579】BOTTAさん、ぴかるさん、INAさん
お礼  学生です  - 03/10/24(金) 14:17 -

引用なし
パスワード
   BOTTAさん、ぴかるさん、INAさん返信ありがとうございました。
BOTTAさんの入力規則は考えもしなかったことなのでとても助かりました。
ぴかるさん、INAさんのソースは参考書を見ながらしかわかりませんが、確かめてみると確かに実行できました、ほんとうにありがとうございました。

【8581】Re:BOTTAさん、ぴかるさん、INAさん
回答  INA  - 03/10/24(金) 14:22 -

引用なし
パスワード
   私のコードは、検索(Findメソッド)でA列を調べて、
もし同じ文字が見つかったら、メッセージを表示するようにしてあります。
ループ文で各セルの文字を調べることもできますが、
検索の方が処理が速いと思います。

【8595】Re:バッティングチェック
回答  りん E-MAIL  - 03/10/24(金) 19:24 -

引用なし
パスワード
   >学生ですさん、こんばんわ。

BOTTA さんのをマクロにするとこんなかんじ。
>重複禁止なら、入力規則。
>VBAではありませんが、
>[#3699]を参照してみて下さい。

Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
   If .Count > 1 Then
     'MsgBox .Address, vbExclamation, "複数セルは対象外"
   ElseIf Target.Value = "" Then
     'MsgBox .Address, vbExclamation, "セルクリアも対象外"
   Else
     Application.EnableEvents = False
     If Application.WorksheetFunction. _
      CountIf(Columns("A"), Target.Value) > 1 Then
      MsgBox Target.Value, vbInformation, "重複"
      .Select
      .ClearContents
     End If
     Application.EnableEvents = True
   End If
  End With
End Sub

解決後のようですが。

【8612】Re:バッティングチェック
お礼  学生です  - 03/10/27(月) 10:08 -

引用なし
パスワード
   そんなことはありません、いろんなやり方が勉強できてとても助かります

【8613】追加のバッティングチェックの質問
質問  学生です  - 03/10/27(月) 10:13 -

引用なし
パスワード
    たとえばA列の1から10行までのバッティングチェックをしようとするとどのように記述すればよいのでしょうか?


▼学生です さん:
A列に同じに同じ文字、数値が入力されたら、msgboxで教えてくれる、マクロを今製作中ですが、なかなかうまくいきません、同じようなものを造ったことのある人は作り方を教えてください。
EXCELのバージョンは2002です。

【8614】Re:追加のバッティングチェックの質問
回答  INA  - 03/10/27(月) 11:10 -

引用なし
パスワード
   > たとえばA列の1から10行までのバッティングチェックをしようとすると
>どのように記述すればよいのでしょうか?
Findメソッドの検索範囲を限定すればできます。

Set myFind = Range("A:A").Find(Target.Value, LookIn:=xlValues, LookAt:=xlWhole)
 ↓
Set myFind = Range("A1:A10").Find(Target.Value, LookIn:=xlValues, LookAt:=xlWhole)

掲載されたコードの意味が分からないときは、
各単語について、ヘルプで使い方を調べてみて下さい。
FindメソッドがRangeに対して検索することが分かると思います。

また、一般機能の「検索」を「マクロの自動記録」すれば、
Findメソッドの使い方が、より理解できるかと思います。

【8636】Re:続バッティングチェック
回答  りん E-MAIL  - 03/10/27(月) 18:54 -

引用なし
パスワード
   学生です さん、こんばんわ。

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Application.Intersect(Target, Range("A1:A10")) Is Nothing Then
   With Target
     If .Count > 1 Then
      'MsgBox .Address, vbExclamation, "複数セルは対象外"
     ElseIf Target.Value = "" Then
      'MsgBox .Address, vbExclamation, "セルクリアも対象外"
     Else
      Application.EnableEvents = False
      If Application.WorksheetFunction. _
        CountIf(Range("A1:A10"), Target.Value) > 1 Then
        MsgBox Target.Value, vbInformation, "重複"
        .Select
        .ClearContents
      End If
      Application.EnableEvents = True
     End If
   End With
  End If
End Sub

A1:A10の範囲ないだけバッティングチェックをするならこんな感じです。
他の範囲に入力されたものが、A1:A10とかぶるかどうかチェックをする場合は、
If Not Application.Intersect(Target, Range("A1:A10")) Is Nothing Then
と、一番下にある
End If
を外してください。

【8693】INA さんへ
お礼  学生です  - 03/10/29(水) 14:27 -

引用なし
パスワード
   ▼INA さんありがとうございます

【8694】りんさんへ
お礼  学生です  - 03/10/29(水) 14:29 -

引用なし
パスワード
   ▼りん さんありがとうございます、早速ためさせていただきます。><

【8697】Re:BOTTAさん、ぴかるさん、INAさん
お礼  学生です  - 03/10/29(水) 14:40 -

引用なし
パスワード
   処理速度のことまで考えながらソースコードを作るなんて私の今までにない考え方でした、とても参考になりました、ありがとうございます><

【8703】追加のバッティングチェック
質問  学生です  - 03/10/29(水) 16:07 -

引用なし
パスワード
    アクティブセルがある列の1行〜10行に入れた文字列を、A列にある10行〜20行にある各セルとのバッティングチェックをおこない、ヒットしたら、ヒットしたセルを空白チェックし空白ならアクティブセルの内容をコピーし、空白ではなかったら、msgboxを表示させるマクロなんですが!
 アクティブセルではなく固定でA列をソースに書き込むなら成功するのですが、アクティブセルコマンドを使用して、実行するとエラーになります。

> EXCELのバージョンは2002です。

【8722】Re:追加のバッティングチェック
回答  INA  - 03/10/30(木) 10:57 -

引用なし
パスワード
   何エラーになるのですか?
あと、上手く行かないコードを掲載して頂けませんか?

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