Excel VBA質問箱 IV

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

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


5607 / 13645 ツリー ←次へ | 前へ→

【49874】データの最終行 刀火 07/6/26(火) 16:35 質問[未読]
【49876】Re:データの最終行 ichinose 07/6/26(火) 17:51 発言[未読]
【49879】Re:データの最終行 刀火 07/6/26(火) 19:01 お礼[未読]
【49880】Re:データの最終行 ichinose 07/6/26(火) 20:06 発言[未読]
【49884】Re:データの最終行 Machiko 07/6/27(水) 7:04 質問[未読]
【49885】Re:データの最終行 ichinose 07/6/27(水) 7:52 発言[未読]

【49874】データの最終行
質問  刀火  - 07/6/26(火) 16:35 -

引用なし
パスワード
    刀火です、お願いします。

 エクセルで認知されている最終行を取得するコードは下記のものだと思うのですが、
 
  Dim Lastrow as Integer
  Lastrow = ActiveSheet.Cells.SpecialCells(xlLastCell).Row
  
 この結果出てくる最終行は、何故か実際にデータ入力された行よりも遥か下の行になってしまいます。
 このマクロのあるシートは、他のシートをコピーしたものなので、以前のシートに入力していたデータが消えきっていないのかな? と予想しているのですが……うまく実際のデータのある行を取得させるには、どうすれば良いのでしょうか。

 なお、行の削除や、数値のクリアなどは既に行っております。

【49876】Re:データの最終行
発言  ichinose  - 07/6/26(火) 17:51 -

引用なし
パスワード
   ▼刀火 さん:
こんにちは。


> この結果出てくる最終行は、何故か実際にデータ入力された行よりも遥か下の行になってしまいます。
> このマクロのあるシートは、他のシートをコピーしたものなので、以前のシートに入力していたデータが消えきっていないのかな? と予想しているのですが……うまく実際のデータのある行を取得させるには、どうすれば良いのでしょうか。
>

CurrentRegionプロパティから求める方法もありそうです・・・が、
場合によっては、違う結果になってしまう場合もあるので
違う方法でないかなあと模索していたら、

> エクセルで認知されている最終行を取得するコードは下記のものだと思うのですが、
> 
>  Dim Lastrow as Integer
   dim rng as range
   set rng=ActiveSheet.UsedRange  
>  Lastrow = ActiveSheet.Cells.SpecialCells(xlLastCell).Row
>  

Excel2002での確認ですが、上記できちんと最後のセルを取得できました。
試してみてください。

【49879】Re:データの最終行
お礼  刀火  - 07/6/26(火) 19:01 -

引用なし
パスワード
   ▼ichinose さん:

 調べてくださったコードを試してみました。
 (理屈はワカラナイですが)、自分のコードと違い、ちゃんとデータの最終行を取得することができました。ありがとうございました!

【49880】Re:データの最終行
発言  ichinose  - 07/6/26(火) 20:06 -

引用なし
パスワード
   >CurrentRegionプロパティから求める方法もありそうです・・・が、
>場合によっては、違う結果になってしまう場合もあるので
>違う方法でないかなあと模索していたら、
>
>> エクセルで認知されている最終行を取得するコードは下記のものだと思うのですが、
>> 
>>  Dim Lastrow as Integer
>   dim rng as range
>   set rng=ActiveSheet.UsedRange  
>>  Lastrow = ActiveSheet.Cells.SpecialCells(xlLastCell).Row

↑このコードより、

Sub test()
   Dim Lastrow As Long
   With ActiveSheet.UsedRange
    Lastrow = .SpecialCells(xlLastCell).Row
    End With
   MsgBox Lastrow
End Sub

とした方が意味も理解しやすいですね!!

【49884】Re:データの最終行
質問  Machiko  - 07/6/27(水) 7:04 -

引用なし
パスワード
   ▼ichinose さん:
横からすみません。
勉強になりました。
最終行の取得はよくテーマになり、回答がいっぱいあるようですが。
自分なりに、色々なケースを書いたりしていますが・・・
こんなのはだめでしょうか?

With Sheets("Sheet1").Cells
   MsgBox .SpecialCells(11).Rows.Row
End With

【49885】Re:データの最終行
発言  ichinose  - 07/6/27(水) 7:52 -

引用なし
パスワード
   ▼Machiko さん:
おはようございます。
>最終行の取得はよくテーマになり、回答がいっぱいあるようですが。
>自分なりに、色々なケースを書いたりしていますが・・・
>こんなのはだめでしょうか?
>With Sheets("Sheet1").Cells
>   MsgBox .SpecialCells(11).Rows.Row
>End With

駄目ではないですよ!!
ただ、最後のセルの行位置を求めるだけなら、

刀火さんが記述された

  .SpecialCells(11).Row

   ↑で取得できますよね!!

今回の刀火さんの質問は、この.SpecialCells(11)
(.SpecialCells(xlLastCell))のバグのような現象についての投稿だったのです。


新規ブックの標準モジュールに

'=============================================================
Sub test()
  With ActiveSheet
    .Range("a1:k30").Value = 1
    MsgBox ".cells.SpecialCells(11).Rows.Row = " & _
         .Cells.SpecialCells(11).Rows.Row & _
         " <--- Machikoさんのコード" & vbCrLf & vbCrLf & _
         ".cells.SpecialCells(xlLastCell).Row = " & _
         .Cells.SpecialCells(xlLastCell).Row & _
         " <---刀火さんのコード" & vbCrLf & vbCrLf & _
         ".UsedRange.SpecialCells(xlLastCell).Row = " & _
         .UsedRange.SpecialCells(xlLastCell).Row & _
         " <--- ichinose" & vbCrLf & vbCrLf & _
         "と全て同じ値を返しますが・・・、"
     
    .Range("a23:j30,k1:k30").ClearContents
    MsgBox "a23:j30とk1:k30のセル範囲の値をクリアした状態で同じことを行うと・・"
    MsgBox ".cells.SpecialCells(11).Rows.Row = " & _
         .Cells.SpecialCells(11).Rows.Row & _
         " <--- Machikoさんのコード" & vbCrLf & vbCrLf & _
         ".cells.SpecialCells(xlLastCell).Row = " & _
         .Cells.SpecialCells(xlLastCell).Row & _
         " <---刀火さんのコード" & vbCrLf & vbCrLf & _
         ".UsedRange.SpecialCells(xlLastCell).Row = " & _
         .UsedRange.SpecialCells(xlLastCell).Row & _
         " <--- ichinose" & vbCrLf & vbCrLf & _
         "という結果の違いを問題にしています"
    End With
End Sub

上記のコードを実行した結果を検討してしてみてください。

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