トップページ > プログラム > 2014年06月25日 > 37/MdzoU

書き込み順位&時間帯一覧

9 位/215 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000000003205



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
900
Excel VBA 質問スレ Part33

書き込みレス一覧

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で検索のほうが分かりやすいかなと。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。