Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6341 / 13644 ツリー ←次へ | 前へ→

【45760】選択している行に対してのマクロ実行 楽団 07/1/13(土) 20:56 質問[未読]
【45761】Re:選択している行に対してのマクロ実行 ぱっせんじゃー 07/1/13(土) 21:03 発言[未読]
【45762】Re:選択している行に対してのマクロ実行 Kein 07/1/13(土) 21:11 回答[未読]
【45763】Re:選択している行に対してのマクロ実行 かみちゃん 07/1/13(土) 21:11 発言[未読]
【45764】Re:選択している行に対してのマクロ実行 Kein 07/1/13(土) 21:15 発言[未読]
【45765】Re:選択している行に対してのマクロ実行 かみちゃん 07/1/13(土) 21:21 発言[未読]
【45766】Re:選択している行に対してのマクロ実行 Kein 07/1/13(土) 21:33 発言[未読]
【45767】Re:選択している行に対してのマクロ実行 楽団 07/1/13(土) 22:08 お礼[未読]
【45768】Re:選択している行に対してのマクロ実行 楽団 07/1/13(土) 23:20 質問[未読]
【45770】Re:選択している行に対してのマクロ実行 Kein 07/1/14(日) 0:52 発言[未読]
【45800】Re:選択している行に対してのマクロ実行 楽団 07/1/14(日) 18:47 お礼[未読]

【45760】選択している行に対してのマクロ実行
質問  楽団  - 07/1/13(土) 20:56 -

引用なし
パスワード
   こんばんわ。

選択している行に対してマクロを実行したいのですが、その場合のマクロの組み方はどのようになるでしょうか?

実行することは、仮にあるシート上の5行目に対する処理であった場合、5行目の列AからAAを選択し、値をコピー、別のシートの最終行の列KからADに対して、値をペーストする予定です。

他の行を選択した場合にも、そのシート上に配置したマクロ実行ボタンを押したら、同じような処理ができればと思います。

分かりにくい説明で誠に恐縮ですが、ご教授の程お願いします。

【45761】Re:選択している行に対してのマクロ実行
発言  ぱっせんじゃー  - 07/1/13(土) 21:03 -

引用なし
パスワード
   選択セルの行番号は、

Selection.Row

で取得できます。

複数行選択している場合は
一番上の行番号になります。

【45762】Re:選択している行に対してのマクロ実行
回答  Kein  - 07/1/13(土) 21:11 -

引用なし
パスワード
   こんな感じでしょーか ?

Sub MyCopy()
  Dim MyR As Range
 
  Set MyR = Intersect(ActiveCell.EntireRow, Range("A:AA"))
  MyR.Interior.ColorIndex = 3
  ActiveWindow.ScrollColumn = 1
  If MsgBox(MyR.Address(0, 0) & " をコピーしますか", 36) = 6 Then
   MyR.Copy
   Sheets("Sheet2").Range("A65536").End(xlUp).Offset(1) _
   .PasteSpecial xlPasteValues
   Application.CutCopyMode = False
  End If
  MyR.Interior.ColorIndex = xlColorIndexNone: Set MyR = Nothing
End Sub

【45763】Re:選択している行に対してのマクロ実行
発言  かみちゃん  - 07/1/13(土) 21:11 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>あるシート上の5行目に対する処理であった場合、5行目の列AからAAを選択し、値
>をコピー、別のシートの最終行の列KからADに対して、値をペーストする

アクティブセルの行のA列からAA列を選択するには、以下の方法でできます。
Sub Sample1()
 ActiveCell.EntireRow.Cells(1).Resize(, 27).Select
End Sub

Sheet2のK列の値が入っている最終行からその行のAD列までを選択するには、以下の方法でできます。
Sub Sample2()
 Sheets("Sheet2").Cells(Rows.Count, "K").End(xlUp).Resize(, 20).Select
End Sub

なさりたいことはわかったのですが、
コピー元(Ax:ADx)とコピー先(Kx:ADx)では、セルの個数が違いますが、
どういったことをしたいのでしょうか?
その状態では、コピーできないと思います。

【45764】Re:選択している行に対してのマクロ実行
発言  Kein  - 07/1/13(土) 21:15 -

引用なし
パスワード
   >別のシートの最終行の列KからAD
でしたね。どの列の最終行を基準にするのか分かりませんが、仮にK列なら

Sheets("Sheet2").Range("K65536").End(xlUp).Offset(1) _
.PasteSpecial xlPasteValues

と、変更するだけです。もしA列を基準にするなら

Sheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 10) _
.PasteSpecial xlPasteValues

というように、Offsetプロパティの引数で調節します。

【45765】Re:選択している行に対してのマクロ実行
発言  かみちゃん  - 07/1/13(土) 21:21 -

引用なし
パスワード
   こんにちは。かみちゃん です。

▼Keinさん

> 変更するだけです

[45763]で、私たずねているのですが、
コピー元(Ax:ADx)とコピー先(Kx:ADx)では、セルの個数が違うような気がしますが、
このコードで対応できるのでしょうか?

【45766】Re:選択している行に対してのマクロ実行
発言  Kein  - 07/1/13(土) 21:33 -

引用なし
パスワード
   >コピー元(Ax:ADx)とコピー先(Kx:ADx)では、セルの個数が違う
たぶん質問者の勘違いでしょう。よくあることですから気にしてません。
それより貼り付け先の左上端セルの位置の求め方を、明らかにして欲しいです。

【45767】Re:選択している行に対してのマクロ実行
お礼  楽団  - 07/1/13(土) 22:08 -

引用なし
パスワード
   ぱっせんじゃーさん、Keinさん、かみちゃんさん、早速のご回答ありがとうございました。皆さんの意見を参考にマクロを作ってみたいと思います。

>コピー元(Ax:ADx)とコピー先(Kx:ADx)では、セルの個数が違いますが、
>どういったことをしたいのでしょうか?
>その状態では、コピーできないと思います

また、かみちゃんさんが指摘された、上記部分ですが、AKの誤りでした。申し訳ございません。

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

【45768】Re:選択している行に対してのマクロ実行
質問  楽団  - 07/1/13(土) 23:20 -

引用なし
パスワード
   Keinさんから ご指導いただきましたマクロにて完成させることができました。
機能的に問題なのですが、一点質問があります。

このシートには、非表示の分があり、普段は表示させておりません。

普段非表示にしている列の範囲は、

コピー元  AからAAの中のEからKの範囲
ペースト先 KからAKの中のOからUの範囲

上記部分は普段表示していると邪魔になるので、グループ化して非表示にしています。

今回教えていただいたマクロは、基本的に非表示になっていても動作します。

しかし、オートフィルタを掛けた状態で、かつ、コピー元、ペースト先のどちら非表示にしていると、うまく実行することができないようです。

マクロを実行するときは、表示にして作業を行うようにすれば問題ありませんが、どうしてこのような現象がおきてしまうのか気になったので、質問させていただきます。

【45770】Re:選択している行に対してのマクロ実行
発言  Kein  - 07/1/14(日) 0:52 -

引用なし
パスワード
   >どうしてこのような現象がおきてしまうのか
その理由が知りたいのですか ? 知ってどうするのか分かりませんが、
エクセルの仕様だから、としか言えないでしょうね。Microsoft社に
尋ねても、おそらく同じ答えしか返ってこないのではないかと思います。
ま、コピーでは不都合なら"値の代入"という方法もありますよ。

Dim MyV As Variant

MyV = Intersect(ActiveCell.EntireRow, Range("A:AA")).Value
Sheets("Sheet2").Range("K65536").End(xlUp).Offset(1) _
.Resize(, 27).Value = MyV

というように、Variant型変数を使って代入します。

【45800】Re:選択している行に対してのマクロ実行
お礼  楽団  - 07/1/14(日) 18:47 -

引用なし
パスワード
   ご返事遅れてしまいすみません。

>知ってどうするのか分かりませんが、

確かにそうですね。初心者の私が知ったところで、、、だと思い直しました。

>ま、コピーでは不都合なら"値の代入"という方法もありますよ。

>Dim MyV As Variant

>MyV = Intersect(ActiveCell.EntireRow, Range("A:AA")).Value
>Sheets("Sheet2").Range("K65536").End(xlUp).Offset(1) _
>.Resize(, 27).Value = MyV

>というように、Variant型変数を使って代入します。

上記マクロを使用したところ、オートフィルタを掛けた状態でも、うまく値を入力することができました。

Variant型変数については、自分で調べてみたいと思います。

今回は色々ありがとうございました。

6341 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free