Excel VBA質問箱 IV

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

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


41586 / 76732 ←次へ | 前へ→

【40225】Re:記入漏れを探す
回答  かみちゃん E-MAIL  - 06/7/9(日) 20:29 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>下のような表です
>今回は記入漏れの人の名前がGとHで
>それを記入漏れと書いてある下に名前を出したいのです
>
> A     B   C    D        E   F
>    担当者名 欠席 記入漏れ     名簿
>11班    A   F            A
>12班    B               B
>13班    C               C
>14班    D               D
>15班    E               E
>                      F
>                      G
>                      H

E列の名簿に基づいて、それぞれが記入されているかどうかをF列に一旦書き出して
書き出されていない場合は、D列に転記するというコードは以下の方法でできると
思います。

なお、記入されているかどうかは、VBAコード内でワークシート関数であるCOUNTIF
を利用しています。
記入漏れであれば、0が返されますので、それをオートフィルタで抽出しています。

Sub Macro1()
 Dim c As Range
 Dim LastCell As Range
 Dim rngCount As Range
 Dim rngNotWrite As Range
 
 Application.ScreenUpdating = False
 
 '記入漏れかどうかのチェック
 Set rngCount = Range("A2", Range("A65536").End(xlUp)).Offset(, 1).Resize(, 2)
 Set LastCell = Range("E65536").End(xlUp)
 For Each c In Range("E2", LastCell).Offset(, 1)
  c.Value = WorksheetFunction.CountIf(rngCount, c.Offset(, -1))
 Next
 
 '記入漏れがある場合は転記処理
 With Columns("E:F")
  .AutoFilter Field:=2, Criteria1:="0"
  On Error Resume Next
  Set rngNotWrite = Range("E2", Range("E65536").End(xlUp)).SpecialCells(xlCellTypeVisible)
  If rngNotWrite.Address <> "$E$1" Then
   rngNotWrite.Copy Range("D2")
  End If
  .AutoFilter
  .Item(2).ClearContents
 End With
 
 Application.ScreenUpdating = True
 
 If rngNotWrite.Address <> "$E$1" Then
  MsgBox "記入もれをチェックしました。"
 Else
  MsgBox "記入もれはありませんでした"
 End If
End Sub
3 hits

【40220】記入漏れを探す はち 06/7/9(日) 16:35 質問
【40221】Re:記入漏れを探す かみちゃん 06/7/9(日) 16:43 発言
【40222】Re:記入漏れを探す はち 06/7/9(日) 17:50 お礼
【40223】Re:記入漏れを探す はち 06/7/9(日) 17:54 質問
【40225】Re:記入漏れを探す かみちゃん 06/7/9(日) 20:29 回答
【41196】Re:記入漏れを探す はち 06/8/1(火) 17:37 お礼

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