- 締切済み
ExcelVBA:複数窓の値貼付で表示範囲が変わる
お世話になります。 環境:Excel2007 「新しいウィンドウを開く」より2ウィンドウ以上で同じシートを表示しているときに、同じブックの1番目以外のウィンドウで以下のコードを実行すると、1番のウィンドウ(ウィンドウ名の末尾に「:1」が付いているウィンドウ)の表示範囲がA1を基点とした位置に移動してしまいます。「:2」~「:n」の表示範囲は変わりません。 表示エリアが変わる原因と対策はありませんか? 右クリックから値を貼り付けの動作ではこのような事が起きないのですが、VBAで実行すると上記のようになります。マクロの記録でも同様です。 sub 値貼付() Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone end sub ちなみにウィンドウ1で張り付けを行った際は2以降のウィンドウの表示範囲は変わりませんでした。例えば以下のようにすれば表示範囲が切り替わらずに値貼付ができましたが、強引な気がします。 Sub test() Dim act_win As Window, back_win As Window, back_rng As Range Set back_win = ActiveWindow Set back_rng = Selection Set act_win = Application.Windows(ActiveWindow.Parent.Name & IIf(ActiveWindow.Parent.Windows.Count > 1, ":1", "")) act_win.Activate back_rng.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone back_win.Activate End Sub
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- kagakusuki
- ベストアンサー率51% (2610/5101)
御質問の件に対する直接的な回答からはやや外れるかも知れませんが、値のみを反映させるのであれば、「値のみ貼り付け」を使わずに次の様な形式のやり方で値を反映させる様にされては如何でしょうか? Selection.Value = コピー元のセル.Value 尚、もしコピー元のセルが複数ある場合は、同様の考え方で次の様な形式となります。 Selection.Resize(コピー元のセル範囲.Rows.Count,コピー元のセル範囲.Columns.Count).Value = コピー元のセル範囲.Value
お礼
有難うございます。 なるほど、値の貼付けに拘る必要はありませんね。 値についてはValue値、プロパティ値の設定で代用できそうです。
補足
PasteSpecial における仕様という事で打開策をとるしかないのでしょうか。 数式や値においてはご教授頂いた方法で対応できそうですが、書式の貼付けでは各プロパティの複製までするのは大変そうです。 こちらは追加の質問というわけではないのですが、 質問では値の貼付けとしておりますが、PasteSpecialでウィンドウ番号1の表示範囲が切り替わる事に対応できれば他も同様と思い含めておりませんでしたが、値の貼付けや書式の貼付け、数式の貼付けなどを頻繁に行うために冒頭のコードで其々作成し、マクロのショートカットを設定しておりました。 しかし、ウィンドウを分けて作業を行っていたところ、本件の状態となり質問させて頂きました。 説明不足が有ったことお詫び申し上げます。 この質問においてPasteSpecial における表示が変わる問題に解決を見いだせなかった場合は、ご教授頂いた方法で打開策を取ろうかと思います。