• ベストアンサー

エクセルのマクロ 最終行取得後の作業

エクセルのマクロで(エクセル2010を使用) Range("A1:A900").Select Range("A" & Rows.Count).End(xlUp).Select i = Selection.Row 上記の900がセルの最終行で最終行数を取得し、iを利用して  Range("A1:A & i ").Select といった感じで使用したいのですが記述がわかりません。 申し訳ございませんが()内の書き方を教えてください。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.6

#4 です。 質問は、単なる最終行を取得だけらしい。 今気づいたが、最終行を求める方法よりも、もっと基礎的なことは Range("A1:A & i ").Select この i  は変数として使うもので、” ”の中にi 含めてはだめです。””は文字列を定義する(リテラル用法)なのでプログラム実行中は変わらない。基礎的なこと。 Range("A1:A " & i ).Select という使い方になる。これもRangeの()内は、文字列を指定するのだが、エクセルVBAでは、i は数値なのに1という文字列に直してA1:A200 という文字列にして(解釈して、扱って)くれる。 ーー #4に加えて、最終行は (4)「セル選択」(CTRL+G)の「最後のセル」の行を求める、でも取得できる。 Sub Macro1() Selection.SpecialCells(xlCellTypeLastCell).Select MsgBox Selection.Row End Sub でもできる。 ほかに (5)「A列で空白セル行が現れるまで繰り返す」、という方法でもできる。 最終行は、とりあえず求めずに(行の繰り返し)処理を始める方法。

k-koz
質問者

お礼

ありがとうございます。基礎的("の使い方)なことが解らず質問致しました。

その他の回答 (5)

回答No.5

タイプミスかもしれないけど、End(xlUp)だと、Rangeの上端の行になりますよ。 End(xlDown)ですね。でも、最終行の前が非表示になっていると、End(xlDown)では最終行が取得できない(End(xlDown)は、非表示になっていない行の最終行が取れる)から、私なら最終行を取る場合通常は Cells.SpecialCells(xlLastCell).Row を使います。 >上記の900がセルの最終行で最終行数を取得し、iを利用して  私は基本的に、ActiveSheet,Select,Selectionは使わないから実際のコーディングは違うけど 最終行が900と固定されていて、A列の1~900行を選択するなら Range("A1:A900").Select 変数 i に最終行が入っていて、A列の1~i行を選択するなら Range("A1:A" & CStr(i)).Select 1~i行全体を選択するなら Range(cells(1, 1), cells(i, 1)).EntireRow.Select

k-koz
質問者

お礼

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

k-koz
質問者

補足

ご連絡ありがとうございます。Range("A1:A900").Select は質問には不用でした。 Range("A1:A & i ").Select の " に位置がよくわからず質問いたしました。やろうとしていたことは最終行を取得して表内に文字を入力したり最終行下に集計を挿入しようとしていました。自力でいいところまでたどり着いたのですが最終行を認識して範囲指定する部分がわからなかった為質問致しました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

Range("A1:A900").Select は不要ではないか? データのある最終行は、ENDキーに当たる操作のコードを使って取得するが (1)データの行の途中から下方向に↓キーを押す方法と Sub test03() MsgBox Range("A2").End(xlDown).Row End Sub (2)最終行から上に向かってENDキーと↑キーを押す方法とある。 両方ともマクロの記録をとれば、コードが出てくるだろう。 データが行的!に1塊ならば両者同じだが、中間に空白行があり2ブロック以上に 分れていると、第2以下のブロックが漏れてしまう。これに注意する。 (2)の場合下の方のセル行の指定として   (A)適当に自分の業務でありえない行数から上方向に、上げげる   (B)エクセル使用の最大行数の Sub test02() MsgBox Rows.Count End Sub を使う(100以上の数) があるが、どちらが早いとか小生には、判らない。 (3)データが1塊の場合は Sub test01() Range("A2").CurrentRegion.Rows.Select MsgBox Selection.Rows.Count End Sub のような捉え方もできる。 ーー こういうのはVBAの初歩の初歩なのだが、本当は次に何がしたいのか、もう少し後までやりたいことを)文章で説明して、教えてもらうほうが、良いのではと推測する。 この程度のことは質問しないと思うので、あるいは質問の仕方が適当でないのではと心配。

k-koz
質問者

お礼

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

k-koz
質問者

補足

ご連絡ありがとうございます。Range("A1:A900").Select は質問には不用でした。Range("A1:A & i ").Select の " に位置がよくわからず質問いたしました。やろうとしていたことは最終行を取得して表内に文字を入力したり最終行下に集計を挿入しようとしていました。自力でいいところまでたどり着いたのですが最終行を認識して範囲指定する部分がわからなかった為質問致しました。

  • kkkkkm
  • ベストアンサー率66% (1734/2604)
回答No.3

Cells(RowIndex,ColumnIndex) を覚えておくと列側も変数が使えるようになりますよ。 今回は i = Cells(Rows.Count, 1).End(xlUp).Row Range(Cells(1, 1), Cells(i, 1)).Select もしくは1はA列なので Range(Cells(1, "A"), Cells(i, "A")).Select 一行にまとめてしまって Range(Cells(1, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1)).Select

k-koz
質問者

お礼

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

k-koz
質問者

補足

ご連絡ありがとうございます。Range("A1:A900").Select は質問には不用でした。Range("A1:A & i ").Select の " に位置がよくわからず質問いたしました。やろうとしていたことは最終行を取得して表内に文字を入力したり最終行下に集計を挿入しようとしていました。自力でいいところまでたどり着いたのですが最終行を認識して範囲指定する部分がわからなかった為質問致しました。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.2

こんにちは i = Range("A" & Rows.Count).End(xlUp).Row Range("A1:A" & i ).Select とか、 Range("A1", Range("A" & Rows.Count).End(xlUp)).Select ですか?

k-koz
質問者

お礼

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

k-koz
質問者

補足

ご連絡ありがとうございます。Range("A1:A900").Select は質問には不用でした。Range("A1:A & i ").Select の " に位置がよくわからず質問いたしました。やろうとしていたことは最終行を取得して表内に文字を入力したり最終行下に集計を挿入しようとしていました。自力でいいところまでたどり着いたのですが最終行を認識して範囲指定する部分がわからなかった為質問致しました。

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.1

修正を最低限にするなら…… 誤:Range("A1:A & i ").Select ↓ 正:Range("A1:A" & i ).Select 最初にA1:A900をSelectする理由が良くわかりませんが、全部直すならこんな感じで i = Range("A" & Rows.Count).End(xlUp).Row Range("A1:A" & i).Select

k-koz
質問者

お礼

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

k-koz
質問者

補足

ご連絡ありがとうございます。Range("A1:A900").Select は質問には不用でした。Range("A1:A & i ").Select の " に位置がよくわからず質問いたしました。やろうとしていたことは最終行を取得して表内に文字を入力したり最終行下に集計を挿入しようとしていました。自力でいいところまでたどり着いたのですが最終行を認識して範囲指定する部分がわからなかった為質問致しました。

関連するQ&A

専門家に質問してみよう