過去ログ

                                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
 -------------------------------------------------------------------------
   またまた、お世話になります。有栖川です。
やはり、同じ列に同じ名前が重複しないように、
表を作成することが必要になりました。

「数字ならなんとかいけるかなー。」って思って
いた私が愚か者でした。いやいや、数字を打って、
人名に変える方法は、非常に役に立っております。

しかし、重複させない方法があると「いいのかも。」
という考えになりました。よろしくご教示、お願いいたします。
 ───────────────────────────────────────  ■題名 : 入力規則を使います。  ■名前 : BOTTA  ■日付 : 03/2/13(木) 18:59  -------------------------------------------------------------------------
   有栖川卜伝さん、こんばんは。
>やはり、同じ列に同じ名前が重複しないように、
>表を作成することが必要になりました。

VBAではありませんが、
まず、A列を選択して、
「データ」→「入力規則」
「設定」タブの「入力値の種類」で「ユーザー設定」を選び、
「数式」欄に
=COUNTIF(A:A,A1)=1
と入力。
重複データが入力されるとメッセージが出ます。
おためし下さい。

でも、オートフィルを使ったりすると重複データが入力できちゃいます。^^;)
 ───────────────────────────────────────  ■題名 : Re:入力規則を使います。  ■名前 : 有栖川卜伝  ■日付 : 03/2/14(金) 10:06  -------------------------------------------------------------------------
   ありがとうございます。


C3から人名を入力しているのですが、
入力規則のユーザー設定で、COUNTIF(C:C,C3)=1と式に
入力してみましたが、全くセルに値が入りません。
また、この式だと、C3に入る人名のC列にある数が
1つであるという定義にしかなりませんよね?
C4からの人名は重複してしまいますよね。

どうすればよいのでしょう?
 ───────────────────────────────────────  ■題名 : Re:入力規則を使います。  ■名前 : ポンタ  ■日付 : 03/2/14(金) 11:13  -------------------------------------------------------------------------
   >全くセルに値が入りません。

× COUNTIF(C:C,C3)=1
○ =COUNTIF(C:C,C3)=1

先頭に「=」が抜けてます。

>C4からの人名は重複してしまいますよね。

C3に正しく設定できたら、C3をC4〜C65536にコピーすれば
よいと思います。


あと、エラーメッセージを

この人名は重複しています

とかにしておくと、さらに分かりやすいかもしれませんね。
 ───────────────────────────────────────  ■題名 : Re:しかしながら。。。  ■名前 : 有栖川卜伝  ■日付 : 03/2/14(金) 14:35  -------------------------------------------------------------------------
   ありがとうございます。
直接打ちなら、できました。

ですが、すでにVBAのほうで、1を打ったら「○○田さん」
とか、84を打ったら「××川さん」とチェンジするように
なっているので、思うようになりません。

やはり数字から人名に変わるVBAと、重複禁止の方法は
共存できないのでしょうか?

無理な申し上げようで、申し訳ありません。
 ───────────────────────────────────────  ■題名 : Re:しかしながら。。。  ■名前 : ポンタ  ■日付 : 03/2/14(金) 15:23  -------------------------------------------------------------------------
   コロスケさんのコードをお使いだと思うので、
拝借して、書き直しました。

お試しください。

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
 ───────────────────────────────────────  ■題名 : Re:しかしながら。。。  ■名前 : 有栖川卜伝  ■日付 : 03/2/15(土) 8:52  -------------------------------------------------------------------------
   ▼ポンタ さん:
>コロスケさんのコードをお使いだと思うので、
>拝借して、書き直しました。
>
>お試しください。
>
>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列や他の列でも行いたいのですが、
どのような式をつくればよいのでしょうか?
 ───────────────────────────────────────  ■題名 : Re:しかしながら。。。  ■名前 : ポンタ  ■日付 : 03/2/17(月) 9:33  -------------------------------------------------------------------------
   >同じような、作業を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
 ───────────────────────────────────────  ■題名 : Re:ありがとうございます。  ■名前 : 有栖川卜伝  ■日付 : 03/2/17(月) 13:48  -------------------------------------------------------------------------
   こんにちは。
ポンタさん!!
ありがとうございました。
大成功ですっ!!
長々とお世話になりました。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 753