• ベストアンサー

セル位置について

最近行の位置についてっていうので質問が載ってましたが、 気になったので、私も質問をしたいことがあります。 検索するとよく見るソースですが、 Range("A65536").End(xlUp).Offset(1, 0).Activate 上記をやることにより、データが入っていない行をアクティブにしますが、行挿入などでデータが増えていく中で、 上記をつかって、ある分岐の値を見て、そのセルをアクティブにする 簡単な方法はないでしょうか。 (例) 001 atai1 2 002 atai2 1 003 atai3 1 . . , 上記のようにどんどんデータが増えていく中でC列の値を見て 1だった場合はスキップして1以外の値がみつかったら そのセルをアクティブにするっていう処理をやりたいのですが..

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

選択するのはC列のセルなんですね? では Sub test01() Cells(Rows.Count, "C").End(xlUp).Select Do While Selection.Value = 1 Selection.Offset(-1, 0).Select Loop End Sub > Range("A65536").End(xlUp) エクセル2007から行数が飛躍的に増えましたのでCells(Rows.Count, "C").End(xlUp)にしてみました。これならどのバージョンでも対応できますので。

その他の回答 (1)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

C列の入力最下行から見ていって、1以外の値(未入力も含む)のセルを選択します。 ただし、1行目まで1が入っている場合はC1が選択されます。 (C0を選択するとエラーになるので回避の意味) ご希望と違う部分については、適当にアレンジしてください。 Set r = Range("C65536").End(xlUp) While (r.Value = 1) And (r.Row > 1)  Set r = r.Offset(-1, 0) Wend r.Select

関連するQ&A

  • VBAでセルのコピーをすると、エラーになる

    =IF(COUNTIF('5月'!B4:I13,E13)=0,"",COUNTIF('5月'!I:I,E13))というセルを コピーして、別のシートのセルに貼り付けたのですが、値が「0」の場合「””」が セルに張り付いてしまい、その後の計算ができません。 「””」を本当の空欄にするにはどうしたらいいのでしょうか? Sub 転記() Dim sh1 As Worksheet Dim sh2 As Worksheet Dim SN As String SN = Month(Now()) Set sh1 = Sheets(SN) Set sh2 = Sheets("差出票") sh1.Range("A35").End(xlUp).Offset(1) = sh2.Range("B9") sh1.Range("A35").End(xlUp).Offset(0, 1) = sh2.Range("F13") sh1.Range("A35").End(xlUp).Offset(0, 2) = sh2.Range("F14") sh1.Range("A35").End(xlUp).Offset(0, 3) = sh2.Range("F15") sh1.Range("A35").End(xlUp).Offset(0, 4) = sh2.Range("F16") sh1.Range("A35").End(xlUp).Offset(0, 5) = sh2.Range("F17") sh1.Range("A35").End(xlUp).Offset(0, 6) = sh2.Range("F18") sh1.Range("A35").End(xlUp).Offset(0, 7) = sh2.Range("F19") End Sub

  • 結合しているセルへのオートフィル

    セルの頭に式を入れていて、それを最終行までオートフィルしたいのですが、うまくいきません。 セルは全て2行ずつ結合しています。 その状態で With Cells(Rows.Count, 5).End(xlUp) .Offset(1, 1) = "最終判定" .Offset(1, 2) = "最終判定" .Offset(1, 3) = "最終判定" .Offset(1, 4) = "最終判定" .Offset(1, 5) = "最終判定" .Offset(1, 6) = "最終判定" .Offset(1, 7) = "最終判定" .Offset(1, 8) = "最終判定" .Offset(1, 9) = "最終判定" .Offset(1, 10) = "最終判定" .Offset(1, 11) = "最終判定" .Offset(1, 12) = "最終判定" Range("F5:F6").AutoFill Destination:=Range(Range("F5:Q6"), Selection.End(xlDown)), Type:=xlFillSeries というマクロを使用していますが(色々弄くり回していたので原型と少々変わってるかもしれません)、セルが結合している為出来ませんなどのエラーが出ます。 そこで回避手段として下記のマクロを組んでみました。 Public Sub testcode() 'ダミーデータ '5000行まで結合する為にダミーの判定用データを作成する(5000行までまずいかない) With Cells(5000, 5) .Offset(1, 1) = "最終行判定用" .Offset(1, 2) = "最終行判定用" .Offset(1, 3) = "最終行判定用" .Offset(1, 4) = "最終行判定用" .Offset(1, 5) = "最終行判定用" .Offset(1, 6) = "最終行判定用" .Offset(1, 7) = "最終行判定用" .Offset(1, 8) = "最終行判定用" .Offset(1, 9) = "最終行判定用" .Offset(1, 10) = "最終行判定用" .Offset(1, 11) = "最終行判定用" .Offset(1, 12) = "最終行判定用" End With '月の下のセルを結合する For m = 6 To 17 Set c = Cells(5, m) Cells(5, m).Activate Do Until c.Value <> "" Or c.Offset(1).Value <> "" c.Resize(2).Merge Set c = c.Offset(1) Loop Next m Range("F5") = "=IF~省略" Range("F5:F6").AutoFill Destination:=Range("F5:Q6"), Type:=xlFillSeries 'ダミーの5000行までオートフィルする Range("F5:Q6").AutoFill Destination:=Range("F5:Q5000"), Type:=xlFillSeries With Range("F5:Q5000") '選択範囲内で中央配置 .HorizontalAlignment = xlHAlignCenterAcrossSelection .Copy End With Range("F5").PasteSpecial Paste:=xlPasteValues 'コピーの解除 Application.CutCopyMode = False 'ダミーデータの選択 Range(Cells(Rows.Count, 5).End(xlUp).Offset(1, 1), Cells(Rows.Count, 5).End(xlUp).Offset(1, 12)).Select '削除 Range(Cells(Rows.Count, 5).End(xlUp).Offset(1, 1), Cells(5001, 17)).Delete End Sub 1.まず、F~Q列の5001行に文字を入れる 2.5000行まで2行ずつセルを結合する、F~Q列全て行う 3.F5にオートフィルしたい式を入れる 4.F5~Q6(ここも2行ずつ結合してあります)までオートフィルをする 5.F5~Q6に入っている式を下方向へオートフィルする 6.本来なら不要のダミーデータを選択し、削除する A~E列までは別にデータが入っていて、F~Q列はA~E列の最終行に合わせてオートフィルさせる、という目的で上記マクロを作成し使用しております。 一応これで動くのですが問題点があります。 1.5000行まで無駄なデータを入れているため結合処理が遅い(普段は300~1500程度だが中途半端に設定すると最終行が取得できない可能性があるため) 2.同じく無駄なデータの削除処理が遅い 以上2点が問題点となっております。 上記処理をなくしたいのですが、2行ずつの結合したセルに対して、位置が不明確な場合、オートフィルを飛ばすのは難しいでしょうか? よいマクロが有れば教えてください。

  • マクロでのセルの位置について

    マクロ初心者なんですが、今自分なりにマクロを作成しているのですが、行き詰まってしまったので、質問させていただきます。 セルC5から下に1つずつセルを移動してセルの値を取得していくのですが、セルC13はB13と統合していて、セルがその位置にくると、C13ではなくてB13になります。そこからセルを1つ下に移動するとB14になってしまいます。それをC14にしたいのですが、何かいい方法はないでしょうか?お願いします。 C = 5 CC="C" & C Range(CC).Offset(1, 0).Activate '次の行にセルを移動させる CC = ActiveCell.Address    ’セルのアドレスを取得 AAA = Range(CC)        ’セルの値を取得

  • データの値取得マクロ

    Sub Macro1() ''Worksheets("Sheet1").Activate ' addrw = Range("b65536").End(xlUp).Offset(1).Row Cells(addrw, 2).PasteSpecial end sub でB列の最終行を取得しその後、最終行の次のセルから追加のデータを貼り付けるマクロを作成しました。 このあと、追加のデータを貼り付ける前のB列の最終行の値と貼り付け後のB列の最終行の値を取得したいのですがどうすればいいでしょうか?

  • コマンドボタンを押したときシート2のa行の空白セルを選択したいのですが

    コマンドボタンを押したときシート2のa行の空白セルを選択したいのですが以下のやり方では”RangeクラスのSelectメソッドが失敗しました。”のエラーが出てしまいます。どこがいけないのか教えてください。 Private Sub CommandButton1_Click() Worksheets("sheet2").Activate Range("a65536").End(xlUp).Offset(1).Select End Sub ちなみに、コマンドボタンはシート1にあります。 よろしくお願いします。

  • EXCELでENTERキーでセルの移動マクロ

    こんにちは。 EXCELでENTERキーでセルの移動マクロを使いたいのですが、下記のマクロで改良を教えてもらいたいと思います。 まず、最初は必ず、セルB5にフォーカスしたいということ。そうして、できればOFFSETを使わないで、rangeかcellを使いたいのですが、お願いします。 Sub セル移動() Range("B5").Select Select Case ActiveCell.Column Case 1 ActiveCell.Offset(1, 1).Activate Case 2 ActiveCell.Offset(2, 2).Activate Case 3 ActiveCell.Offset(1, 1).Activate Case 4 ActiveCell.Offset(1, 1).Activate End Select End Sub

  • VBA作製ができません。どなたか教えてください。

    前回同じタイトルで質問させていただいた物を自分なりに本で調べて 作ってみました。しかし壁にぶつかりました。 Cells(Rows.Count, 7).End(xlUp).Offset(rowoffset:=1).Select この式は7列目の一番下の空欄のセルを選択できる式のようですが、 指定した範囲のなかで7列目の一番下のセルを選択したいのですがどうすればいいでしょうか? つまり列だけじゃなく行も選択したいです。 教えてください。 こんな式を作りました。  もし式を簡単に効率よくできる方法があればアドバイス下さい。 If Range("G4").Value = SpecialCells Then Range("H4").Select Else Range("G4").Select Range("G4").Copy Windows("Book1.xlsx").Activate Range("G18:G26") = Selection.Areas.Count Cells(Rows.Count, 7).End(xlUp).Offset(rowoffset:=1).Select ActiveSheet.Paste Application.CutCopyMode = False Windows("Book2.xlsm").Activate Range("D4").Select Range("D4").Copy Windows("Book1.xlsx").Activate Cells(Rows.Count, 4).End(xlUp).Offset(rowoffset:=1).Select ActiveSheet.Paste Application.CutCopyMode = False Windows("Book2.xlsm").Activate Range("E4").Select Range("E4").Copy Windows("Book1.xlsx").Activate Cells(Rows.Count, 5).End(xlUp).Offset(rowoffset:=1).Select ActiveSheet.Paste Application.CutCopyMode = False Windows("Book2.xlsm").Activate Range("H4").Select End If

  • elupの使い方

    はじめまして。 現在会社の仕事で必要に追われてエクセルのマクロを 勉強中のものです。 まだ基本的なことがしっかりと解っていないですが、 実際に色々作って勉強しているという段階です。 で、一つ困ったことがおきまして、自分ではどうしてなのか まったく解らなくなってしまい、ネットで調べてもどうしても わからないので、ここで質問させて頂くことにしました。 あるシートのA列(最終行が150)のコピーしたデータを貼り付けるとき Range("a150").End(xlUp).Offset(1, 0).Activate という風に、データの無い最終行を指定できると思うのですが、 これがなぜか、一度目の実行ではうまく機能するのに、 二度目の実行以降は、A列のデータのない最終行では無くて A列の先頭、つまりA1が選択されてしまうのです。 この原因が全くわからないのです・・・。 ちなみに、その部分を一部抜粋して貼り付けます。 Sheets("一時保管用").Activate Range("b3:m3").Select Selection.Copy Workbooks("出力用").Sheets("賃貸受注").Activate Range("a150").End(xlUp).Offset(1, 0).Activate ActiveSheet.Paste Workbooks("入力画面").Sheets("一時保管用").Activate Range("n3:q3").Select Selection.Copy Workbooks("出力用").Sheets("賃貸受注").Activate Range("n150").End(xlUp).Offset(1, 0).Activate ActiveSheet.Paste このような感じです。 そしてなぜか、その現象は上のA列のときにだけ発生し、 下のN列のときには発生しません。 これがわからずに、昨日からずっと悩んでいます。 どなたかこのわかりにくい説明で原因がわかるかたいましたら どうか教えて頂けたらと思います。

  • エクセルVBA の変数を使うべきでしょうか?

    はじめまして。エクセル初心者です。 書籍やサイトで勉強させてもらっていますが、VBAがなかなか難しくてすぐに壁にぶつかってしまいます。少々困ってしまい、詳しい方のアドバイスを頂ければと質問を投稿させていただきました。 どうか宜しくお願い致します。質問ですが、 以下のようなコードで、sheet5のB列の任意のセルをダブルクリックした場合、sheet5のBCD列の同じ行のセル値がsheet1の指定した列に入力されるという処理を作りました。 これで一応目的の動作はするのですが、数が増えると「コンパイルエラー・プロシージャが大きすぎます」というメッセージがでてしまいます。列や行には規則性があるので、もしかしたら変数というものを使ってコードを書き直せばいいのかなと思いネットで調べてみたのですが、今のところさっぱり理解できません。 申し訳ありませんが、分かりやすくご教授いただけないでしょうか。バージョンは2003を使っています。 また、下のコードですと、sheet5のBCDいずれかのセルに空白があった場合、sheet1の列に入力されるときに入力される行がずれてしまいます。今は空白を何かで埋めて対処しているのですが、この問題の解決策も教えて頂けると助かります。どうか宜しくお願い致します。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, cancel As Boolean) If Target.Address = "$B$2" Then Worksheets("sheet1").Range("B" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value Worksheets("sheet1").Range("H" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("B2") Worksheets("sheet1").Range("K" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("C2") Worksheets("sheet1").Range("M" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("D2") Worksheets("sheet1").Activate cancel = True End If If Target.Address = "$B$3" Then Worksheets("sheet1").Range("B" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value Worksheets("sheet1").Range("H" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("B3") Worksheets("sheet1").Range("K" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("C3") Worksheets("sheet1").Range("M" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("D3") Worksheets("sheet1").Activate cancel = True End If If Target.Address = "$B$4" Then Worksheets("sheet1").Range("B" & Rows.Count).End(xlUp).Offset(1).Value = Target.Value Worksheets("sheet1").Range("H" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("B4") Worksheets("sheet1").Range("K" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("C4") Worksheets("sheet1").Range("M" & Rows.Count).End(xlUp).Offset(1).Value = Worksheets("sheet5").Range("D4") Worksheets("sheet1").Activate cancel = True End If   ・     ・   ・     ・   ・     ・ End Sub

  • Excelのバージョンに依存しない最終セルの取得方法

    VBAでたとえばA列の最後にデータが入っているセルを取得するのに、今まで Range("A65536").End(xlUp) という書き方をしてきました。 しかし、Office2007ではExcelの最大列数が従来の256列から16384列に,最大行数が従来の65536行から1048576行に増えました。 そうすると、Excelを2007にバージョンアップしたら、上記の書き方をした既存のマクロを使っているブックのデータが増えていって65536行を超えたとき、マクロが正常に稼動しなくなります。 Range("A1048576").End(xlUp) とすればExcel2007では動くのかもしれませんが、Excel2003以前のバージョンでは、A1048576などというセルはないのでエラーになります。 できるだけExcelのバージョンに依存しない書き方をしたいのですが、上記のようなA列の最後にデータが入っているセルを求めるには、どういう書き方をすればいいのでしょうか。 自分なりに考えたのは、行数だけ求めるなら、 Range("A1").CurrentRegion.SpecialCells(xlCellTypeLastCell).Row で、この値をInteger型の変数でFor~Nextでループさせる、という方法です。 しかし、ネットで検索していろいろ調べたところ、上記の書き方では不具合が生じることがわかりました。たとえばA1からA10まで値が入っていた場合、 Range("A1").CurrentRegion.SpecialCells(xlCellTypeLastCell).Row では10が求まりますが、A10のセルを選択してDelキー(またはBackSpace)で値を削除しても、上の式の結果は10のままなのです。(Selectすると、空白のセルが選択されます) Excelのバージョンに依存しない、データが入っている最終行の求め方でいい方法はないでしょうか?

専門家に質問してみよう