オートフィル後のセル値をメッセージににオートフィル結果だけを出したい
はじめまして。ExcelVBAは今年の5月から始めました。
15年ほど前にプログラマーだった時期がありその時はVBやVBA専門で開発していたのですが、今はほとんど忘れてしまい、復習の意味で勉強しています。
そして、業務で多いと予想される「ExcelVBAでのオートフィル操作」について勉強しているのですが分からないところがあり、ここで相談させていただきました。
オートフィル後、結果だけを取得したいのにタイトル行も取得されてしまう
ここから、Aの果物で「パイナップル」「リンゴ」「みかん」をキーにフィルターをかけます。
するとこう表示されます。
その後、フィルターした結果のC列から担当者名をメッセージボックスで表示させたいです。
つまり、この場合は動かすと、
ループ1回目 → 「山田」
ループ2回目 → 「直原」
ループ3回目 → 「浅井」
ループ4回目 → 「弥中」
が表示されることになります。
しかし、現状のプログラムだと、
ループ1回目 → 「担当者」
ループ2回目 → 「山田」
ループ3回目 → 「直原」
ループ4回目 → 「浅井」
ループ5回目 → 「弥中」
と表示されてしまいます。
これを、1回目は「担当者」ではなく「山下」が表示されるようにしたいです。
該当のソースコード
ExcelVBA
1 2 3Option Explicit 4 5Private Sub cmd_start_Click() 6 7Dim wbinput As Workbook 'インプットファイル格納 8Dim wbinput_Sheet As Worksheet 'インプットファイルのシート 9Dim wboutput As Workbook 'アウトプットファイル格納 10Dim wboutput_Sheet As Worksheet 'アウトプットファイルのシート 11 12Dim stroutput_FName As String 13Dim strSheetName As String 14Dim endcol As Long 'エンド列名 15 16Dim strcolor As String 17 18Dim p As Long, n As Long 'カウンタ変数 19Dim r As Range, rr As Range, rs As Range 'Visibleセルを取得する変数 20 21 22'+++++++++定義+++++++ 23 24p = 0 25n = 2 26strSheetName = "sheet1" 27 28'+++++++++++++++++++ 29 30 'アウトプットファイルのファイル名取得 31 stroutput_FName = ActiveWorkbook.Name 32 33 'アウトプットファイルのファイルパスを取得 34 Workbooks.Open ThisWorkbook.Path & "\" & stroutput_FName 35 Set wboutput = ActiveWorkbook 'アクティブなワークブック 36 37 38 'ほしいデータのあるシートをアクティブにする 39 Set wboutput_Sheet = wboutput.Worksheets(strSheetName) 40 wboutput_Sheet.Activate 41 42 43 With wboutput 44 45 'オートフィルタをセット 46 Rows("1:1").Select 47 Selection.AutoFilter 48 ActiveSheet.Range("A1").AutoFilter Field:=1, Criteria1:=Array( _ 49 "パイナップル", "みかん", "リンゴ"), Operator:=xlFilterValues 50 51 52 'オートフィルタの結果から担当者の名前をメッセージボックスで表示 53 Set r = Range("C1", Range("C" & Rows.Count).End(xlUp)).SpecialCells(xlCellTypeVisible) 54 55 56 'r:A1~データの存在する最大行セルまでの範囲(表示されているセルのみ) 57 'rr:A1~データの存在する最大行セルまで、A1から1つずつ格納される 58 For Each rr In r 59 60 'rsへ選択セルの値を格納 61 For Each rs In rr.Areas 62 63 '選択セルの行数を取得 64 p = (rs.Row) 65 66 'メッセージボックスに担当者名出力 67 MsgBox (rr) 68 69 70 n = n + 1 71 72 Next 73 74 Next 75 76 Application.DisplayAlerts = False 77 78 .Close 79 80 Application.DisplayAlerts = True 81 82 End With 83 84End Sub 85 86
試したこと
上記ソースが私が考えて書いたロジックです。
このままだと担当者名はちゃんとMsgboxで表示されるのですが、余計な「担当者」(C1セル)もメッセージされてしまっています。
そうではなくて、タイトル行を除いたデータだけを表示させるようにするには
どうしたらよいのでしょうか?
最初は、スタート時はタイトル行を除いてC2セルから固定でスタートさせようかと思ったのですが、オートフィルなので、もしかしたらオートフィル結果の最初の行はC4かもしれないしC5かもしれないこともあるので・・・
3日間色々と調べながら考えてやっと上記のソースまで来ましたが、タイトル行を除いてというところがどうしても分からず。
本来、
SpecialCells
があればオートフィルで可視化されたセルのみが表示されると思っていたのですが、どこが違うのでしょうか?
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。


回答2件
あなたの回答
tips
プレビュー