• ベストアンサー

【Excel VBA】1クリックで1ページ移動する

Excel2003を使用しています。 Sheet1はデータ入力用のシートとなっていて、Sheet1にデータを入力すると、Sheet2の予め作成されている書式にデータが入力されて、書類が完成するようになっています。 実際、プリントアウトするのはSheet2になるのですが、Sheet1にデータを入力して、Sheet2への入力状態を確認したいときに、ボタンをクリックすることで、1ページずつ移動させるようにしたいのですが、マクロで可能でしょうか?可能であれば、どのようにコードを記述すればいいでしょうか? イメージしているものは、例えば、『上へ』と『下へ』という2つのボタンを作って、そのボタンのクリックで移動できたらと思っています。 Sheet2の1ページは26行で、1ページ目はA1:M26、2ページ目はA27:M52、3ページ目はA53:M78…となっていて、100ページまであって、行数は2000行を超えますし、今後、ページ数が増えることも考えられますので、1クリックで1ページ分移動できると確認しやすく便利だなと思い、質問させていただきました。 よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 これは、私が、数年使っているコードを作り変えたものです。 A列目の画面の4行目までをクリックすると、バックします。 A列の27行目以降をクリックすると、前に進みます。 動くボタンという方式もありますが、意外にうっとうしいものです。 シートタブを右クリックして、コードの表示で、以下を貼り付けてください。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)   Dim i As Long   Dim j As Long   '1列目を指定   If Target.Column <> 1 Then Exit Sub   i = Int((Target.Row - 20) / 26) + 1   j = ActiveWindow.ScrollRow   Application.EnableEvents = False   If (Target.Row - j) < 5 And Target.Row > 26 Then     Application.Goto Cells((i - 1) * 26 + 1, 1), True   ElseIf (Target.Row - j) > 25 Then     Application.Goto Cells(i * 26 + 1, 1), True   End If   Application.EnableEvents = True End Sub

rx-z5815
質問者

お礼

Wendy02 さん、おはようございます。 いつもお世話になっています。 先程、教えていただいたコードで試してみたところ、うまくいきました! 最初、表示(ズーム)を1ページ分に合わせていなかったせいか、うまくいかなかった(?)ようなのですが、ズームを調整したところ、バッチリでした(^。^) しかも、ページの1行目が画面の一番上に表示されるので、とっても見やすいです♪ >動くボタンという方式もありますが、意外にうっとうしいものです。 “動くボタン”というものに、興味があるのですが、もし、よろしければ、こちらの方法も教えていただけると、嬉しいのですが。。。 Wendy02 さんが言われている“意外にうっとうしい”というのも、体験できればと思います(笑)

その他の回答 (3)

  • WWolf
  • ベストアンサー率26% (51/192)
回答No.4

#1です。 #2さんの動きはおもしろいですね(^^)勉強になりました。 ところで、私のコードにバグがあったようで申し訳ありまあせん。 その後の回答を見たところ動くボタンで対応されているようなので、デバッグはしないとして。 ただ、一つだけ気になることだけ記載します。 回答者などのコードは自分なりに理解することです。 >よろしければ、こちらの削除の仕方も教えていただけると助かります。 Application.CommandBars("Cell").add() であれば Application.CommandBars("Cell").Reset であるか Application.CommandBars("Cell").delete(名前) であるか見当が付くか、または自分でも調べる事をしないと上達はしません。 ここは、分からない事を聞く場所でもあると同時に前提として向上心があるという事も大事だと私は思います。 説教がましく受け止めず、前向きにがんばって下さい。そういう姿勢を応援したいです。

rx-z5815
質問者

お礼

再度の回答ありがとうございます。 VBA勉強中ですので、いろんな方のいろんな回答を見るだけでも、大変参考になります。 今までも、マクロに関する質問をさせていただいておりますが、今回のような操作を便利にするようなマクロは初めてでしたので、恥ずかしながら、見当もつかなかったということもあり、再度、質問させていただいた次第です。 おかげさまで勉強になりました。ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >“動くボタン”というものに、興味があるのですが、もし、よろしければ、こちらの方法も教えていただけると、嬉しいのですが。。。 うっとうしいと書きましたが、興味を抱いていただいてうれしいです。実は、私は、これも、実際は使っています。ボタンが画面についてくるものです。この方法は、別のことにも応用できるはずです。 今回は、コントロールツールのボタンを選びましたが、これも前からなので、実際は、フォームボタンを使っています。どちらでもよいですが、少しコードが変わります。場所は、空いている列の上の場所においてください。後は、自動的に位置決めが決まります。 シートモジュールに以下のマクロをつけてください。前回と同じ調整は必要です。 コマンドボタンのCaptionに、[左-Down, 右-Up] と入れると良いと思います。右クリックは、すこし反応が鈍いのは、マウスのせいかもしれません。もちろん、スピンボタンのほうが分かりやすいのは言うまでもありませんが、場所を取るのがいやなので、今回は、コマンドボタンを選びました。 Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) '左クリック-進む-Down '右クリック-戻る-Up   Dim WinTop As Long   Dim i As Long   i = Int((ActiveCell.Row) / 26) + 1   If Button = 1 Then     Application.Goto Cells(i * 26, 1), True   ElseIf Button = 2 Then     If i > 1 Then       Application.Goto Cells((i - 2) * 26 + 1, 1), True     End If   End If     WinTop = ActiveWindow.VisibleRange.Top + 2 '(2は縦の位置調整)     CommandButton1.Top = WinTop End Sub

rx-z5815
質問者

お礼

Wendy02 さん、こんにちは。 早速、“動くボタン”についても回答をいただき嬉しいです。ありがとうございます。 ひとつのボタンを左クリックか右クリックで、進む-Down か 戻る-Up ができるなんて、ちょっと感激してしまいました! 最初、進む-Down と 戻る-Up は別々のボタンだと思っていて、ボタンをふたつ作ってしまい、??の状態でした(^^ゞ “うっとうしい”なんて、とんでもないです。 今回はNo.2の方法とNo.3の方法とどちらにしようか、迷ってしまうぐらいです。 ありがとうございました。

  • WWolf
  • ベストアンサー率26% (51/192)
回答No.1

こんにちは 少し趣向を変えています 下記のコードをThisWorkbookに Private Sub Workbook_Open() Dim AM_a, AM_b Set AM_a = Application.CommandBars("Cell").Controls.Add() Set AM_b = Application.CommandBars("Cell").Controls.Add() With AM_a .Caption = "後ページへ" .OnAction = "P_Down" .BeginGroup = False End With With AM_b .Caption = "前ページへ" .OnAction = "P_Up" .BeginGroup = False End With End Sub 下記のコードをモジュールに貼り付けてください Sub P_Up() Dim AR, p AR = ActiveCell.Row With ActiveSheet If AR < 65510 Then p = Int(AR / 26) .Cells((p + 1) * 26, 1).Select End If End With End Sub Sub P_Down() Dim AR, p AR = ActiveCell.Row With ActiveSheet If ActiveCell.Row > 26 Then p = Int(AR / 26) .Cells(-(p + 1) * 26, 0).Select End If End With End Sub そして保存し再度読み込みシート2で右クリックするとメニュー下に追加されていますので、試してください。

rx-z5815
質問者

お礼

回答ありがとうございます。 先程、教えていただいた方法で試したところ、“前ページへ”はうまくいくのですが、“後ページへ”ではエラーが出ました。 エラーが出たときは、下記の部分が黄色で表示されていましたが。。。 >.Cells(-(p + 1) * 26, 0).Select 右クリックメニューに追加する方法は、思いつきませんでしたが、この右クリックメニューに追加したものを削除したい場合は、どうすればいいのでしょうか?元のファイルをコピーしたもので、マクロを試したせいか、“前ページへ”と“後ページへ”が右クリックメニューに2つずつ表示されているので、1つずつにしたいのですが、マクロを削除しても、右クリックメニューからは削除されないようなので…。 よろしければ、こちらの削除の仕方も教えていただけると助かります。

関連するQ&A

  • 【エクセルVBA】プルダウン選択→ボタンクリック→別シートに移動がしたい。

    sheet1のA1に人の名前を選択するプルダウンをつくり、その下にコマンドボタンを作ります。このボタンをクリックするとそれぞれの人に対応したシートに移動するようにしたいです。人名をa,b,c,d,eとしてそれに対応するsheet2,3,4,5,6を用意します。aを選択し、ボタンクリックするとsheet2に移動し、eを選択し、ボタンクリックするとsheet6に移動するという具合にしたいのですが、この時、コードをどう入力すべきかがわかりません。 Private Sub CommandButton1_Click()と End Sub の間に何を入力するべきか正確に教えてください。 よろしくお願いします。

  • Excel VBAについて

    UserFormからデータ(氏名、生年月日・・)を入力し、「登録」ボタンをクリックすると Sheet2に入力データを上から(1行目、2行目・・)格納していきます。 そして、Sheet1上に作成した「印刷」ボタンをクリックすると、Sheet2で順に格納されたデータをある定められたフォーマットで両面印刷(表に1行目のデータ、裏に2行目のデータ)できるようにしたいのですが、可能でしょうか。

  • セル移動マクロを教えて下さい。

    エクセルで最終行の次の行(新規入力となる行)の左4つ目のセルに移動するマクロを作りたいのですが、出来るでしょうか。 例えば列Aに1から3000までのNOが入っているとします。 B列からD列までは他のデータに使用しているため新規入力データE列の行から右に入力しています。 NO125の行までデータ入力している場合、ボタンをクリックすれば、A列のNO126(新規入力行のA列)にセルが移動するマクロです。 よろしく、お願いいたします。

  • Excel関数について,参照データの範囲が変わる時

    Excelの関数について教えてください。 まずExcelで、”Sheet1とSheet2があり、Sheet2には、Sheet1のデータをもとに情報が入力されるように関数{IF(Sheet1!A1="","",Sheet1!A1)}を200行目まで入力されている”ものがあるとします。 それを使って以下のような作業を行います。 1. 職場のシステムからExcelデータを抽出する 2. 抽出したデータをエクセル(sheet1)に貼り付ける。 3. Sheet2にSheet1をもとにした計算結果が表示される 以上が現在、行っている作業です。 ただ問題があり、毎回、sheet1に貼り付けるデータの範囲(行数)が異なるため、sheet2のどこまでに数式を設定しておけばいいのかわかりません。今は適当に200行目まで数式を入力してあります。 『質問』Sheet1に貼り付けるデータの範囲(行数)と同じ範囲(行数)分だけ、Sheet2にも数式が表示されるようにしたい。(例)sheet1に2345行あるデータが貼り付けられた→それをもとに、Sheet2に関数を2345行目まで、自動で入力する。 大変お手数ですが、分かる方教えて頂けますか?よろしくお願いします。

  • 行の移動

    ボタンを使って行の移動をさせるマクロを組みたいのですが、うまく動いてくれません。指定した行をエクセルシートの最上段に表示させる書式を教えてください。宜しくお願いします。

  • ExcelでPageDownキーを使って行を移動するときに、

    WinXP、EXCEL2002を使っています。 20行で1ページになるようにデータを入力し、数十ページで管理しています。 次ページのデータに移るときには、PageDownキーを利用していますが、以前はページごとで区切って移動できたのに、EXCEL2002にしてから、PageDownのすすむ単位が30行くらいになっているため、ズレて移動されてしまいます。改ページで区切ってもだめでした。 PageDownで移動する際の、行数を固定することは可能でしょうか?仕事で使っているため大変困っています。宜しくお願いいたします。

  • ExcelのVBAで作りたいんです

    Excelのマクロで以下のようなものを作りたいのですが、調べても適当なものが見つからず、どのようなコードを書いたらいいのか分からないので有識者の方のお力をお貸しください。 Sheet1に検索ワードが入力された表を作成しておきます。(表自体は数十行程度で1列だけ) Sheet2にSheet1に書かれている検索ワードがあるかどうかを調べて、該当した場合にはその行を削除する。 もしくは別シートに移動する。 この作業をSheet1の検索ワード行数分自動で処理する。 Sheet2は数百行程度で複数列ありますが、検索ワードが該当さえすれば削除(移動)してしまって構いません。 また、話は変わりますがこのようなものも作りたいのです・・・。 CSVからの整形用マクロがあるのですが、整形処理が終了したら整形済みのシート(例としてSheet2~5)から1つのシートにまとめたい(Sheet1へ)と思っているのですが、データがどこまで入力されているか(Sheet2~5に)の判断と、Sheet1へのコピーでSheet1にどの行までデータが入っていてどの行から追加すればいいのかをお教えください。

  • VBA 印刷について(空白ページを印刷しない)

    エクセル VBAで空白のシート及び空白ページを印刷しない方法を教えてください。 見積明細シートが明細1、明細2と9まであります。 各シート見積もりの内容によりページ数が異なり 入力の無いシートもあります(明細3以降入力無し等) 又、2行目まではタイトル行のためシートに最初から入力済みです。 縦横とも罫線を引いてあります。 A    B   C   D    E   F 1 項目  適用  単価  単位  金額   備考← タイトル行 2                        ← タイトル行 3 ここから入力 4 5 ↓ 1ページ23行 例えば、明細1 24行まで入力した場合、2ページめの最後(44行目まで) 印刷したい。 明細2以降 タイトル行以外にデーターが有れば印刷、なければ印刷しない。 様な感じです。 最終行まで印刷するところまでは自力でたどり着いたのですが、それだと最終行よりしたの罫線が印刷されなくて困っています どなたかご教示願います

  • VLOOKUP関数と同じことをVBAでおこなうには

     初めまして、当方VBAの素人です。よろしくお願いします。  同じような質問で、このようなVBAを見つけました。 Sub Macro1() For n = 2 To 5 '処理するSheet2の行数範囲 a = Sheets("Sheet2").Cells(n, 1) 'aにA列の値を代入 For m = 2 To 5 '検索するSheet1の行数範囲 If Sheets("Sheet1").Cells(m, 1) = a Then 'Sheet2のA列の値とSheet1のA列が一致した場合 v = Sheets("Sheet1").Cells(m, 2) 'vにB列の値を代入 Sheets("Sheet2").Cells(n, 2).Value = v 'Sheet2のB列に値を入力 Exit For '値が見つかったのでForを終了 End If Next Next End Sub このVBAではSheet2での検索、入力が列になるのですが、列でなく、行でできないでしょうか。できればSheet1のB列の値をSheet2の1行で検索、Sheet2の2行に入力されるだけではなく、Sheet1のC列の値をSheet3の1行で検索、Sheet3の2行に入力されるようにしたいと思います。  解る方、よろしくお願いします。

  • ダブルクリックでプリントSheetに移動するマクロ?

    エクセル初心者です。社員情報のデーターベースシート(Sheet2)の任意の行(社員番号列)をダブルクリックするとその社員情報を定形のプリントシート(Sheet1)へその行の情報を移動できるようにしていますが、データーベースシートを検索しダブルクリックするのに時間がかかり手惑いますので、データーベースシート(Sheet2)を自分でダブルクリックしないでデーターの社員番号等を検索画面等で入力してプリントシート(Sheet1)に情報を移動したいと思っています。関数やマクロでの検索、ダブルクリックの代わりになる方法等を教えて頂けたら幸いです。どうぞ宜しくお願い致します。

専門家に質問してみよう