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

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

初心者のためのExcel VBAコミュの変数でいろいろ---最終行---

  • mixiチェック
  • このエントリーをはてなブックマークに追加
VBAを始めた当初、変数の使い方をまったく知らず、
未だに変数の名前のつけ方とかド素人ぶり全開です。

ところで、表やリストの最終行って、みなさん、
どんな風に変数に取り込みますか?
自分の好きな書き方ばっかりになってしまって、
別の書き方をしなくなっているので教えてください<(__)>

ちなみに自分はもっぱら↓の書き方です。
これが好きなんですね、なぜか(笑)

Dim E_rw As Long

E_rw = Range("A65000").End(xlUp).Row

行数を65000にしているのは65536行目まで使うことが
なかったので、つい切りのいい数にしてしまってます。

コメント(19)

はじめまして。今日、このコミュニティに参加させていただいた新米です。
一年前のトピなのでもうご存知かと思いましたが、私はこんな感じで使ってます。ご参考までに…。

Option Explicit

Sub 最終行()
 Dim E_rw As Range

 Set E_rw = Cells(Rows.Count, "A").End(xlUp)
 MsgBox ("Aの最終行は" & E_rw.Row & "です")
End Sub
はじめまして。
mixi初心者であり、コミュニティ参加も初めてですが、よろしくお願いします

私が最近使っている方法は、Findで検索する方法です

Dim vntFoundCell As Variant
Dim lngRow As Long

With ActiveSheet.Range("A:A")
Set vntFoundCell = .Find(What:="*", _
After:=.Item(1), _
LookIn:=xlFormulas, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious)
End With
If Not vntFoundCell Is Nothing Then
lngRow = vntFoundCell.Row + 1
Else
lngRow = 1
End If

最終行を取得するには長いコードですけど(^^;)
これにエラー処理をいろいろとつけ足して
Functionプロシージャで作成して使用しています
おおっ!
新たな書き込みが…トピの書き込みが頻繁に行われていないので不安になっておりました(^^; ちょっと安心…。
1ではトピ主さんの変数をつかいましたが、私は変数名をつける時に、下記のURLのページを参考にしております。

■エクセルExcel大事典
 識別子がいいプログラムをデザインする!
http://home.att.ne.jp/zeta/gen/excel/c04p15.htm
こんばんは、Goldenさん
私もエクセルExcel大事典は、よく参考にさせてもらっています(^^)

その他によく見るのは、モーグですかね
私が書いたコードも、そのサイトの井川はるきさんが書いていたコードなんですけど(^^;)

私が変数名をつける時に参考にしているのは下記のページです
Visual Basicですが変数名や定数などのプリフィックスについて
載っているのでよく使いますね

■Microsoft Office 2000/Visual Basic プログラマーズ ガイド
http://msdn.microsoft.com/library/ja/?url=/library/ja/odeopg/html/deovroffice2000visualbasicprogrammersguide.asp?frame=true

このページもモーグで見つけたんですけど(^^;)

変数名やプロシージャ名をつける時は悩みますね
今は、携帯の英和辞書機能を使って英単語を見つけては
変数名などにつけています
いちろさん、おはようございます。

>>変数名やプロシージャ名をつける時は悩みますね

私は使い捨ての場合は、和名にしてます(^^;
英名を調べる時はYahoo!の辞書と翻訳を使ってます。
それに、他人の書いたコードをよく参考にしてます。
超初心者です。
最初にVBAはなんと読みますか?そのままブイ・ビー・エーですか。
次に一番レスGolden さんの

Sub 最終行()
 Dim E_rw As Range
 Set E_rw = Cells(Rows.Count, "A").End(xlUp)
 MsgBox ("Aの最終行は" & E_rw.Row & "です")
End Sub
をマクロのALT+F11の標準モジュールに
コピー貼り付けましたが、実行しても動作しません。
教えてください。
因みに私のエクセルはオフイス2000
Win Meです。
>宇宙えびさん

VBAの読み方についてですが、『ビジュアルベーシック・フォー・アプリケーションズ』と読むのではないでしょうか。

http://ja.wikipedia.org/wiki/Visual_Basic_for_Applications

すみません。Msgboxの ( ) を削除してもう一度実行してみてください。
私の環境はExcel2007・Win XPです。

はじめまして宇宙えびさん、いちろです

最初の質問のVBAですが、ブイ・ビー・エーと読んでます
ちなみにVBAとはVisual Basic for Applicationsの略です

2つ目の質問ですが
まず、動作しないとは?
エラーが発生するのでしょうか? もしくはメッセージBOXが表示されないのでしょうか?
また、実行方法は?

私の場合、2003ですが標準モジュールにそのままコピー&ペーストして
VBEで実行や、シート上でAlt + F8 → 最終行をクリックでも
メッセージBOXが表示されました
>いちろさん

あれから、Findでの最終行の取得する方法を印刷範囲の指定とかで色々使ってます。

Option Explicit
Sub Sample()
  Dim objCol As Range
  Dim objRng As Range
  Set objCol = Columns("A")
    With objCol
      Set objRng = .Find(What:="*", After:=.Cells(1), _
        LookIn:=xlValues, Searchorder:=xlByRows, _
        SearchDirection:=xlPrevious)
    End With
  MsgBox "最終行は" & objRng.Row & "です"
  Set objCol = Nothing: Set objRng = Nothing
End Sub
Golden さん、いちろさん、どうもありがとうございます。
()を削除して実行したら、
MsgBoxが表示されて、
「Aの最終行は1です」となりますがそれで良いのでしょうか。

9番レスのsampleマクロもそのままコピー貼り付けて実行テストして見たのですが、
「実行時エラー'91'
オブジェクト変数または With ブロック変数が設定されていません」となります。
何か追加するものがありますか。
このように全く超初心者なのですが、みなさんにおすがりして、
今からすこしずつ勉強したいと思っています。
宜しくお願いします。
----------------------
VBAは簡単に「バー」とでも呼べないかなーと思っていました。
>宇宙えびさん

9のコードはA列になにも入力されないとエラーになりますね(^^;
いちろさんのコードのIfを拝借してエラーが出ないようにしました。
中途半端なコードを提示してごめんなさい。

>>「Aの最終行は1です」となりますがそれで良いのでしょうか。
いちろさんのコードでは最終の空白でないセルのひとつ下のセル番号を表示し、私のは最終の空白でないセル番号を表示してます。全て空白の場合は1となってしまいます。なので下記のコードではexitするようにしました。
最終行になにかを入力する場合や、範囲の選択をする場合とか、必要に応じて改良する必要がありますね。
わたしもExcel VBAの勉強中ですので初心者ですよ。
エラー処理も未熟で、拙いロジックしか思いつきません(^^;
こちらこそ宜しくお願いします。

Option Explicit
Sub 最終行()
  Dim objCol As Range
  Dim objRng As Range
  Set objCol = Columns("A")
    With objCol
      Set objRng = .Find(What:="*", After:=.Cells(1), _
        LookIn:=xlValues, Searchorder:=xlByRows, _
        SearchDirection:=xlPrevious)
    End With
    If Not objRng Is Nothing Then
      MsgBox "最終行は" & objRng.Row & "です"
    Else
      Exit Sub
    End If
  Set objCol = Nothing: Set objRng = Nothing
End Sub
Golden さん、
A列にデータを入力したら
最終行が表示されました。初心者はこれだから困りますね。
これの内容は少しレベルが高いようで、
質問の第二弾として次のものを用意しました。
暇の時で良いのでよろしくお願いします。

Let's Excel VBA というホームページから貰ってきて
コード入力の練習をしています。
実行はできるのですが、コードの意味がわかりません。

Sub A_001()
  Dim 貴方の年齢 As Integer
  貴方の年齢 = InputBox(Prompt:="貴方の数え年を入力してください。")
  MsgBox"西暦" & 生まれた年(貴方の年齢) & "年生まれですね。"
End Sub
'-----------
'ここまではわかりますが、これから下がわかりません。
'(X As Integer)は宣言なのですか。
'ここに出てくる X は何でしょうか、なぜ X を引かなくてはなりませんか。
'次に関数 Year(Date)ですが、普通にセルに入れるとエラーになりますが
'VBA関数と普通の関数では書式が異なりますか。
'-----------
Function 生まれた年(X As Integer)
生まれた年 = Year(Date) - X
End Function
宇宙えびさん こんにちは。
自分も混ぜて下さい。

(X as integer)は宣言ではありますが、普通のプロシージャ
とは違います
functionプロシージャだと言う事です。 これはエクセルで言う所の
関数になります。
 つまり(x as integer)は引数になります。
使い方の例:

Sub A_001()
Dim x As Integer
x = InputBox(Prompt:="貴方の数え年を入力してください。")
Call 生まれた年(x)
End Sub
Function 生まれた年(x As Integer)
生まれた年 = Year(Date) - x
MsgBox "あなたの生まれた年は" & 生まれた年 & "年ですね?"
End Function

A_001で仕入れた情報を元に『生まれた年(x)』を引数を与えて実行させてます。
なので、生まれた年プロシージャのみでは機能しません。

xを引く理由は
 Year(date)=今日の西暦
 X = あなたの数え年
 例:私は今年32になります。
 1976(生まれた年) = 2008(Year(date)) - 32(x)
わかりました?

関数:エクセルでもyear() 関数はそのまま存在しますが
 VBAのdateはエクセルではtoday()関数になります。したがって
セルに入れるときは
=year(today())
と入れてみてください。

 理解しにくい文ですいません。 おたがいがんばってVBAをものにしましょう
つ[正しいFanctionの使い方]

>>13でのFanctionの使いかたが間違っているので、修正おば・・

Sub A_001()
Dim x As Integer
x = 生まれた年(InputBox(Prompt:="貴方の数え年を入力してください。"))
MsgBox "あなたの生まれた年は" & x & "年ですね?"
End Sub

Function 生まれた年(x As Integer)
生まれた年 = Year(Date) - x
End Function

そして去っていく〜〜〜
>>14の別の方法。。

Sub A_001()
Dim x As Integer
x = InputBox(Prompt:="貴方の数え年を入力してください。")
MsgBox "あなたの生まれた年は" & 生まれた年(x) & "年ですね?"
End Sub

Function 生まれた年(x As Integer)
生まれた年 = Year(Date) - x
End Function
おはようございます、いちろです

宇宙えびさん、問題が1つ解決されたようでおめでとうございます(^^)

第2弾の質問ですが、これはLifeHackerさんや魔流さんの説明の通りです

Functionプロシージャは内部で処理した結果を、戻り値として呼び出し先に返す事が出来ます
また、Excelのシート上でもユーザー定義関数として利用できます




LifeHackerさん、魔流さん、いちろさんが充分に説明されているので何も無いのですが・・・ユーザー定義関数 生まれた年() の戻り値にもデータ型を宣言するとなおいいかもしれませんね。

整数型 (Integer) … 範囲 -32,768 〜 32,767

Function 生まれた年(X As Integer) As Integer
  生まれた年 = Year(Date) - X
End Function

>>17
あー忘れてましたwww

書き足したつもりだったんですがね〜〜ぇwww

あざーす。
>Goldenさん、いちろさん、 LifeHackerさん、 魔流さん、
ありがとうございます。一応すべて実験いたしましたら同じ動作をしました。
説明いただいたことに対しては解ったような、わからないような、
内容がちょっと難しくなるともうお手上げです。

他にもVBA関係のコミュがありますが、あちらの方は
コード収集に留め、こちらの方で教えていただくことにしました。
レベルの高度な人に教えていただいても専門用語が多くて
理解し難いので

また、疑問が起こったら訪問しますので、
よろしくお願いします。

ログインすると、みんなのコメントがもっと見れるよ

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

初心者のためのExcel VBA 更新情報

初心者のためのExcel VBAのメンバーはこんなコミュニティにも参加しています

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

人気コミュニティランキング