Excel VBA質問箱 IV

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

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


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

【51060】同じ数字が入力されたら 池田 07/8/27(月) 10:44 質問[未読]
【51062】Re:同じ数字が入力されたら ぱっせんじゃー 07/8/27(月) 11:20 発言[未読]
【51063】Re:同じ数字が入力されたら 池田 07/8/27(月) 11:34 質問[未読]
【51065】Re:同じ数字が入力されたら ぱっせんじゃー 07/8/27(月) 11:44 発言[未読]
【51066】Re:同じ数字が入力されたら 池田 07/8/27(月) 11:57 質問[未読]
【51067】Re:同じ数字が入力されたら ぱっせんじゃー 07/8/27(月) 12:07 発言[未読]
【51068】Re:同じ数字が入力されたら 池田 07/8/27(月) 13:29 質問[未読]
【51069】Re:同じ数字が入力されたら Blue 07/8/27(月) 13:58 質問[未読]
【51071】Re:同じ数字が入力されたら 池田 07/8/27(月) 14:36 質問[未読]
【51072】Re:同じ数字が入力されたら ぱっせんじゃー 07/8/27(月) 14:38 発言[未読]
【51073】Re:同じ数字が入力されたら ぱっせんじゃー 07/8/27(月) 14:40 発言[未読]
【51076】Re:同じ数字が入力されたら 池田 07/8/27(月) 14:55 発言[未読]
【51077】Re:同じ数字が入力されたら 池田 07/8/27(月) 15:13 発言[未読]
【51079】Re:同じ数字が入力されたら ichinose@仕事中 07/8/27(月) 15:28 発言[未読]
【51080】Re:同じ数字が入力されたら 池田 07/8/27(月) 15:42 質問[未読]
【51081】Re:同じ数字が入力されたら 池田 07/8/27(月) 16:05 質問[未読]
【51087】Re:同じ数字が入力されたら 池田 07/8/28(火) 0:53 質問[未読]
【51088】Re:同じ数字が入力されたら ichinose@出社 07/8/28(火) 7:37 発言[未読]
【51093】Re:同じ数字が入力されたら 池田 07/8/28(火) 10:39 質問[未読]
【51100】Re:同じ数字が入力されたら ichinose 07/8/28(火) 12:47 発言[未読]
【51101】Re:同じ数字が入力されたら 池田 07/8/28(火) 14:17 お礼[未読]

【51060】同じ数字が入力されたら
質問  池田  - 07/8/27(月) 10:44 -

引用なし
パスワード
   VBAはあまりわからないのですが
よろしくお願いします。
ダブリ防止のてため、
C5:C132の範囲で同じ数字(半角5桁)が
入力された場合警告を出すみたいな事できませんか?

【51062】Re:同じ数字が入力されたら
発言  ぱっせんじゃー  - 07/8/27(月) 11:20 -

引用なし
パスワード
   条件付き書式でも出来ます。

VBAでも条件付き書式の場合の数式とほぼ同じです。

COUNTIF

の戻り値が自分自身を含めたら2以上だったら
重複、といえます。

【51063】Re:同じ数字が入力されたら
質問  池田  - 07/8/27(月) 11:34 -

引用なし
パスワード
   ▼ぱっせんじゃー さん:
ありがとうございます。
COUNTIFで調べて下記を見つけたのですが
入力した時点でMsgBoxで"重複があります。"
というようなことがしたいのですが
よろしくお願いします。

Sub Check_Uniq_Data()
  Debug.Print "[ 重複のあるデータ ]"
  On Error Resume Next
  With Range("A1", Range("A65536").End(xlUp)).Offset(, 255)
   .Formula = _
   "=IF(AND(COUNTIF(A:A,A1)>1,MATCH(A1,A:A,0)=ROW()),A1,0)"            'A列中の重複データを探す。
   For Each C In .SpecialCells(3, 2)
     Debug.Print C.Value
   Next
   .ClearContents
  End With
  On Error GoTo 0
  SendKeys "^(g)", True
End Sub
>条件付き書式でも出来ます。
>
>VBAでも条件付き書式の場合の数式とほぼ同じです。
>
>COUNTIF
>
>の戻り値が自分自身を含めたら2以上だったら
>重複、といえます。

【51065】Re:同じ数字が入力されたら
発言  ぱっせんじゃー  - 07/8/27(月) 11:44 -

引用なし
パスワード
   >入力した時点でMsgBoxで"重複があります。"
>というようなことがしたいのですが

シートのChengeイベントを使います。

起動セル範囲を限定することも出来ます。
※↓のURLの最初の2文字は全角にしてあります。
半角に変えてください。

http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_event.html

【51066】Re:同じ数字が入力されたら
質問  池田  - 07/8/27(月) 11:57 -

引用なし
パスワード
   ▼ぱっせんじゃー さん:
ありがとうございます。
紹介のサイト調べたのですが
下記のような感じ?でしか想像がつきません
具体的に教えていただけませんか
よろしくお願いします。
Private Sub Worksheet_Change(ByVal Target As Range)
  With Range("C5", Range("C65536").End(xlUp)).Offset(, 255)
   .Formula = _
   "=IF(AND(COUNTIF(C:C,C5)>1,MATCH(C5,C:C,0)=ROW()),C5,0)"
MSGBOX "重複があります"


>>入力した時点でMsgBoxで"重複があります。"
>>というようなことがしたいのですが
>
>シートのChengeイベントを使います。
>
>起動セル範囲を限定することも出来ます。
>※↓のURLの最初の2文字は全角にしてあります。
>半角に変えてください。
>
>http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_event.html

【51067】Re:同じ数字が入力されたら
発言  ぱっせんじゃー  - 07/8/27(月) 12:07 -

引用なし
パスワード
   ワークシート関数の中には、VBAで使えるものもあります。

WorksheetFunction.CountIf

のように使います。

【51068】Re:同じ数字が入力されたら
質問  池田  - 07/8/27(月) 13:29 -

引用なし
パスワード
   ▼ぱっせんじゃー さん:
ありがとうございます。
ぱっせんじゃーさんのいう
WorksheetFunction.CountIfで調べました
下記のようなことでしょうか
vba素人ですみませんが
よろしくお願いします。

Private Sub Worksheet_Change(ByVal Target As Range)
 Set WS1 = Worksheets("Sheet1")
 If WorksheetFunction.CountIf(WS1.Range("C:C")) = "" Then
' WS1.Range("C65536").End (xlUp)
 MsgBox "重複があります"
 End If
End Sub

>ワークシート関数の中には、VBAで使えるものもあります。
>
>WorksheetFunction.CountIf
>
>のように使います。

【51069】Re:同じ数字が入力されたら
質問  Blue  - 07/8/27(月) 13:58 -

引用なし
パスワード
   ▼池田 さん:
> If WorksheetFunction.CountIf(WS1.Range("C:C")) = "" Then


ぱっせんじゃーさんのおっしゃっている
>COUNTIF
>の戻り値が自分自身を含めたら2以上だったら
>重複、といえます。
とで条件式が違いませんか?
(2以上ってのがどこにもない。)

【51071】Re:同じ数字が入力されたら
質問  池田  - 07/8/27(月) 14:36 -

引用なし
パスワード
   ▼Blue さん:
返事ありがとうございます。
こういうことですか↓
何の表示も出ないのですが?・
Private Sub Worksheet_Change(ByVal Target As Range)
 Set WS1 = Worksheets("Sheet1")
 If WorksheetFunction.CountIf(WS1.Range("C:C")) > 2 Then
' WS1.Range("C65536").End (xlUp)
 MsgBox "重複があります"
 End If
End Sub

>> If WorksheetFunction.CountIf(WS1.Range("C:C")) = "" Then
>と
>
>ぱっせんじゃーさんのおっしゃっている
>>COUNTIF
>>の戻り値が自分自身を含めたら2以上だったら
>>重複、といえます。
>とで条件式が違いませんか?
>(2以上ってのがどこにもない。)

【51072】Re:同じ数字が入力されたら
発言  ぱっせんじゃー  - 07/8/27(月) 14:38 -

引用なし
パスワード
   まず、一般関数で
COUNTIF
の数式はどのように記述するか?
を考えてみてください。

【51073】Re:同じ数字が入力されたら
発言  ぱっせんじゃー  - 07/8/27(月) 14:40 -

引用なし
パスワード
   参考HP(一般関数)です。
最初の2文字は全角になっていますので
半角に変えてください。

http://www.itsmemo.com/it/excel/000021.html

【51076】Re:同じ数字が入力されたら
発言  池田  - 07/8/27(月) 14:55 -

引用なし
パスワード
   ▼ぱっせんじゃー さん:
=COUNTIF(C5:C132,">=2")
ということですよね。
>参考HP(一般関数)です。
>最初の2文字は全角になっていますので
>半角に変えてください。
>
>http://www.itsmemo.com/it/excel/000021.html

【51077】Re:同じ数字が入力されたら
発言  池田  - 07/8/27(月) 15:13 -

引用なし
パスワード
   こうでしょうか
Private Sub Worksheet_Change(ByVal Target As Range)
 Set WS1 = Worksheets("Sheet1")
 If WorksheetFunction.CountIf(WS1.Range("C5:C132")) >= 2 Then
'WS1.Range("C65536").End (xlUp)
 MsgBox "重複があります"
 End If
End Sub

【51079】Re:同じ数字が入力されたら
発言  ichinose@仕事中  - 07/8/27(月) 15:28 -

引用なし
パスワード
   ▼池田 さん:
こんにちは。

一度、投稿者名に「@」使ってみたかったんだよね

>VBAはあまりわからないのですが
>よろしくお願いします。
>ダブリ防止のてため、
>C5:C132の範囲で同じ数字(半角5桁)が
>入力された場合警告を出すみたいな事できませんか?

これ、Countifを使うなら、入力規則を使う手もありますね!!

設定手順を説明している時間がないので、VBAで設定します。

新規ブックで適当なシートをアクティブにして下さい。

標準モジュールに
'==============================================
Sub Test()
  With Range("C5:C132")
    .Select
    .Cells(1).Activate
    With .Validation
    .Delete
    .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertInformation, _
    Operator:=xlBetween, Formula1:="=countif(" & _
               .Parent.Address & "," & _
               .Parent.Cells(1).Address(False, False) & _
               ")=1"
    .IgnoreBlank = True
    .InCellDropdown = True
    .ErrorTitle = "警告 重複"
    .ErrorMessage = "既に同じ値が指定されています。"
    .IMEMode = xlIMEModeNoControl
    End With
  End With
End Sub

Testを実行したのち、セルC5:C132に対して重複データを入れてみてください。
警告メッセージを表示します。
(警告レベルなので。、入力はできます)
入力禁止にも設定可能ですから、これはHelpやマクロの記録で調べてみてください。

【51080】Re:同じ数字が入力されたら
質問  池田  - 07/8/27(月) 15:42 -

引用なし
パスワード
   ▼ichinose@仕事中 さん:
いつも参考にさせていただいてます
お仕事中ありがとうございます
バッチリです。
ただもう一つお願いします
testを実行せずとも警告表示させること出来ませんか?
お手すきの時で結構です。
よろしくお願いします

>
>一度、投稿者名に「@」使ってみたかったんだよね
>
>>VBAはあまりわからないのですが
>>よろしくお願いします。
>>ダブリ防止のてため、
>>C5:C132の範囲で同じ数字(半角5桁)が
>>入力された場合警告を出すみたいな事できませんか?
>
>これ、Countifを使うなら、入力規則を使う手もありますね!!
>
>設定手順を説明している時間がないので、VBAで設定します。
>
>新規ブックで適当なシートをアクティブにして下さい。
>
>標準モジュールに
>'==============================================
>Sub Test()
>  With Range("C5:C132")
>    .Select
>    .Cells(1).Activate
>    With .Validation
>    .Delete
>    .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertInformation, _
>    Operator:=xlBetween, Formula1:="=countif(" & _
>               .Parent.Address & "," & _
>               .Parent.Cells(1).Address(False, False) & _
>               ")=1"
>    .IgnoreBlank = True
>    .InCellDropdown = True
>    .ErrorTitle = "警告 重複"
>    .ErrorMessage = "既に同じ値が指定されています。"
>    .IMEMode = xlIMEModeNoControl
>    End With
>  End With
>End Sub
>
>Testを実行したのち、セルC5:C132に対して重複データを入れてみてください。
>警告メッセージを表示します。
>(警告レベルなので。、入力はできます)
>入力禁止にも設定可能ですから、これはHelpやマクロの記録で調べてみてください。

【51081】Re:同じ数字が入力されたら
質問  池田  - 07/8/27(月) 16:05 -

引用なし
パスワード
   ▼ichinose@仕事中 さん:
もうひとつお聞きします
表示方式はMsgBoxでは?

【51087】Re:同じ数字が入力されたら
質問  池田  - 07/8/28(火) 0:53 -

引用なし
パスワード
   ▼ichinose@仕事中 さん:

>警告メッセージを表示します。
>(警告レベルなので。、入力はできます)
>入力禁止にも設定可能ですから、これはHelpやマクロの記録で調べてみてください。
入力禁止ですがHelpで、探したのですが見つけることが出来ませんでした。
どのような追加コードが必要なのでしょうか
是非よろしくお願いします。

【51088】Re:同じ数字が入力されたら
発言  ichinose@出社  - 07/8/28(火) 7:37 -

引用なし
パスワード
   池田 さん:
おはようございます。
>
>>警告メッセージを表示します。
>>(警告レベルなので。、入力はできます)
>>入力禁止にも設定可能ですから、これはHelpやマクロの記録で調べてみてください。
>入力禁止ですがHelpで、探したのですが見つけることが出来ませんでした。
>どのような追加コードが必要なのでしょうか

www.atmarkit.co.jp/fwin2k/win2ktips/337inputrule/inputrule.html

↑ここに入力規則の設定方法が記述されていますから、
参考にしてください。その上で分からない箇所をピンポイントで質問してください。

また・・・、前回投稿のTest実行後、対象セル範囲であるC5:C132を選択し、
「データ」---「入力規則」とクリックしてください。
データの入力規則ダイアログが表示されます。これを見ると設定された入力規則を
見ることが出来ます。


尚、

>もうひとつお聞きします
>表示方式はMsgBoxでは?

はっきり意味が把握できませんが、アシスタントを使わない という意味ですか?

ならば、
「ヘルプ」----「Officeアシスタントを隠す」とクリックして試してください

尚、上記はExcel2002を基に記述しています

「@」はこれで最後・・・、やっぱり面倒だわ!!

【51093】Re:同じ数字が入力されたら
質問  池田  - 07/8/28(火) 10:39 -

引用なし
パスワード
   ▼ichinose@出社 さん:
ありがとうございました。
下記説明でよーくわかりました。
ただ下記コードでどの部分が入力禁止なのかいまいち不明
    With .Validation
    .Delete
    .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, _
    Operator:=xlBetween, Formula1:="=countif(" & _
               .Parent.Address & "," & _
               .Parent.Cells(1).Address(False, False) & _
               ")=1"
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = "警告 重複"
    .InputMessage = ""
    .ErrorMessage = "既に同じ値が指定されています。"
    .IMEMode = xlIMEModeNoControl
    .ShowInput = True
    .ShowError = True
    End With
  End With
ヘルプで調べているのですが?
ちょっと説明お願いできればと・・・・・
よろしくお願いします

入力規則ですから一度testで設定してしまえば
このコードは不要で良いのでしょうね たぶん・・・

【51100】Re:同じ数字が入力されたら
発言  ichinose  - 07/8/28(火) 12:47 -

引用なし
パスワード
   ▼池田 さん:
>ただ下記コードでどの部分が入力禁止なのかいまいち不明
ん? マクロの記録を使って作成されたコードと下記のコードを比べてもらえば
すぐわかると思いますけどねえ!!

>    With .Validation
>    .Delete
>    .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, _
'警告のみで入力可の場合、マクロの記録を作動させると、AlertStyle:=xlValidAlertInformation

'となりますよ!!
>    Operator:=xlBetween, Formula1:="=countif(" & _
>               .Parent.Address & "," & _
>               .Parent.Cells(1).Address(False, False) & _
>               ")=1"
>    .IgnoreBlank = True
>    .InCellDropdown = True
>    .InputTitle = ""
>    .ErrorTitle = "警告 重複"
>    .InputMessage = ""
>    .ErrorMessage = "既に同じ値が指定されています。"
>    .IMEMode = xlIMEModeNoControl
>    .ShowInput = True
>    .ShowError = True
>    End With
>  End With
>ヘルプで調べているのですが?
>ちょっと説明お願いできればと・・・・・
>よろしくお願いします
>
>入力規則ですから一度testで設定してしまえば
>このコードは不要で良いのでしょうね たぶん・・・
そうです。
これから、外回りです。

【51101】Re:同じ数字が入力されたら
お礼  池田  - 07/8/28(火) 14:17 -

引用なし
パスワード
   ▼ichinose さん:
いろいろと
ありがとうございました。
次の機会もよろしくお願いします

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