ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Excel(エクセル)活用コミュの表示されているデータの最終行が取得したい。

  • mixiチェック
  • このエントリーをはてなブックマークに追加
こんにちは。またまた質問です。

現在出納帳を作成中なのですが、A列から順に日付・摘要・摘要2・入金・出勤・残金と表を作っており、残金欄には
「=IF(B5&C5="","",F4+D5-E5)」※例5行目の場合
と関数を打ち込み、摘要に何も入力されていない場合はデータを表示しない関数を入れて、フィル機能で250行あたりいれております。
そして最終行の取得マクロとして以下の様にマクロをくんでおります。
----------------------------------------------
Sub 罫線()
最終行 = Cells(Rows.Count, 6).end(xlUp).Row

Range(Cells(3, 2), Cells(最終行, 7)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
    ・
    ・
    ・
   省略
    ・
    ・
Range("A1").Select

End Sub
-----------------------------------------------------------
この状態で最終行を取得すると最終行が250行目を取得してしまいます。

これをなんとか表示されているセルを最終行として取得したいのですがいい方法ありますでしょうか??

日付や摘要欄では連続するデータがないため残金列で最終行を取得しています。(※同日の入金・出金の場合日付は省略して入力している為)

宜しくお願いします。
エクセル2003 XPです。

コメント(22)

こんにちは。
最終行 = Cells(Rows.Count, 6).end(xlUp).Row
では、何も入力されていないセルを示しますからうまくいかないんでしょうね。
つまり、一見何も表示されてはいまぜんが、"0"表示が何も表示されていないだけで、
すでにセルの値に数式が入ってると思います。おそらく、「=A6-B6」みたいな?

ですので、地道にFor〜Next文を付け加えて、最終行を特定するしかないでしょうね…
下記のような文にしたらどうでしょうか?


最終行 = Cells(Rows.Count, 6).End(xlUp).Row

For i = 最終行 To 2 Step -1  '最終行から-1ずつ減算
If (Cells(i, 6) <> 0) Then Exit For
Next i
最終行 = i
罫線だけの問題なら、「摘要」、「摘要2」を判断条件として、条件付き書式で
内容のある行だけに罫線をつけることも可能ですよね。
皆さんありがとうございます。
データが会社なので明日朝一で試してみたいと思います(^ω^)

takecさん〉実は罫線だけではなくてこのあとデータの入力やらなんやらで結局データの表示されてない最終行の取得もあるんです。でもありがとうございます(^ω^)
おはようございます。

朝から一度試してみたのですが、よこちゃんさんの構文だと数式の入っているセルまで認識してしまい、250行目を行番号として取得してしまいます。。。

ゆーーけさんの構文だと何故かA3からF1までを罫線で囲むようになってしまいました。。。(コレはもしかして私の表がF2だけ何も入力されていないからでしょうか??)

ここに今作っている出納帳のファイル(表のみ)をアップしました。
http://cid-680b00e561400764.skydrive.live.com/self.aspx/%e5%85%ac%e9%96%8b
この表のA3〜F列の最終行(データが数値表示されている)までを取得したいです。

宜しくお願いします。

>最終行 = Cells(Rows.Count, 6).End(xlUp).Row

最終行を数式の入っている列で判断しようとされていますが
>「=IF(B5&C5="","",F4+D5-E5)」※例5行目の場合
同様、摘要・摘要2で判断すればよろしいのでは?

最終行 = Cells(Rows.Count, 6).End(xlUp).Row
 ↓
最終行 = Cells(Rows.Count, 2).End(xlUp).Row
If 最終行 < Cells(Rows.Count, 3).End(xlUp).Row Then
最終行 = Cells(Rows.Count, 3).End(xlUp).Row
End If

省略されたのかもしれませんが、
変数は宣言しておく(Option Explicit使用)のが自分の主義です。
こちらでテストする際にも宣言しておいていただいた方がそのまま実行できるので、
助かるんですけど…。
単純に、

最終行 = WorksheetFunction.Count("A:A") + 4

とかでできるのでは? 日付欄の日付は必ず入力されるものとして、数値データだから、その日付の件数をワークシート関数のCOUNTで数える(別にA列じゃなくてもいいですが)。で、先頭行が4行目からみたいなので、「4」を足した位置を最下行とする。
takecさん、kusakabeさん、よこちゃんさんありがとうございます。

出来ました。今回はよこちゃん案を採用させて頂きました。
変数の宣言ですか。すいません私ちゃんとしたスクール等でVBAを習ったわけではないので今一変数の宣言に関して分からないことが多かったのとどこかのサイトに変数の宣言は省略できると書いてあったのであまり気にしていませんでした。。

よほどの馬鹿ってことですね。
あ、解決されているようですが…

>11
>先頭行が4行目から
1件目が4行目だから、プラスするのは3では…?

それと
>最終行 = WorksheetFunction.Count("A:A") + 4
Countの中身が…

A1:A2に数値が入っていなくて、必ず日付があって、非表示行もない場合
最終行 = WorksheetFunction.Count(Range("A:A")) + 3
ですかね…。

> 14

takecさん。おっしゃる通りの誤りでした。ご指摘ありがとうございます。
マクロ初心者ですが少しご教授ください。
最終行取得興味がありました。
A列2行目から30行目までのSumするマクロがわからなくて苦戦しております。
データを増やせば行が増えるので30行目を指定するのを最終行取得で
範囲を確定したいのですができません。
Sum(A2:A30)の関数で行を増やせばいいんですがたくさんあるデータを
新規のファイルにするマクロを組んでそのついでにSumを使いたいのです。
よろしくお願いします。
マリ男様、早速ありがとうございました。
前者も後者も確認できました。
これでエクセルの幅がぐーんと広がりました。
ありがとうございます!

ログインすると、残り11件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

Excel(エクセル)活用 更新情報

Excel(エクセル)活用のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。