Page 753 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼重複禁止の方法は? 有栖川卜伝 03/2/13(木) 18:27 ┗入力規則を使います。 BOTTA 03/2/13(木) 18:59 ┗Re:入力規則を使います。 有栖川卜伝 03/2/14(金) 10:06 ┗Re:入力規則を使います。 ポンタ 03/2/14(金) 11:13 ┗Re:しかしながら。。。 有栖川卜伝 03/2/14(金) 14:35 ┗Re:しかしながら。。。 ポンタ 03/2/14(金) 15:23 ┗Re:しかしながら。。。 有栖川卜伝 03/2/15(土) 8:52 ┗Re:しかしながら。。。 ポンタ 03/2/17(月) 9:33 ┗Re:ありがとうございます。 有栖川卜伝 03/2/17(月) 13:48 ─────────────────────────────────────── ■題名 : 重複禁止の方法は? ■名前 : 有栖川卜伝 ■日付 : 03/2/13(木) 18:27 -------------------------------------------------------------------------
またまた、お世話になります。有栖川です。 やはり、同じ列に同じ名前が重複しないように、 表を作成することが必要になりました。 「数字ならなんとかいけるかなー。」って思って いた私が愚か者でした。いやいや、数字を打って、 人名に変える方法は、非常に役に立っております。 しかし、重複させない方法があると「いいのかも。」 という考えになりました。よろしくご教示、お願いいたします。 |
有栖川卜伝さん、こんばんは。 >やはり、同じ列に同じ名前が重複しないように、 >表を作成することが必要になりました。 VBAではありませんが、 まず、A列を選択して、 「データ」→「入力規則」 「設定」タブの「入力値の種類」で「ユーザー設定」を選び、 「数式」欄に =COUNTIF(A:A,A1)=1 と入力。 重複データが入力されるとメッセージが出ます。 おためし下さい。 でも、オートフィルを使ったりすると重複データが入力できちゃいます。^^;) |
ありがとうございます。 C3から人名を入力しているのですが、 入力規則のユーザー設定で、COUNTIF(C:C,C3)=1と式に 入力してみましたが、全くセルに値が入りません。 また、この式だと、C3に入る人名のC列にある数が 1つであるという定義にしかなりませんよね? C4からの人名は重複してしまいますよね。 どうすればよいのでしょう? |
>全くセルに値が入りません。 × COUNTIF(C:C,C3)=1 ○ =COUNTIF(C:C,C3)=1 先頭に「=」が抜けてます。 >C4からの人名は重複してしまいますよね。 C3に正しく設定できたら、C3をC4〜C65536にコピーすれば よいと思います。 あと、エラーメッセージを この人名は重複しています とかにしておくと、さらに分かりやすいかもしれませんね。 |
ありがとうございます。 直接打ちなら、できました。 ですが、すでにVBAのほうで、1を打ったら「○○田さん」 とか、84を打ったら「××川さん」とチェンジするように なっているので、思うようになりません。 やはり数字から人名に変わるVBAと、重複禁止の方法は 共存できないのでしょうか? 無理な申し上げようで、申し訳ありません。 |
コロスケさんのコードをお使いだと思うので、 拝借して、書き直しました。 お試しください。 Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Target.Count <> 1 Then Exit Sub Select Case Target.Value Case 1 Target.Value = "1番目の名前" Case 2 Target.Value = "2番目の名前" Case 3 Target.Value = "3番目の名前" Case Else 'なにもしない End Select If Application.WorksheetFunction.CountIf(Range("C:C"), Target.Value) > 1 Then MsgBox ("この名前はすでに入力されています") Target.Value = "" End If Application.EnableEvents = True End Sub |
▼ポンタ さん: >コロスケさんのコードをお使いだと思うので、 >拝借して、書き直しました。 > >お試しください。 > >Private Sub Worksheet_Change(ByVal Target As Range) > Application.EnableEvents = False > If Target.Count <> 1 Then Exit Sub > Select Case Target.Value > Case 1 > Target.Value = "1番目の名前" > Case 2 > Target.Value = "2番目の名前" > Case 3 > Target.Value = "3番目の名前" > Case Else > 'なにもしない > End Select > If Application.WorksheetFunction.CountIf(Range("C:C"), Target.Value) > 1 Then > MsgBox ("この名前はすでに入力されています") > Target.Value = "" > End If > Application.EnableEvents = True >End Sub ポンタさん、ありがとうございました。 C列無事に、人名変換と重複禁止が共存できました。 同じような、作業をD列や他の列でも行いたいのですが、 どのような式をつくればよいのでしょうか? |
>同じような、作業をD列や他の列でも行いたいのですが、 >どのような式をつくればよいのでしょうか? 入力された数字と人名の対応をコードの中に埋め込むのは、 メンテナンスが大変だと思うので、全面的に書き直しました。 (ほんの数分の作業なので、チト表現が大げさですが・・・) 以下のコードでは、Sheet2という名前のシートに A B C D E 1 C-1 D-1 E-1 2 C-2 D-2 E-2 3 C-3 D-3 E-3 という表があったとき、数字→人名の置換えをしたいシートの C列に「1」と入力すると「C-1」に、「2」と入力すると「C-2」に、・・・ D列に「1」と入力すると「D-1」に、「2」と入力すると「D-2」に、・・・ E列に「1」と入力すると「E-1」に、「2」と入力すると「E-2」に、・・・ というように、データを入力したセルと同じ列の、入力した数字の行にある データに置き換えます。 Sheet2という名前が不都合なら、 Set Ws = Worksheets("Sheet2") を書き換えてください。 対応表のあるシートは非表示にしておいても動きます。 お試しください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim MyRow As Long, MyEnd As Long Dim Ws As Worksheet Application.EnableEvents = False If Target.Count <> 1 Then Exit Sub MyRow = Val(Target.Value) Set Ws = Worksheets("Sheet2") MyEnd = Ws.Cells(65536, Target.Column).End(xlUp).Row If MyEnd = 1 Then Exit Sub If MyRow > 0 And MyRow <= MyEnd Then Target.Value = Ws.Cells(MyRow, Target.Column).Value End If If Application.WorksheetFunction.CountIf(Target.EntireColumn, Target.Value) > 1 Then MsgBox ("この名前はすでに入力されています") Target.Value = "" End If Application.EnableEvents = True End Sub |
こんにちは。 ポンタさん!! ありがとうございました。 大成功ですっ!! 長々とお世話になりました。 |