Excel VBA質問箱 IV

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

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


5628 / 13645 ツリー ←次へ | 前へ→

【49648】検索 xxxxx 07/6/14(木) 17:31 質問[未読]
【49656】Re:検索 ichinose 07/6/14(木) 22:14 発言[未読]
【49675】Re:検索 xxxxx 07/6/15(金) 15:04 質問[未読]
【49681】Re:検索 ichinose 07/6/15(金) 20:11 発言[未読]
【49711】Re:検索 xxxxx 07/6/18(月) 11:20 質問[未読]
【49722】Re:検索 ichinose 07/6/18(月) 19:48 発言[未読]
【49756】Re:検索 xxxxx 07/6/19(火) 23:12 お礼[未読]
【49761】Re:検索 xxxxx 07/6/20(水) 17:09 質問[未読]
【49762】Re:検索 Kein 07/6/20(水) 17:31 回答[未読]
【49763】Re:検索 Kein 07/6/20(水) 17:34 発言[未読]
【49765】Re:検索 Kein 07/6/20(水) 22:29 発言[未読]
【49764】Re:検索 ichinose 07/6/20(水) 21:00 発言[未読]

【49648】検索
質問  xxxxx  - 07/6/14(木) 17:31 -

引用なし
パスワード
   A行のセルに入っている数値でかぶっていたらエラーって言う処理をつくりたいんですが、vlookupがいいんですかね?他にもやり方ありますか??

101
102
103
101
104

↑のときに101がエラーってなるようにしたいです。

よろしくお願いします。

【49656】Re:検索
発言  ichinose  - 07/6/14(木) 22:14 -

引用なし
パスワード
   ▼xxxxx さん:
こんばんは。

>A行のセルに入っている数値でかぶっていたらエラーって言う処理をつくりたいんですが、vlookupがいいんですかね?他にもやり方ありますか??
>
>101
>102
>103
>101
>104
>
>↑のときに101がエラーってなるようにしたいです。
条件付書式を使って、101が入力されているセルを適当な色で塗りつぶすことで
エラーにしたらいかがですか?

手動で設定できますが、

VBAで設定するなら、

Sub add_formatcondition()
  With Columns(1)
    .FormatConditions.Delete
    With .FormatConditions.Add( _
        Type:=xlExpression, Formula1:= _
        "=COUNTIF(c1,rc)>1")
      .Interior.ColorIndex = 3
      End With
    End With
End Sub

【49675】Re:検索
質問  xxxxx  - 07/6/15(金) 15:04 -

引用なし
パスワード
   ▼ichinose さん:

>Sub add_formatcondition()
>  With Columns(1)
>    .FormatConditions.Delete
>    With .FormatConditions.Add( _
>        Type:=xlExpression, Formula1:= _
>        "=COUNTIF(c1,rc)>1")
>      .Interior.ColorIndex = 3
>      End With
>    End With
>End Sub

返信遅くなりまして、すみません。
これでいけるかなと思います!
countifについて調べていますが、
「COUNTIF(c1,rc)>1」
はAの行をしらべるのになぜc1とrcでくくってあるのですかね?
()の中は調べるところの行を記入すると調べたのですが。。。

よろしくお願いします。

【49681】Re:検索
発言  ichinose  - 07/6/15(金) 20:11 -

引用なし
パスワード
   こんばんは。

>>Sub add_formatcondition()
>>  With Columns(1)
>>    .FormatConditions.Delete
>>    With .FormatConditions.Add( _
>>        Type:=xlExpression, Formula1:= _
>>        "=COUNTIF(c1,rc)>1")
>>      .Interior.ColorIndex = 3
>>      End With
>>    End With
>>End Sub
>
>返信遅くなりまして、すみません。
>これでいけるかなと思います!
>countifについて調べていますが、
>「COUNTIF(c1,rc)>1」
>はAの行をしらべるのになぜc1とrcでくくってあるのですかね?
ちょっと紛らわしいですね!!
これ、R1C1形式でセル範囲を表しています。

C1は、1列目のセル RCは、カレントのセル

新規ブックの標準モジュールで

Sub disp_address()
  With Columns(1)
    MsgBox .Address(, , xlR1C1)
    End With
End Sub

これを実行してみてください。

C1と表示されます。

A1形式で記述すると、

Sub add_formatcondition2()
  With Columns(1)
    .Cells(1).Activate
    .FormatConditions.Delete
    With .FormatConditions.Add( _
        Type:=xlExpression, Formula1:= _
        "=COUNTIF($a:$a,a1)>1")
      .Interior.ColorIndex = 3
      End With
    End With
End Sub

↑このコードと前回の投稿したコードでは、A列に設定される
条件付書式は同じです。

【49711】Re:検索
質問  xxxxx  - 07/6/18(月) 11:20 -

引用なし
パスワード
   ▼ichinose さん:

返信おくれましてすみません。

なるほど!そういうことですか!!
勉強になります!!ありがとうございます。

後もう1つ質問なんですが、赤くエラーにしたところの文字をとり、
重複してますとメッセージボックスをだしたいのですが、
このコードだとどこで重複してるという値をとれるのかわからなく・・・
自分でも色々やってみますが・・・

ヒントかやりかたなどおしえてもらってもいいですか??
すみません・・・

【49722】Re:検索
発言  ichinose  - 07/6/18(月) 19:48 -

引用なし
パスワード
   ▼xxxxx さん:
こんばんは。

>後もう1つ質問なんですが、赤くエラーにしたところの文字をとり、
>重複してますとメッセージボックスをだしたいのですが、
↑をこれを簡単に表すために条件付書式を使ったんですが・・・。
重複しているデータをピックアップするなら、別の方法ですね!!


>このコードだとどこで重複してるという値をとれるのかわからなく・・・

重複データに関しては、Dictionaryオブジェクトを使うのが簡単です。
過去ログを検索してください。

上記のオブジェクトを使わない方法をコードにしました。

データがA1から入力されているとして、

標準モジュールに
'=============================================
Sub main()
  Dim rng As Range
  Dim dup() As Variant
  Dim g0 As Long
  For Each rng In Range("a1", Cells(Rows.Count, "a").End(xlUp))
    With rng
     If Evaluate("countif(a1:a" & .Row & "," & .Address & ")=2") Then
       g0 = g0 + 1
       ReDim Preserve dup(1 To g0)
       dup(g0) = .Value
       End If
     End With
    Next
  If UBound(dup()) > 0 Then
    MsgBox Join(dup(), vbCrLf) & " が重複しています"
    End If
  Erase dup
End Sub

こんな方法もあります。

【49756】Re:検索
お礼  xxxxx  - 07/6/19(火) 23:12 -

引用なし
パスワード
   ▼ichinose さん:

ありがとうございました!
今回は先ほど教えてもらったコードを元に修正し、使わせていただきます!

Dictionaryも時間をつくり調べてみたいと思います!!
ありがとうございました★

【49761】Re:検索
質問  xxxxx  - 07/6/20(水) 17:09 -

引用なし
パスワード
   すみません。

また新たに壁にぶつかりました・・・
重複エラーはうまく動くようになったのですが・・・
A行のセルの中身が

101
102
あああ
103
101
あああ
104

↑のような場合、文字列の「あああ」は重複対象外とし、
数値だけ重複チェックをしたいのですが。。。。

isnumericとか色々関数などを調べたのですが、うまくいかなく…

教えていただけないでしょうか?

【49762】Re:検索
回答  Kein  - 07/6/20(水) 17:31 -

引用なし
パスワード
   VBAだけでなく、ワークシート関数の学習もした方がいいですよ。

Sub Test2()
  Dim C As Range

  On Error Resume Next
  With Range("A1", Range("A65536").End(xlUp))
   .Interior.ColorIndex = xlColorIndexNone
   With .Offset(, 254)
     .Formula = "=IF(ISNUMBER($A1),IF(COUNTIF($A$A,$A1)>1,1))
     .SpecialCells(3, 1).Offset(, -254).Interior.ColorIndex = 3
   End With
   With .Offset(, 255)
     .Formula = "=IF(ISNUMBER($A1),IF(COUNTIF($A$1:$A1,$A1)>1,1))"
     For Each C In .SpecialCells(3, 1)
      MsgBox C.Offset(, -255).Value & vbLf & _
      "が、重複しています"
     Next
   End With
   .Offset(, 254).Resize(, 2).ClearContents
  End With
End Sub

【49763】Re:検索
発言  Kein  - 07/6/20(水) 17:34 -

引用なし
パスワード
   すいません、":" が抜けてました。以下のように修正して下さい。

>.Formula = "=IF(ISNUMBER($A1),IF(COUNTIF($A$A,$A1)>1,1))"


.Formula = "=IF(ISNUMBER($A1),IF(COUNTIF($A:$A,$A1)>1,1))"

【49764】Re:検索
発言  ichinose  - 07/6/20(水) 21:00 -

引用なし
パスワード
   こんばんは。

>
>また新たに壁にぶつかりました・・・
>重複エラーはうまく動くようになったのですが・・・
>A行のセルの中身が
>
>101
>102
>あああ
>103
>101
>あああ
>104
>
>↑のような場合、文字列の「あああ」は重複対象外とし、
>数値だけ重複チェックをしたいのですが。。。。
>
Keinさんからもコードの提示がありますが、
私の以下のコードも前回のコードの数式部をちょこっと
変更したコードです。

Sub main()
  Dim rng As Range
  Dim dup() As Variant
  Dim g0 As Long
  For Each rng In Range("a1", Cells(Rows.Count, "a").End(xlUp))
    With rng
     If Evaluate("if(isnumber(" & .Address & _
        "),countif(a1:a" & .Row & "," & _
        .Address & ")=2)") Then
       g0 = g0 + 1
       ReDim Preserve dup(1 To g0)
       dup(g0) = .Value
       End If
     End With
    Next
  If UBound(dup()) > 0 Then
    MsgBox Join(dup(), vbCrLf) & " が重複しています"
    End If
  Erase dup
End Sub

【49765】Re:検索
発言  Kein  - 07/6/20(水) 22:29 -

引用なし
パスワード
   あー・・ごめんなさい、またチョット書き漏らしを見つけました。
修正して全体を再掲しますね。

Sub Test3()
  Dim C As Range

  On Error Resume Next
  With Range("A1", Range("A65536").End(xlUp))
   .Interior.ColorIndex = xlColorIndexNone
   With .Offset(, 254)
     .Formula = "=IF(ISNUMBER($A1),IF(COUNTIF($A:$A,$A1)>1,1))"
     .SpecialCells(3, 1).Offset(, -254).Interior.ColorIndex = 3
   End With
   With .Offset(, 255)
     .Formula = "=IF(ISNUMBER($A1),IF(COUNTIF($A$1:$A1,$A1)>1,1))"
     For Each C In .SpecialCells(3, 1)
      MsgBox C.Offset(, -255).Value & vbLf & _
      "が、重複しています"
     Next
   End With
   .Offset(, 254).Resize(, 2).ClearContents
  End With
End Sub

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