Excel VBA質問箱 IV

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

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


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

【24133】データチェックの方法 KOTARO 05/4/13(水) 0:16 質問[未読]
【24136】Re:データチェックの方法 ウッシ 05/4/13(水) 1:30 回答[未読]
【24156】Re:データチェックの方法 KOTARO 05/4/13(水) 18:29 質問[未読]
【24161】Re:データチェックの方法 ウッシ 05/4/13(水) 20:02 回答[未読]
【24162】Re:データチェックの方法 KOTARO 05/4/13(水) 22:29 お礼[未読]
【24169】Re:データチェックの方法 KOTARO 05/4/14(木) 11:09 質問[未読]
【24171】Re:データチェックの方法 ウッシ 05/4/14(木) 11:16 回答[未読]
【24175】Re:データチェックの方法 KOTARO 05/4/14(木) 12:14 回答[未読]
【24176】Re:データチェックの方法 ウッシ 05/4/14(木) 12:29 回答[未読]
【24177】Re:データチェックの方法 KOTARO 05/4/14(木) 16:12 お礼[未読]
【24180】Re:データチェックの方法 ウッシ 05/4/14(木) 17:20 回答[未読]
【24182】Re:データチェックの方法 KOTARO 05/4/14(木) 17:37 お礼[未読]

【24133】データチェックの方法
質問  KOTARO  - 05/4/13(水) 0:16 -

引用なし
パスワード
   VBA初心者です。
次のようなデータチェックのマクロを考えているのですが手に負えません。
うまい方法があればぜひ教えてください。

A列のセルに何らかのデータが入力されている場合で、他の列が以下の条件1or2or3に合致しない場合、B列の該当セルの色を「赤」にしたい。

条件1:B列のセルに「1」または「2」が入力されていること
条件2:B列のセルに「1」が入力されている場合は、C列またはD列のどちらかに
    何らかのデータが入力されていること
条件3:B列のセルに「2」が入力されている場合は、C列D列ともブランクである
    こと
※A列のセルがブランクになるまで繰り返します。
※A列は固定ですが、チェックしたい対象列(ここでは仮にB列C列D列としましたが)
 は移動していきますので、アクティブセルのある列からその都度マクロを実行
 したい。
 
どうかよろしくお願いいたします。

【24136】Re:データチェックの方法
回答  ウッシ  - 05/4/13(水) 1:30 -

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

こんな感じでしょうか?

Sub test()
  Dim c As Long
  Dim r As Range
  c = ActiveCell.Column
  With WorksheetFunction
    On Error Resume Next
    For Each r In ActiveCell.EntireRow.Range("A:A") _
            .SpecialCells(xlCellTypeConstants)
      Select Case True
        Case r(1, c) = 1 And .CountA(r(1, c + 1).Resize(, 2)) > 0
        Case r(1, c) = 2 And .CountA(r(1, c + 1).Resize(, 2)) = 0
        Case Else
          r(1, c).Interior.ColorIndex = 3
      End Select
    Next
  End With
End Sub

【24156】Re:データチェックの方法
質問  KOTARO  - 05/4/13(水) 18:29 -

引用なし
パスワード
   ウッシさん 誠にありがとうございました。
マクロが実際に走ったのを見て感動しました。

ご多忙のところ大変恐縮ですが、以下の修正点を反映したいのでご教授ください。

1.アクティブセルをチェックするデータの先頭行におき、マクロを開始したい
 ・データの先頭行においてやってみましたが動きませんでした
 ・データの上部にはタイトル行が数行あります

2.チェック方法があと2通りあり、それぞれマクロをつくりたい

A列(固定)のセルに何らかのデータが入力されている場合で、他の列が以下の条件1or2or3に合致しない場合、B列の該当セルの色を「赤」にしたい。
<マクロ1>
条件1:B列のセルに「1」が入力されている場合は、C列に何らかのデータが入力
    されていること
条件2:B列のセルに「2」が入力されている場合は、C列もブランクであること
条件3:B列のセルがブランクの場合、Z列(固定)がブランクまたは「3」が入力
    されていること

<マクロ2>
条件1:B列のセルに「1」が入力されている場合は、C列に何らかのデータが入力
    されておりかつD列E列のどちらかに何らかのデータが入力されていること
条件2:B列のセルに「2」が入力されている場合は、C列D列E列ともブランクである
    こと
条件3:B列のセルがブランクの場合、Z列(固定)がブランクまたは「3」が入力
    されていること

※A列のセルがブランクになるまで繰り返します。
※A列Z列は固定ですが、チェックしたい対象列(ここでは仮にB列C列D列E列と
 しましたが)は移動していきます

【24161】Re:データチェックの方法
回答  ウッシ  - 05/4/13(水) 20:02 -

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

カオス・・・

Sub test1()
  Dim c As Long
  Dim g As Long
  Dim r As Range
  c = ActiveCell.Column
  g = ActiveCell.Row
  With WorksheetFunction
    On Error Resume Next
    For Each r In Range("A" & g & ":A65536") _
            .SpecialCells(xlCellTypeConstants)
      Select Case True
        Case r(1, c) = 1 And .CountA(r(1, c + 1).Resize(, 2)) > 0
        Case r(1, c) = 2 And .CountA(r(1, c + 1).Resize(, 2)) = 0
        Case Else
          r(1, c).Interior.ColorIndex = 3
      End Select
    Next
  End With
End Sub

Sub マクロ1()
  Dim c As Long
  Dim g As Long
  Dim r As Range
  c = ActiveCell.Column
  g = ActiveCell.Row
  With WorksheetFunction
    On Error Resume Next
    For Each r In Range("A" & g & ":A65536") _
            .SpecialCells(xlCellTypeConstants)
      Select Case True
        Case r(1, c) = 1 And Not IsEmpty(r(1, c + 1))
        Case r(1, c) = 2 And IsEmpty(r(1, c + 1))
        Case IsEmpty(r(1, c)) And _
          (IsEmpty(Cells(r.Row, "Z")) Or _
            Cells(r.Row, "Z").Value = 3)
        Case Else
          r(1, c).Interior.ColorIndex = 3
      End Select
    Next
  End With
End Sub

Sub マクロ2()
  Dim c As Long
  Dim g As Long
  Dim r As Range
  c = ActiveCell.Column
  g = ActiveCell.Row
  With WorksheetFunction
    On Error Resume Next
    For Each r In Range("A" & g & ":A65536") _
            .SpecialCells(xlCellTypeConstants)
      Select Case True
        Case r(1, c) = 1 And Not IsEmpty(r(1, c + 1)) And _
            .CountA(r(1, c + 2).Resize(, 2)) > 0
        Case r(1, c) = 2 And .CountA(r(1, c + 1).Resize(, 3)) = 0
        Case IsEmpty(r(1, c)) And _
          (IsEmpty(Cells(r.Row, "Z")) Or _
            Cells(r.Row, "Z").Value = 3)
        Case Else
          r(1, c).Interior.ColorIndex = 3
      End Select
    Next
  End With
End Sub

【24162】Re:データチェックの方法
お礼  KOTARO  - 05/4/13(水) 22:29 -

引用なし
パスワード
   ウッシさんどうもありがとうございました。
自分のレベルでは到底できないと途方に暮れていましたので本当に助かりました。

【24169】Re:データチェックの方法
質問  KOTARO  - 05/4/14(木) 11:09 -

引用なし
パスワード
   ウッシさん お世話になります。
マクロ1()を実行してみましたところ、うまくいかない点が
ありましたので大変お手数ですが対応策を教えていただけ
ないでしょうか。

アクティブセルをデータの先頭行において実行すると
動きませんでしたので「r(1, c)」→「r(g, c)」と思い
変更しました。

変更後一応走ったのですが、
・条件式の3番目が機能していない
   Case IsEmpty(r(1, c)) And _
   (IsEmpty(Cells(r.Row, "Z")) Or _
   Cells(r.Row, "Z").Value = 3)
・最終セルから2行オーバーして終了
という状況です。

どうかよろしくお願いいたします。

---------------------------------------
Sub マクロ1()
  Dim c As Long
  Dim g As Long
  Dim r As Range
  c = ActiveCell.Column
  g = ActiveCell.Row
  With WorksheetFunction
    On Error Resume Next
    For Each r In Range("A" & g & ":A65536") _
            .SpecialCells(xlCellTypeConstants)
      Select Case True
        Case r(1, c) = 1 And Not IsEmpty(r(1, c + 1))
        Case r(1, c) = 2 And IsEmpty(r(1, c + 1))
        Case IsEmpty(r(1, c)) And _
          (IsEmpty(Cells(r.Row, "Z")) Or _
            Cells(r.Row, "Z").Value = 3)
        Case Else
          r(1, c).Interior.ColorIndex = 3
      End Select
    Next
  End With
End Sub

【24171】Re:データチェックの方法
回答  ウッシ  - 05/4/14(木) 11:16 -

引用なし
パスワード
   こんにちは

>動きませんでしたので「r(1, c)」→「r(g, c)」と思い
>変更しました。
意味を理解するまで変更はしない方がいいですよ。

これで試して、表示されたエラーをお知らせ下さい。

Sub マクロ1()
  Dim c As Long
  Dim g As Long
  Dim r As Range
  c = ActiveCell.Column
  g = ActiveCell.Row
'  On Error Resume Next
  For Each r In Range("A" & g & ":A65536") _
          .SpecialCells(xlCellTypeConstants)
    Select Case True
      Case r(1, c) = 1 And Not IsEmpty(r(1, c + 1))
      Case r(1, c) = 2 And IsEmpty(r(1, c + 1))
      Case IsEmpty(r(1, c)) And _
        (IsEmpty(Cells(r.Row, "Z")) Or _
          Cells(r.Row, "Z").Value = 3)
      Case Else
        r(1, c).Interior.ColorIndex = 3
    End Select
  Next
End Sub

【24175】Re:データチェックの方法
回答  KOTARO  - 05/4/14(木) 12:14 -

引用なし
パスワード
   ウッシ さんお世話になります。
やってみましたが、マクロが走らないようです。
(特にエラーは表示されませんでした)

【24176】Re:データチェックの方法
回答  ウッシ  - 05/4/14(木) 12:29 -

引用なし
パスワード
   ▼KOTARO さん:
>ウッシ さんお世話になります。
>やってみましたが、マクロが走らないようです。
>(特にエラーは表示されませんでした)

こんにちは

「マクロが走らない」という表現は不正確なのでやめた方がいいです。
今回のマクロのように条件分岐処理が有る場合、エラー以外で期待した結果が得られない
場合は、その条件分岐処理で弾かれていると考えていいと思います。

A列の、アクティブセルの行から最終行までの値の入ったセルを一つずつ
(「r」がその一つずつのセルの事)を処理しています。

    Select Case True
      'c = ActiveCell.Column、B列にアクティブセルがあれば「2」
      'r(1, 2)は、rの右隣のセルの事
      '条件1:B列のセルに「1」が入力されている場合は、C列に何らかのデータが入力されていること
      Case r(1, c) = 1 And Not IsEmpty(r(1, c + 1))
      '条件2:B列のセルに「2」が入力されている場合は、C列もブランクであること
      Case r(1, c) = 2 And IsEmpty(r(1, c + 1))
      '条件3:B列のセルがブランクの場合、Z列(固定)がブランクまたは「3」が入力されていること
      Case IsEmpty(r(1, c)) And _
        (IsEmpty(Cells(r.Row, "Z")) Or _
          Cells(r.Row, "Z").Value = 3)
      '上記条件以外の場合B列セルを赤に
      Case Else
        r(1, c).Interior.ColorIndex = 3
    End Select

となっていますので、F8キーでステップ実行してどのように弾かれているか確かめて下さい。

【24177】Re:データチェックの方法
お礼  KOTARO  - 05/4/14(木) 16:12 -

引用なし
パスワード
   ウッシさん どうもすみません。
うっかり不備のないデータで実行しておりましたので
動いてないように見えただけでした。
不備ありデータで実行すると見事に不備がチェックされました。
すばらしいですね。

ひとつお願いですが、処理が完了した時点で「チェック完了しました」という
メッセージが出るようにできますでしょうか。
もしできるようでしたら教えて下さい。

また他にも差し迫ったデータチェックがあり、別スレでご相談させていただきたいと存じます。

今回は本当にお世話になりました。

【24180】Re:データチェックの方法
回答  ウッシ  - 05/4/14(木) 17:20 -

引用なし
パスワード
   こんにちは

>処理が完了した時点で「チェック完了しました」
コード最後の部分に入れるだけです。

  Next
  MsgBox "チェック完了しました。",64
End Sub

【24182】Re:データチェックの方法
お礼  KOTARO  - 05/4/14(木) 17:37 -

引用なし
パスワード
   ウッシさん 誠にありがとうございました。
別スレをたてましたのでもしお時間がありましたら
アドバイスお願いいたします。

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