- Excel VBA 質問スレ Part33
900 :デフォルトの名無しさん[sage]:2014/06/25(水) 21:15:40.33 ID:37/MdzoU - >>893
コード書いてみた 以下のマクロを実行すると変数colで指定した列の最終行が変数rwに入る 例によってシートはWith〜で指定しているので適宜書き換えてください。 Sub test() Dim col As Long '処理対象列 Dim rw As Long '最終行 Dim er As String '検索するエラー値 Dim rng As Range With ThisWorkbook.Sheets(1) '処理対象シートの指定 col = 1 '1列目を指定 er = "NaN" 'エラー値”NaN"を設定 rw = .Cells(.Rows.Count, col).End(xlUp).Row If .Cells(rw, col).Value = er Then Set rng = .Cells(1, col).Resize(rw).Find(What:=er, after:=.Cells(rw, col), _ LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, _ SearchDirection:=xlNext, MatchCase:=True, MatchByte:=True) rw = rng.Row - 1 End If Set rng = Nothing End With End Sub
| - Excel VBA 質問スレ Part33
904 :900[sage]:2014/06/25(水) 21:26:51.14 ID:37/MdzoU - >>900はRange変数を使わなくても問題なかった。
Sub test() Dim col As Long '処理対象列 Dim rw As Long '最終行 Dim er As String '検索するエラー値 With ThisWorkbook.Sheets(1) '処理対象シートの指定 col = 1 '1列目を指定 er = "NaN" 'エラー値”NaN"を設定 rw = .Cells(.Rows.Count, col).End(xlUp).Row If .Cells(rw, col).Value = er Then rw = .Cells(1, col).Resize(rw).Find(What:=er, after:=.Cells(rw, col), _ LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, _ SearchDirection:=xlNext, MatchCase:=True, MatchByte:=True).Row - 1 End If End With End Sub ただし、使わないと可読性は下がるかもしれない。
| - Excel VBA 質問スレ Part33
905 :900[sage]:2014/06/25(水) 21:31:27.09 ID:37/MdzoU - エクセルが吐く本来のエラーじゃなくて、
>>893が独自に"NaN"という文字列をエラーとして定義しているだけじゃないの? エラー以外が数値かどうかもはっきりしないから それ前提で>>900のコード書いたんだけど。
| - Excel VBA 質問スレ Part33
908 :デフォルトの名無しさん[sage]:2014/06/25(水) 22:14:38.62 ID:37/MdzoU - >>907
1 step -1 っていうふうに区切っちゃ駄目。 あくまでも For i = A to B step C という構文の一部だからね。 変数iをカウンターとして、Aがその開始値でBが終了値、 Cは、ループするときの数値の増減を指定するものだよ。 デフォルトは1だからループ一回ごとにカウンターが1ずつ増える。 Stepを-1にすればループするごとにiの値が1ずつ減る。 今回はそれを利用して判定する行をひとつずつ上にずらしてるんだよ。 下から上に1行ずつセルの値が"NaN" かどうかを判定して、 初めて"NaN" じゃなかった行を取得してる。 ちなみに俺の書いたコードではFindを使って上から下に検索し、 初めて”NaN"が出てくる行(の一個上の行)を取得してました。
| - Excel VBA 質問スレ Part33
910 :デフォルトの名無しさん[sage]:2014/06/25(水) 22:50:03.47 ID:37/MdzoU - >>909
データの総数とエラー値の個数がわからないからなんとも言えないんじゃないですか? データが10万行有って、そのうちつかえるデータが100行ほどで 残りが全部NaNだった、なんて場合は上からのほうが早いですし。 まぁ、そんな極端な事例があるかどうかは知りませんが。 あと、一行ずつループで判定するよりは ざっくりFindで検索のほうが分かりやすいかなと。
|
|