Excelを使用していますが、マクロ(VBA)で、シートのデータの範囲を知るにはどうすればよいのでしょうか。
 印刷プレビューを行うと、自動的にページ数が求めらていますが、これは、シートのデータの範囲(列及び行の最大値)を判別しているからできるのだと思います。
 これを、VBAで行、及び列のMAX値を取得したいのですが、そのメソッド(プロパティ)を知りたいのです。
 どなたかご教授ください。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

説明不足だったかもしれませんので追記しておきます。


以下のようにして範囲を求めたりしています。まだ簡単な方法があるかもしれません。
参考にして下さい。

標準モジュールに貼り付けます。

Public Sub UsedAreaAddress()
  Dim myUsedAddress As String '使用範囲
  Dim myUsedRows As Long '使用行数
  Dim myUsedColumns As Integer '使用列数
  Dim myUsedStartCell As String '最初のセル
  Dim myUsedEndCell As String '最後のセル
  Dim myPrintArea As String '例えば印刷範囲(最初の行を除く)
  Dim myMsg As String 'メッセージボックスへの出力

  With ActiveSheet
    '使用範囲
    myUsedAddress = .UsedRange.Address
    '使用行数
    myUsedRows = .UsedRange.Rows.Count
    '使用列数
    myUsedColumns = .UsedRange.Columns.Count
    '最後のセル
    myUsedEndCell = .Cells.SpecialCells(xlCellTypeLastCell).Address
    '最初のセル
    myUsedStartCell = Range(myUsedEndCell).Offset(1 - myUsedRows, 1 - myUsedColumns).Address

    '例えば、最初を表題として表題を除いた印刷範囲(行タイトル等は別途指定)
    myPrintArea = Range(myUsedStartCell).Offset(1, 0).Address & ":" & myUsedEndCell
  End With

  myMsg = "データが入力されている矩形範囲 " & myUsedAddress & vbLf & vbLf
  myMsg = myMsg & "最初のセル " & myUsedStartCell & vbLf
  myMsg = myMsg & "最後のセル " & myUsedEndCell & vbLf & vbLf
  myMsg = myMsg & "行数 " & myUsedRows & vbLf
  myMsg = myMsg & "列数 " & myUsedColumns & vbLf & vbLf
  myMsg = myMsg & "印刷範囲例 " & myPrintArea

  MsgBox myMsg

End Sub
    • good
    • 0
この回答へのお礼

早速に回答いただきありがとうございました。
例題を参考にさせていただき、データの範囲を知ることができました。
また、何かありましたらよろしくお願いいたします。

お礼日時:2001/08/06 18:25

UsedRange や SpecialCells で求められると思います。



印刷範囲だと、どう指定するか分かりませんし、求めた範囲を細工する必要があるかもしれません。

詳しくはHelpをご覧下さい。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QA列の最大値が入っている横に○を入れる及び最大値の行数をマクロで所得

何方か、教えてください。
A列に下記の様な数値データが有りますが、

A列
1.24e-12
8.48e-12
4.41e-9
0.254     ○
......
.....
質問(1)
A列の最大値が入っている横(B列)に○を入れる関数
(他のB列は空白がいいです。)

質問(2)
マクロでA列の最大値の行数を所得する方法

では、宜しくお願いします。

Aベストアンサー

#4の補足について
>mに数値が編入されますが、Cellsはセルの位置と本には書いています。どうしてmに数値が入るのでしょうか?
私の悪い癖で、Valueを全て省いています。省くとValueと看做してくれる仕組みがあるからです。
m=Cells(i,"A").Value というプロパティを付け加えて考えてください。ほかにセルには書式やコメントや色々のものがある中で、「値」は表計算ソフトの歴史的にも(昔は文字にも色は付かなかった)、表計算は値から始まり、一番大事なデータです。
ついでに別件ですが、他のご回答の中に
>#4 のご回答のように総当りで見つける
と「総当り」という表現がありますが、そもそも最大値は全部の値を読まないと決まらないものです。関数などは、裏では比較や繰り返しをやっているはずだが、表には出していません。そういう繰り返しや比較などを隠した利器(関数やメッソッドなど)を使って進むのが、進歩なんですが、時には原始的な方法でやってみたいときが有ります。

QExcel関数  A列の値とC列の値の間であればD列の値が抽出される関数

いつもお世話になっております。
F1にある数値を入れ、その数値が一覧表の中の範囲にマッチすればその数値を集計表シートのセルG1に反映したいのです。
例えば
A B C D E F G
1    1 ~ 1000  70 1200 ?
2  1001 ~ 1500  85
3  1501 ~ 2000  92
というような表があるとします。
F1に「1200」と入力するとG1には「85」と出るようにするにはG1にどのような関数を入れたらいいでしょうか。
必要があれば左の数値と~、右の数値は便宜上3列に分けて入力しています。
宜しくお願い致します。

Aベストアンサー

VLOOKUP関数でできます。

求める数値がD列にあるとします。
F1の値を $A$1:$D$3の範囲の左端の列から検索して、D列(検索範囲の4列目)の値を求めます。
セルG1に
=VLOOKUP(F1,$A$1:$D$3,4,TRUE)

一覧表を分かりやすくするために3列に分けているのだと思いますが、
値を求めるだけなら、B列、C列の「~1000」などは不要です。
B列、C列を削除して、「70,85,92・・・」をB列にしておけば
=VLOOKUP(F1,$A$1:$B$3,2,TRUE)
で求められます。

VLOOKUP関数をヘルプで参照していただくとわかると思いますが、
>TRUE を指定するか省略すると、検索値 が見つからない場合に、検索値 未満で最も大きい値が使用されます。
検索値が1200の場合、1200はA列にありませんが、1200未満でもっとも大きい値「1001」に対応する「85」が得られます。

Qエクセルの関数です。一列目で指定した値の間で、二列目で指定した値を示す、一列目の最初の値を求める。

エクセルの関数です。
一列目で指定した値の間で、二列目で指定した値を示す、一列目の最初の値を求める関数を教えてください。
添付した図で、具体的に説明します。
A列に値(時間)、B列に値があります。
この配列の中から、
F4の値(時間)と同じ値(時間)を示すA列の行から、F5の値(時間)と同じ値(時間)を示すA列の行までの中で、
F3の値と同じ値がB列にある、A列の値(時間)の内、
A列で上から最初の値(時間)
です。

min、offset、index、match を組み合わせてみるのですが、うまくいきません。
どうぞよろしくお願いします。

Aベストアンサー

こんにちは!

画像の配置でF6セルに「7」という結果が返れば良い訳ですかね?

少し長くなりますが、
=INDEX(INDIRECT("A"&MATCH(F4,A:A,0)&":A"&MATCH(F5,A:A,0)),MATCH(F3,INDIRECT("B"&MATCH(F4,A:A,0)&":B"&MATCH(F5,A:A,0)),0))
という数式を入れてみてください。

※ F3セルは質問に載っていないので余計なお世話かもしれませんが
同じようなやり方で
=MAX(INDIRECT("B"&MATCH(F1,A:A,0)&":B"&MATCH(F2,A:A,0)))
という数式になると思います。

※ エラー処理はしていません。m(_ _)m

QFind系メソッド、Findメソッドに相当するワークシート関数または、VBA関数は?

Excelのワークシート関数または、VBA関数で、DAOのFind系メソッドやADOのFindメソッドに相当する機能はありますか?
(Forループで回せば似たようなことはできるのですが、非効率なので・・・)

# 表計算とRDBは別物ってツッコミはなしということで。(^^;

Aベストアンサー

こんにちは。maruru01です。

Rangeオブジェクトに対するFindメソッドがあります。
また、同条件の繰り返し用に、FindNext、FindPreviousメソッドもあります。
詳細はヘルプで。

QエクセルVBA セルの値で、複数の列範囲を同時に

セルの値を利用して複数の列範囲を選択したいです
セルA1に 3 と入力されていて、AA列がアクティブの場合

Range("AD:AF,AJ:AL").Select

の様に、アクティブ列から3列空けて、3列選択、3列空けて、3列選択の様にしたいです

AA、アクティブ
AB
AC
AD、選択
AE、選択
AF、選択
AG
AH
AI
AJ、選択
AK、選択
AL、選択
AM

Aベストアンサー

丁寧に拾っていくだけです

sub macro1()
 dim i as long
 i = range("A1").value

 union( _
  activecell.offset(0, i).resize(1, i).entirecolumn, _
  activecell.offset(0, i * 3).resize(1, i).entirecolumn _
 ).select

end sub


このカテゴリの人気Q&Aランキング

おすすめ情報