<追記>
正解
</追記>とりあえず答えはこれでOK
— ちゅん🐣VBAer (@KotorinChunChun) 2020年6月13日
理由は執筆中
ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
「vba オートフィルター 有無」辺りで検索するとわんさか出てくるんですが、方法として滅茶苦茶下から上にデータあるセルを見つけてその行がヘッダ行かどうかで判定しろ、とかWorksheetFunctionのSUBTOTAL使えとかが出てきますでしょ?
何でかしらー。フィルターかけたら可視の行数数えればいいのに、と思うわけです。
で、なんでかできないんだねって話です。
まぁこんな感じのデータがあって「担当者100のIDリストをCSVでくれ」とか言われたら、まぁとりあえず担当者のIDでフィルターかけるじゃないですか・・・。データ4行、ヘッダ行あり・・・。
( ´゚д゚`)エー
ヘッダ行の次の行がとれちゃってるのかな? とか思ったんですが、コード101にしたら
$A$1:$D$1,$A$3:$D$3,$A$9:$D$9,$A$11:$D$12
$A$1:$D$1,$A$3:$D$3,$A$9:$D$9,$A$11:$D$12
$A$1:$D$1,$A$3:$D$3,$A$9:$D$9,$A$11:$D$13
1
1
1
12
5
1はまずいっしょー。ヘッダ行だけの場合と区別つかんじゃないですかぁ(´;ω;`)ウゥゥ
今回もちゅんちゅん氏(@KotorinChunChun)に聞きましたが僕の力ではどうにもならないです(´・ω・`)
Option Explicitは(楽だからw)つけない主義でしたが、ちゅんちゅん氏の主張に感化されてつけるようになりました(*^▽^*)
ちなみにいつも私はこんな感じです
Sub Macro1() If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False Dim r As Long: r = Range("A1").End(xlDown).Row Dim c As Long: c = Range("A1").End(xlToRight).Column ActiveSheet.Range("$A$1").AutoFilter Field:=1, Criteria1:="101" Dim r2 As Long: r2 = Range("A1").End(xlDown).Row If r2 > r Then 'データなしの処理 Else Range(Range("B1"), Cells(r, 2)).Copy Workbooks.Add ActiveSheet.Paste Application.CutCopyMode = False ActiveWorkbook.SaveAs Filename:="C:\test\101_test.csv" _ , FileFormat:=xlCSV, CreateBackup:=False ActiveWindow.Close (False) End If End Sub
これで101のところを担当者コードの配列にしてfor each nextかdo loopでぐるぐるさせる感じです。