セルの個数と行の個数を取得する方法はあるのか?

このQ&Aのポイント
  • Excel VBAのプログラムで、セルの個数や行の個数を取得する方法はあるのか疑問に思っています。
  • 特定の範囲に値が入っている場合、ActiveCellやUsedRangeを使用しても正確な結果が返ってこないことがあります。
  • オブジェクトに格納された値から、正確なセルの個数や行の個数を取得する方法があれば、教えてください。
回答を見る
  • ベストアンサー

列の個数、行の個数を取得することは不可能ですか?

http://okwave.jp/qa/q7981824.html の続きなのですが A1からD5まで値が入っているのに Sub Sampsle() Dim r As Range Set r = ActiveSheet.UsedRange End Sub で値を格納した場合、 列は全部で4つ 行は全部で5つなのですが ウォッチウインドウで確認すると Column : 1 : Long : Module1.Sampsle Row : 1 : Long : Module1.Sampsle になってしまうのですが、 オブジェクトに格納した値から 列の個数、行の個数を取得することは不可能ですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

r.rows.count r.columns.count で取得します。

kcdlcjlja8
質問者

お礼

ありがとうございました。

関連するQ&A

  • 文字が入力されているセルの位置取得について

    セルに文字が入力されている 最左列・最右列・最上行・最下行 を求める場合、 最左列=ActiveSheet.UsedRange.Column 最右列=ActiveCell.SpecialCells(xlLastCell).Column 最上行=ActiveSheet.UsedRange.Row 最下行=ActiveCell.SpecialCells(xlLastCell).Row でよろしいですか? 教えて下さい。

  • 条件によって行削除を繰り返し処理する

    一行目がフィールド名で、Z列まで値の入っているデータがあります。 x列が""の場合はその行を削除する処理を最終行まで続けたいのですが、 ""行が2行以上続いているとFor~によって行を飛ばしてしまいます。 何か良い方法はありませんでしょうか? Sub 削除() Dim last As Long Dim row As Long last = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).row For row = 2 To last If Cells(row, 24).Value <> "" Then Rows(Format(row) + ":" + Format(row)).EntireRow.Deletesift:=xlUp End If Next End Sub

  • 1列目の何行目に検索文字があるかを取得したい

    しかしエラーになってしまいます。 エラーの原因がわかりません。 シートの1列目のどこかに「test」と入っている行があるのですが Sub test1() Dim myRow As Long With Sheets("Sheet") myRow = .Column(1).Find(What:="test").Row MsgBox .Cells(myRow, 1) End With End Sub このvbaコードを実行するとエラーになります。 コードとしては「.Column(1)」で1列目と言う意味で、 .Find(What:="test")で、何行目に「test」があるかを取得するという意味だと思うのですが 実行時エラー438が発生します。 実際にtestと言う文字は2行目にあるのですが なぜmyRowに2が代入されないのでしょうか?

  • Rangeオブジェクトに格納できない

    A1からD5までデータが入っているのですが、 そのデータの情報をRangeオブジェクトに格納する事は出来ないのでしょうか? vbaで Sub Sampsle() Dim r As Range r = ActiveSheet.UsedRange End Sub をやろうとしてるのですが、 実行時エラー_91「オブジェクト変数またはWithブロック変数が設定されていません」になります。 r に格納しちゃえば、最終列が何列目か最終行が何行目か、A1の値は何か、などしゅとくできるんじゃないかなー と思ったのですが、できないのでしょうか?

  • 列の削除を早くしたい

    列の削除を自動化する次のマクロをおしえていただきました。 ずっと使っていましたが、異常に処理が遅いのです。 列の数は2370列以上あり、変動します。 行数は1から33行までで、固定しています。 この行数の固定を加味して、もっと早く処理したいのですが、どうしたらよろしいでしょうか。 Sub 空白列の削除() Dim UsedCell As Range Dim Max_column, columnCount As Integer '使用しているセルの範囲を取得します Set UsedCell = ActiveSheet.UsedRange '最大の行番号を取得します Max_column = UsedCell.Cells(UsedCell.Count).Column For columnCount = Max_column To 1 Step -1 'Worksheet関数のCountAを使ってデータの個数をカウント If Application.WorksheetFunction.CountA(Columns(columnCount)) = 0 Then '行の削除 Columns(columnCount).Delete End If Next End Sub

  • エクセルVBAでデータ最終行取得方法

    エクセルVBAでデータ最終行取得方法で良い方法を教えてください。 データの行数、列数は不定。 最多のデータ行の列も不定。 この条件で、データ最終行を取得するにはどうすればよいでしょうか? lastrow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row では、A列の最終行に限定されます。 lastrow = ActiveSheet.Cells(1, "A").SpecialCells(xlLastCell).Row では、列の限定はありませんが、一旦データ入力後、削除した部分まで入ってしまいます。 lastrow = ActiveSheet.UsedRange.Rows.Count では、データ入力後、削除した部分まで入ってしまい、かつ、1行目など上部が空白の場合、不正確になります。

  • VBAで列を探して最終行までハイパーリンクを付けた

    A列に URL http://oshiete.goo.ne.jp/ http://oshiete.goo.ne.jp/ http://oshiete.goo.ne.jp/ http://oshiete.goo.ne.jp/ http://oshiete.goo.ne.jp/ http://oshiete.goo.ne.jp/ http://oshiete.goo.ne.jp/ http://oshiete.goo.ne.jp/ http://oshiete.goo.ne.jp/ が入ってる場合は、 Sub Sample1() Dim R As Range For Each R In Range("a2:a" & Cells(Rows.Count, "a").End(xlUp).Row) ActiveSheet.Hyperlinks.Add Anchor:=R, Address:=R.Value Next End Sub でハイパーリンクを付けられますが、 URL列がA列じゃない場合の応用の聞かせ方がわかりません。 場合によっては、画像のようにB列であったりC列であったりします。 なので Dim C As Long C = Cells.Find(What:="URL", LookAt:=xlWhole).Column で列番号を取得して、ループさせようと思ったのですが、 For Each R In Range("a2:a" & Cells(Rows.Count, "a").End(xlUp).Row) の部分でどうすればいいのかわかりません。 range表記ではなくcells表記にすればいいような気がしますがどうやって改造すればいいでしょうか? あと、この場合はForEachではなくDoloopやForNextを使った方が良いのでしょうか?

  • 二つの行のうち、どちらかが、セルの値がゼロのとき、その列を非表示にする

    二つの行のうち、どちらかが、セルの値がゼロのとき、その列を非表示にする windows7 excelでマクロ作成中の初心者です。 以下のコードで27行目のセルの値が0のとき列を非表示にします。 Private Sub 列非表示_Click() Dim 列番号 As Long 'シートが保護されていたら保護を解除 Worksheets("最新明細").Activate If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect End If For 列番号 = 4 To 33 If Cells(27, 列番号).Value = 0 Then Cells(27, 列番号).EntireColumn.Hidden = True End If Next 列番号 ActiveSheet.Protect End Sub ------------------------------------------------- Private Sub 列表示_Click() Dim 列番号 As Long 'シートが保護されていたら保護を解除 Worksheets("最新明細").Activate If ActiveSheet.ProtectContents = True Then ActiveSheet.Unprotect End If For 列番号 = 4 To 33 If Cells(27, 列番号).Value = 0 Then Cells(27, 列番号).EntireColumn.Hidden = False End If Next 列番号 ActiveSheet.Protect End Sub この27行と、もう一行の28行、どちらかの行が、0のときに列を非表示・表示したいのですが、出来ません。 試行錯誤してもできないのです。どうかよろしくおねがいします。 For 列番号 = 4 To 33 If Cells(27, 列番号).Value = 0 or Cells(28, 列番号).Value = 0 Then or( Cells(27, 列番号).EntireColumn.Hidden = True, Cells(27, 列番号).EntireColumn.Hidden = True) End If

  • VBScript エクセル 最終行と最終列取得

    今、たくさんのシートがある、エクセルのファイルがあり、「C6」以降が縦の項目行、「D5」以降が横の項目列です。 項目行と項目列には、間に空白のセルは存在しません。 この状態で、項目行、項目列の最終の場所を取得しなければなりません。 そこで、「r = Range("C6").End(-4121).Row」(「-4121」は「xlDown」)、「c = Range("D5").End(-4161).Column」(「-4161」は「xlToRight」)で次々に求めていったのですが、「C6」に縦の項目が1つだけ、「D5」に横の項目が1つだけ、というシートがありました。 すると、そのシートでは、「r」と「c」の値は、エクセルそのものの最大の行数と最大の列数が返ってきてしまいました。 そこで、「D6」にのみ、文字があるサンプルファイルを作り、そのサンプルファイルに対して、「r = Range("D5").End(-4121).Row」と「c = Range("C6").End(-4161).Column)」で求めると、ちゃんと、「r = 6」、「c = 4」という値が返ってきたので、「r」の場合は、1つ上から、「c」については、1つ左から「Range」を設定すればいい、と思って、実際のデータで試すと、他のシートでは、全然うまくゆきません。 結果的に、問題は、「If」文で、ムリヤリ解決させたのですが、「If」文の場合ですと、前もって全シートを確認して、調べておかなければなりません。 何とか、汎用的に項目が1つしかない場合も、その項目のある「行」と「列」が最終行、最終列として取得できる方法はないでしょうか? ただし、項目が「0個」ということはありませんので、そこまで考えて頂く必要はありません。 「VBA」でも結構ですので、よろしくお願いいたします。

  • A列の最終行までハイパーリンクを付けたい

    A列の最終行までハイパーリンクを付けたいのですがコードがわかりません。 Sub test() Dim i As Long For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row 'ハイパーリンクにするコード Next i End Sub まではわかりました。 表示文字列もURLもセルに入ってる値にしたいです。 ご教授よろしくお願いします。

専門家に質問してみよう