- ベストアンサー
エクセル:列の範囲選択をうまくできないでしょうか ?
行数が約2000行ほどの表を毎月使用します。それでいろんな列をコピーして別の表に貼り付けたいのですが、列のコピーをする時に範囲指定でドラッグに結構時間がかかります。これをマクロでやりたいんですが、カーソルをおいた列の一番下の行まで範囲を指定すると言うのをマクロでできないでしょうか? 自動記録でマクロを造ろうとすると、実行した列を選択してしまい、任意の列の選択ができません。 よろしくおねがいします。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
こんばんわ。次のように操作してみて下さい。 まず、下記のコードをSheet1のモジュールシートにコピー・ペーストし、前回のマクロを削除する。 Sub myColumn_Select() Dim myClm As Integer myClm = Range(Selection.Address).Column Range(Selection.Address & ":" & Cells(Rows.Count, myClm).End(xlUp).Address).Select End Sub 1.マクロが登録されているブックを開き、ALT+F8キーを押してマクロダイアログボックスを立ち上げ、マクロ名の下に、Sheet1.Column_Selectと入力されている(されていない時は、下のマクロ名をクリックすると入力される。)ことを確認後、オプションボタンをクリックする。 2.カーソルが点滅しているテキストボックスに半角小文字でbと入力し、OKボタンを押してダイアログボックスを閉じる。×ボタンを押してマクロダイアログボックスも閉じる。 まず、セルを選択し、CTR+bを押すと選択されたセルから最終行のセルまで選択されます。 また、不都合なことがありましたら、ご遠慮なくお知らせ下さい。
その他の回答 (8)
- kazuhiko5681
- ベストアンサー率49% (79/159)
こんばんわ。間違って解答ボタンを押してしまいました。こちらのマクロを参考にしてみて下さい。貼り付け先は、シート1のモジュールシートです。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Range(Target.Address & ":" & Cells(Rows.Count, Target.Column).End(xlUp).Address).Select End Sub 選択したい先頭行にカーソルを置くと最終行まで選択されます。
お礼
思った通りに動くことができました。ありがとうございます ただ通常の作業もしたいときもあるのでショートカットでマクロをオンやオフにできないでしょうか? 宜しく御願いいたします。
- kazuhiko5681
- ベストアンサー率49% (79/159)
こんばんわ。よくあなた様の質問を読まずに作ってしまい、申し訳ございませんでした。修正マクロを作ってみました。前回のように操作してみて下さい。 Sub myCopy() Dim myWsn As Worksheet Set myWsn = Workbooks("計算台帳.xls").Worksheets("基本台帳") myWsn.Range("B1:" & myWsn.Cells(Rows.Count, 2).End(xlUp).Address).Select End Sub これで、実現しているはずです。 また、不都合なことがありましたらご遠慮なくお知らせ下さい。
- kazuhiko5681
- ベストアンサー率49% (79/159)
初めまして。 ブック名を計算台帳・シート名を基本台帳・コピーしたい列をB列・ペーストしたい列をG列としてサンプルマクロを書いてみました。次のように操作してみて下さい。 1.新規ブックを開き、ALT+F11キーを押してVBE画面を開く。 2.画面左上のVBAProjectと書いてある下のThisWorkbookにマウスポインターをあわせてダブルクリックし、下記のコードをコピー・ペーストする。 Sub myCopy() Dim myWsn As Worksheet Set myWsn = Workbooks("計算台帳.xls").Worksheets("基本台帳") myWsn.Range("B1:" & myWsn.Cells(Rows.Count, 2).End(xlUp).Address).Copy Destination:=myWsn.Range("G1") End Sub もし、このマクロの動作方法がわからない・考えているものと違う等不都合なことがありましたら、ご遠慮なくお知らせ下さい。私でよろしければ、あなた様のおやりになりたいことが実現するまでご一緒に考えていきたいと思います。
お礼
お返事ありがとうございます。 やりたいことには近いんですがペーストしたい列はいらないのですが、 コピーしたい列がB列などの固定ではなくカーソルのおいてあるところを判断してその列のカーソル位置からその列のデーターの最終行までと言うようなマクロができないでしょうか? お忙しい中よろしく御願いいたします
- Hageoyadi
- ベストアンサー率40% (3145/7860)
Ctrl+Shift+下で、連続データの一番下の行まで範囲指定します。 Ctrl+Shift+Endで現在のカーソルから右下方向へ向かって、使用している全セル範囲を指定します。 が、役に立ちませんか?
お礼
どうもありがとうございました。途中に空白の行がいくつかあるんですよ、これはなんともなりませんよね
- imogasi
- ベストアンサー率27% (4737/17069)
既出のご回答でそのままでは上手く行かなかったりがあったので考えて見ました。 まずSheet1にボタンを1つ貼り付ける。 (意図しないケースでの発動を抑えるためです。) VBEのCommndButtonのClickイベントとして Sub ボタン1_Click() ' MsgBox ActiveCell.Column c = ActiveCell.Column r = ActiveCell.Row ' MsgBox Selection.End(xlDown).Row Range(Cells(r, c), Cells(Selection.End(xlDown).Row, c)).Select Selection.Copy End Sub (Msgboxを生かして確認納得後、コメント化してください。RangeからSelectまでは、改行されていますが1行に続けてください。) 実行後コピー先の先頭のセルをクリックして、編集-貼り付けの操作をしてください。 この部分は手操作に残しておきます。「コピー先の先頭のセル」を選ぶ必要があるが、これを捉えるには、ボタンが もう一つ必要で、それをクリックするくらいなら、編集-貼り付けの操作にしたほうが良いと思いました。
お礼
どうもありがとうございました。
- tamagawa49
- ベストアンサー率46% (123/265)
列を下まで選びたいだけならばマクロを使わなくても出来ます。 A列をすべて選ぶには、A1やA2ではなく、一番上のAそのものをクリックします。するとA列全てが選べます。 貼り付けるときは、例えばC列に貼り付けるには、同様にCを選ぶか、またはC1を選んで貼り付けて下さい。 列全部ですから、セルA1からA65536まで選択されますが、データが入っていないセルに関してはコピー→ペーストしても何の影響もありませんから、大丈夫だと思います。 また、同様に行全体も選べます。
お礼
どうもありがとうございました。この方法でやってみます
- nishishi
- ベストアンサー率39% (17/43)
>カーソルをおいた列の一番下の行まで範囲を指定すると言うのをマクロ は Range(Selection, Selection.End(xlDown)).Select です。使用してみてください。
お礼
どうもありがとうございました
- sima_
- ベストアンサー率40% (11/27)
Ctrl+aを押すと列毎にコピーするというマクロであれば 下記の内容でいいと思います。 ' Keyboard Shortcut: Ctrl+a Selection.Copy End Sub コピーしたい列を指定してCtrl+aでコピーが可能になります。
お礼
どうもありがとうございました
お礼
何度もありがとうございました。 自分のイメージどうりの処理ができるようになりました。 僕もマクロの勉強をしてみます。ほんとうにありがとうございました。