
マクロはまったくの初心者なのですが、シートに入力されている最初のセルを取得(行と列の番号)したいと思って下記の通りやってみたのですがうまくいきません。
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と表示されると思ったのですがだめでした。
どこがおかしいのか自分では全然わかりません。あと、一番最初に入力されているセルの行番号も取得したいのですが、どなたかお教え下さい。よろしくお願いします。
No.10ベストアンサー
- 回答日時:
割り込みさせていただきます。
>実行すると $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
No.9
- 回答日時:
>処理の都合上、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
----------------------------------------------
No.8
- 回答日時:
#3の回答者です。
For ~ Next を抜け出すのは、#6さんのお書きになったとおりです。
ほかにも、Do ~ Whileの Exit Do もあります。
Goto を使うと可読性が落ちるという人もいますが、それは違います。そうでなく、コードのまとまりが悪いように思います。
>マクロに関しての参考書等はまったく持っていない
ある程度の書籍は手に入れることをお勧めします。ネットで分かるとはお約束できません。Basicを知っているから、後は、ネットで覚えられるとお思いなのかもしれませんが、必ずしも同じではありません。ネットでは体系的に見れず、ピンポイントですから、いくらやっても蓄積してこないのです。初級文法から、中級・上級と進んで、やっと入門編が終わります。早い人で、2~3ヶ月、遅い人ですと、1年以上掛かります。英会話と同じで、最初はフレーズの単語を入れ替えるように、セルの位置などを換えて、プロシージャにします。
物事は、体系的に骨子を覚え、細かいところは後回しです。
『かんたんプログラミング Excel 2007 VBA 基礎編』技術評論社 大村 あつし (著)
http://www.amazon.co.jp/exec/obidos/ASIN/4774133 …
このシリーズは、良い悪いは別として、これぐらいしか体系的に覚えられるものがありません。
VBAエキスパート公式サイト
推薦書籍
http://vbae.odyssey-com.co.jp/training/text.html
No.7
- 回答日時:
>マクロに関して参考になるものがインターネットにあれば
VBAのヘルプファイルも参考しましょう。
そしてexcelの関数の使い方や機能等の用語をしっかりと覚える事。
マクロの基本的なオブジェクトやプロパティも覚えておきましょう。
あとはネット検索の達人になることです。
「VBA 範囲取得」「VBA 最後のセル」「VBA For文」「VBA IF文」など、思いつくキーワードを使って検索をする事です。
検索したページの中から、やりたい事に一番近い事が現れたら、そのページの単語をキーに再検索とか・・・。
何度か検索すれば、VBA解説の主要なページがいくつかあることに気づくかと思うので、ブックマークして参考にして下さいね。
エクセルでお仕事
http://www.asahi-net.or.jp/~ef2o-inue/top01.html
この回答への補足
いろいろアドバイスありがとうございます。
あつかましいのですが、もうひとつ問題がでてきました。
セルA1、A5、B2に入力された状態で
Hani = Worksheets("Sheet1").UsedRange.Address
を実行すると $A$1:$B$5 と答えは出ましたが
処理の都合上、SCell = $A$1、ECell = $B$5 と
分解したいのですがわかりません。教えて頂くことはできますか?
よろしくお願いします。
No.5
- 回答日時:
No.4です
Find メソッドで最初のセルを検索しましたが
検索方向は前回使われたプロパティが使われるようですので
検索方向を行方向と設定しました。
Gyou = .Find("*", SearchOrder:=xlByRows).Row
Retu = .Find("*", SearchOrder:=xlByRows).Column
ちなみに列方向で検索するには
SearchOrder:=xlByColumns です
No.4
- 回答日時:
Find メソッドを使って最初のセルを検索しました。
Sub 最初のセル()
Dim Gyou As Long
Dim Retu As Long
Gyou = 1
Retu = 1
With ActiveSheet.Cells
If IsEmpty(.Cells(1)) Then
Gyou = .Find("*").Row
Retu = .Find("*").Column
End If
End With
MsgBox "行:" & Gyou & vbCrLf & "列:" & Retu
End Sub
シートにデータが1つも無い場合のエラー対策はしていません。
No.3
- 回答日時:
こんにちは。
初心者では書かないコードですね。
VBAのテキストでは Goto を入れたコードは出てきません。
これは改めないと、比較的早い段階で、現代では行き詰まってしまいます。
'-------------------------------------------
Sub TestMacro1()
Dim i As Long
Dim j As Long
Dim LastRow As Long
Dim msg As String
With ActiveSheet
With .UsedRange
'最後の行を決める
LastRow = .Cells(.Rows.Count, .Columns.Count).Row
End With
For i = 1 To LastRow
j = .Cells(i, 1).End(xlToRight).Column
If j <> Columns.Count Then
MsgBox j
'おまけ(アドレスを取る)
msg = msg & ", " & .Cells(i, j).Address(0, 0)
End If
Next i
End With
If Len(msg) > 1 Then
MsgBox Mid(msg, 2)
End If
End Sub
早速、指示通りのコードで実行するとうまくできました。
あと、Goto コードを使わずに条件から抜けたい時、また、
For Next 分の途中で条件を満たしたので For Next から
抜けたい時の方法がわからないので Goto を使っていますが、
なにかよい方法があればお教えくださるようにお願いいたします。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excelで、図形内の文字をセルに...
-
Excel内での検索結果をシート...
-
エクセル 数字をすべて○などの...
-
エクセル 未入力セルがあると...
-
クリックすると文章が表示され...
-
Excelでセルをクリックす...
-
シート保護とグループ化機能を...
-
EXCELのセルや文字色の反映
-
Excel ハイパーリンクのURLを別...
-
アポストロフィーの一括挿入 ...
-
現在のセルの位置を返す関数は...
-
マクロを実行すると画像がズレ...
-
Excelの関数で時刻を固定する方法
-
エクセルでPDFリンクを大量...
-
excelのソルバーをVBAで複数行...
-
Excelで挿入した図をセルの中央...
-
エクセルのマクロが途中の行か...
-
太字に設定されているセルの個...
-
EXCEL プルダウンから指定セル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで特定のセルに表示...
-
Excel内での検索結果をシート...
-
エクセル 数字をすべて○などの...
-
Excelで、図形内の文字をセルに...
-
クリックすると文章が表示され...
-
Excel2007 色のカウント (VBA)
-
Excel ハイパーリンクのURLを別...
-
太字に設定されているセルの個...
-
Excelでセルをクリックす...
-
セルの内容をテキストボックス...
-
セルがクリックされた回数をカ...
-
エクセルでPDFリンクを大量...
-
フォントの色を指定して削除出...
-
現在のセルの位置を返す関数は...
-
エクセルでセルをダブルクリッ...
-
未記入がある場合はマクロを実...
-
Excel:セルの値(文字列)を数...
-
マクロを実行すると画像がズレ...
-
アポストロフィーの一括挿入 ...
-
シート保護とグループ化機能を...
おすすめ情報