[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『「オートフィルタ適応」+「グループ化で非表示」+「列の非表示」状態でも行コピーを行いたい』(ロクシ)
■やりたいこと
「オートフィルタ適応」+「グループ化で非表示」条件下でも行コピー&ペーストと同じ結果が得られ、操作者が【sheet1】の任意のセルを手動選択後、マクロボタンを押すと対象者の封筒が印刷される環境を作りたい
■構造
【sheet1】、【封筒FM】の2つのシートがあります
【sheet1】−−−
A5:Z100まで個人情報の入った表があります
3行目、G3、J3、H3、Y3は【封筒FM】内のセル4カ所に値が引用されています
■阻害要因と現在の状況
「オートフィルタ適応」+「グループ化で非表示」+「列の非表示」を業務で多様する状況があります
この状態で 行コピ&ペーストを行うと
非表示した列の内容が除かれた状態でコピーされてしまい【sheet1】のG3、J3、H3、Y3にに必要な情報が貼付けできず【封筒FM】に適切に引用できない状況です。
この状況がよく分かるのは以下のサイトです。
しかし、ここで説明してくださっている対応策では運用が少し難しいと思っています
https://www.limecode.jp/entry/trap/copy-invisiblecells
■こうすれば実現できるのではないかと思うのですがどのように書けばよいか分かりません
印刷対象としたいセルを操作者が手動選択後、マクロボタンを押す
VBAーーーーーー
→選択セルの「行番号」を取得
→その行番号から一番左セル(A.行番号)を選択
→A.行番号 から Z.行番号を選択範囲拡張して選択&コピー
→3行目(A3)に貼付
■現在記載しているVBA −−−−−
Sub 印刷_封筒_選択行の1名のみ()
Application.ScreenUpdating = False
Worksheets("sheet1").Activate Rows(ActiveCell.Row).Select Selection.Copy Rows("3:3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Worksheets("封筒FM").PrintOut Worksheets("sheet1").Activate
Application.ScreenUpdating = True
End Sub
ーーーーーーー
どなたかご教授いただければ幸いです。よろしくおねがいします。
< 使用 Excel:Excel2013、使用 OS:Windows10 >
質問として完結するには、 ・どこにオートフィルタを適用しているか、 ・グループ化で非表示 の内容 について説明が必要ではないかと思いますが、いかがですか。
それは後ほどお願いするとして、以下のようにしたら、どうですか? Dim r As Long Application.ScreenUpdating = False With Worksheets("sheet1") .Activate r = ActiveCell.Row .[G3] = .Cells(r, "G") .[J3] = .Cells(r, "J") .[H3] = .Cells(r, "H") .[Y3] = .Cells(r, "Y") End With '以下は省略します。
なお、いや4つだけじゃないんです、とかの反応はやめて下さいね。 また、参考にあげられた記事のように、いったん列をすべて表示して作業し、 終了後元に戻す、という考え方は有効でしょう。
ちなみに、私でしたら、 ・"封筒FMシート"の印刷対象外のセル(例:AA1セル)に、 参照すべきSheet1シートの行番号を持たせ ・G3 セル: = Index(Sheet1!A1:Y100,AA1,7) などとしておき、(J3,H3,Y3なども同様) (Sheet1の対象セル範囲はもっと広くしてもよいかも。) ・マクロからは "封筒FMシート"のAA1セルを更新する ような作りにするかもしれません。 (γ) 2021/09/24(金) 07:05
思わず[]記号を使ってしまって戸惑うかとおもいますので、再掲載しておきます。 これでどうですか? Sub test() Dim r As Long Application.ScreenUpdating = False With Worksheets("sheet1") .Activate r = ActiveCell.Row .Range("G3") = .Cells(r, "G") .Range("J3") = .Cells(r, "J") .Range("H3") = .Cells(r, "H") .Range("Y3") = .Cells(r, "Y") End With Worksheets("封筒FM").PrintOut Worksheets("sheet1").Activate Application.ScreenUpdating = True End Sub (γ) 2021/09/24(金) 10:46
お返事遅れてしまい大変申し訳ございません。
昨日改めて取り掛かってみましたところ、無事動作可能になりました。
少しずつ構文の意味を紐解きながらなぜこうなるのかを検索していくと
自分が考え付かなかったシンプルな方法でやりたいことを実行している事が分かりスゴイって思いました。
また可読性が高いってこういう事なんですね。
大変勉強になりました。
ステキなご回答本当にありがとうございました。
(ロクシ) 2021/10/04(月) 10:33
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.