解決済みの質問
マクロはまったくの初心者なのですが、シートに入力されている最初のセルを取得(行と列の番号)したいと思って下記の通りやってみたのですがうまくいきません。
Gyou = 1
Retu = 1
Chek1:
Maxcol = Cells(Gyou,Retu).End(xlToRight).Column
If MaxCol <> 0 then
GoTo Chek2
End If
If Gyou < 65536 then
Gyou = Gyou + 1
GoTo Chek1
End If
Chek2:
MsgBox Maxcol
としたのですが、入力されているセルはB3、C5だけです。
結果、MsgBox に表示されたのは256でした。
一番最初に入力されているセルはB3なのでMsgBoXには2と表示されると思ったのですがだめでした。
どこがおかしいのか自分では全然わかりません。あと、一番最初に入力されているセルの行番号も取得したいのですが、どなたかお教え下さい。よろしくお願いします。
投稿日時 - 2009-09-09 11:09:30
割り込みさせていただきます。
>実行すると $A$1:$B$5 と答えは出ましたが
>処理の都合上、SCell = $A$1、ECell = $B$5 と
>分解したいのですがわかりません。
パターンとしては、通常こういう書き方をするはずです。
つまり、Address プロパティは取っていても、Range オブジェクトは取得しています。
'-------------------------------------------
Sub TestRange1()
Dim first As String
Dim last As String
With Worksheets("Sheet1").UsedRange
first = .Cells(1).Address
last = .Cells(.Cells.Count).Address
End With
MsgBox "最初: " & first & " 最後: " & last
End Sub
投稿日時 - 2009-09-10 13:35:53
お礼
早速のご返事、ありがとうございました。
投稿日時 - 2009-09-10 14:50:03
1人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(10件中 1~5件目)
>処理の都合上、SCell = $A$1、ECell = $B$5 と分解したいのですがわかりません。
Split()で文字列を分割する事も可能です。
-------------------------------------------------
Dim Hani
Dim ADR
Hani = Worksheets("Sheet1").UsedRange.Address
ADR = Split(Hani, ":")
MsgBox ADR(0)
MsgBox ADR(1)
--------------------------------------------
下記のようにする事も出来ます。
MsgBox ActiveSheet.UsedRange.Cells(0).Address
MsgBox ActiveSheet.UsedRange.Cells(ActiveSheet.UsedRange.Count).Address
----------------------------------------------
投稿日時 - 2009-09-10 13:05:22
お礼
早速のご返事、有難うございます。
投稿日時 - 2009-09-10 14:50:48
#3の回答者です。
For ~ Next を抜け出すのは、#6さんのお書きになったとおりです。
ほかにも、Do ~ Whileの Exit Do もあります。
Goto を使うと可読性が落ちるという人もいますが、それは違います。そうでなく、コードのまとまりが悪いように思います。
>マクロに関しての参考書等はまったく持っていない
ある程度の書籍は手に入れることをお勧めします。ネットで分かるとはお約束できません。Basicを知っているから、後は、ネットで覚えられるとお思いなのかもしれませんが、必ずしも同じではありません。ネットでは体系的に見れず、ピンポイントですから、いくらやっても蓄積してこないのです。初級文法から、中級・上級と進んで、やっと入門編が終わります。早い人で、2~3ヶ月、遅い人ですと、1年以上掛かります。英会話と同じで、最初はフレーズの単語を入れ替えるように、セルの位置などを換えて、プロシージャにします。
物事は、体系的に骨子を覚え、細かいところは後回しです。
『かんたんプログラミング Excel 2007 VBA 基礎編』技術評論社 大村 あつし (著)
http://www.amazon.co.jp/exec/obidos/ASIN/477413340X
このシリーズは、良い悪いは別として、これぐらいしか体系的に覚えられるものがありません。
VBAエキスパート公式サイト
推薦書籍
http://vbae.odyssey-com.co.jp/training/text.html
投稿日時 - 2009-09-09 23:12:06
お礼
早速のご返事、ありがとうございました。
投稿日時 - 2009-09-10 14:51:27
>マクロに関して参考になるものがインターネットにあれば
VBAのヘルプファイルも参考しましょう。
そしてexcelの関数の使い方や機能等の用語をしっかりと覚える事。
マクロの基本的なオブジェクトやプロパティも覚えておきましょう。
あとはネット検索の達人になることです。
「VBA 範囲取得」「VBA 最後のセル」「VBA For文」「VBA IF文」など、思いつくキーワードを使って検索をする事です。
検索したページの中から、やりたい事に一番近い事が現れたら、そのページの単語をキーに再検索とか・・・。
何度か検索すれば、VBA解説の主要なページがいくつかあることに気づくかと思うので、ブックマークして参考にして下さいね。
エクセルでお仕事
http://www.asahi-net.or.jp/~ef2o-inue/top01.html
投稿日時 - 2009-09-09 18:46:20
補足
いろいろアドバイスありがとうございます。
あつかましいのですが、もうひとつ問題がでてきました。
セルA1、A5、B2に入力された状態で
Hani = Worksheets("Sheet1").UsedRange.Address
を実行すると $A$1:$B$5 と答えは出ましたが
処理の都合上、SCell = $A$1、ECell = $B$5 と
分解したいのですがわかりません。教えて頂くことはできますか?
よろしくお願いします。
投稿日時 - 2009-09-10 10:33:09