Excel(2007)で、絶対参照を含むセルの場合(例:$A$3
)がコピーされ、絶対参照は同じままです。これは仕様によるものであり、絶対参照を使用する理由です。
問題-ただし、セルのブロック(絶対参照とおそらく相対参照も含む)をコピーしたい場合があります。新しいブロックに対して正しくシフトされた絶対参照を使用してそれらを貼り付けます。つまり、絶対参照はコピー時に相対参照のように動作しますが、最終的にコピーされた結果では絶対参照のままにします。
例-スクリーンショットの例では、ブロックA2:B3を下にコピーします。コピーするときは、基本的にB3(=$A$3
)左側のセルを参照するように変更されました。たとえば、=$A$11
スクリーンショットの下部にあるように、B11にコピーした場合。
回避策-これを行うための回避策を見つけました:
質問-しかし、これは私の好みには多すぎるアクションです。より簡単な方法はありますか(おそらく、[形式を選択して貼り付け]非表示オプション)。
そのためのマクロをいつでも書いてみることができます。 Excelには、使用できる非常に優れたマクロ記録ツールがあり、必要に応じて実行するだけです(もちろん、最初にプログラムに変更を加えた場合)。
dim firstLetter as String
dim secondLetter as String
dim firstNumber as integer
dim secondNumber as integer
dim firstReference as string
dim secondReference as string
dim contents as string
firstLetter = inputbox("Where's the first column? (it's letter)")
firstNumber = inputbox("And what's the first row? (just the number)")
secondLetter = inputbox("What column is this going to be moved to? (the letter only.)")
secondNumber = inputbox("And what row? (the number.)")
contents = range(firstletter + cstr(firstnumber)).formula
range(secondletter + cstr(secondnumber)).formula = contents
私が使用した回避策は次のとおりです。
貼り付けたいセルのブロックを作成します。これには、すべての絶対参照が含まれます(この例では、「元のブロック」とラベル付けされたブロック)
次に、好きなスタイルの形式でコピーして貼り付けることにより、最終的に見たいワークシートを作成します。したがって、例を続けるには、「元のブロック」を使用して、その10倍下にコピーします。これが最終的なワークシートのレイアウトになります。 (元のブロックのセルを参照する絶対セルでも同じ問題が発生することに気付くでしょう。)
そのワークシート全体を取り出して強調表示し、[〜#〜] cut [〜#〜]そして新しいワークシートにコピーします
次に、すべてのセルが、新しく改良されたシートで希望する再指定された絶対値にリンクされていることに気付くでしょう。
幸運を :)
私は重複のためのworkaroudを見つけました。
問題:開始セルB2からの選択が重複し、開始セルP2に配置されます。
この問題に取り組む1つの方法は、相対参照のみを使用し、以下の手順に従って、絶対参照のように扱う方法で相対参照をコピーすることです。この回答のソースには、 スタックオーバーフロー および このページ が含まれます。
私も同様の問題を抱えていました。何千もの数式を含む非常に大きなスプレッドシートがあり、列の絶対値を含むものと、列と行の両方を含むものがあります。新しいスプレッドシートで複製を作成するのではなく、同じワークシートで並べて複製したかったのです。すべての数式をコピーして、Excelで絶対参照を相対参照として処理する必要がありました。
数式を使用してセル範囲の左側に列を挿入すると、Excelはすべてのアドレスを相対的なものとして変更します。
元のシートの横に新しいシートを作成します。これが最終製品のシートになります。
元のシートに移動します。数式で列を強調表示します。コピーします。
新しいシートに移動し、同じ列を強調表示します。ペースト。
元のシートに移動します。範囲が広いので、列数を挿入します。たとえば、私の範囲は20列幅です。そこで、範囲の左側に20列を挿入し、すべての数式を移動して、すべての参照を相対的なものであるかのように変更しました。
新しい列を強調表示します。コピーします。
新しいシートに移動します。新しいシートのまったく同じ列を強調表示します。ペースト。
新しいワークシートから切り取って貼り付ける手順を実行しようとすると、相対参照を含む新しい場所にコピーするときに、数式内のすべての参照が固定されたままであることがわかります。実際、Excel 2010では、数式を切り取って貼り付けた後、最初の行と列に古いシートへのリンクが含まれていますが、他の行と列はバグのように見える新しいシートを参照していますか?
すべての参照を同じに保ちながら数式のブロックをコピーする場合は、Ctrl + `(バッククォート)を押して数式を表示し、クリップボードの作業ウィンドウのアイコンをクリックしてコピーして貼り付けることができます(のクリップボードセクションにある小さな矢印を使用してアクティブにしますホームタブ)。これが達成しようとしていることではない場合は、簡単な例が役立ちます。
以下は、独自のマクロを作成するよりも複雑さが少なく、最終結果を達成します。
はい、絶対セル参照を使用していないことはわかっていますが、OPの例に示されているように、それは必要ありません。
コピーする範囲を選択します
次に、[貼り付け]のドロップダウンメニューから、次に示すように[数式]オプションを選択します。
これは私によってテストされ、Excel2007および2010で動作します。お楽しみください:)
私はこのマクロ(Personal.xlsbに保存され、ショートカットキーにバインドされている)を試し、コピーする前に参照を絶対に変換しようとしています。
Sub ToAbsolute()
Dim c As Variant
Application.ScreenUpdating = False
For Each c In Selection
If (Not IsEmpty(c.Value)) Then
c.Value = Application.ConvertFormula(c.Formula, xlA1, , xlAbsolute)
End If
Next c
Application.ScreenUpdating = True
End Sub
Sub ToRelative()
Dim c As Variant
Application.ScreenUpdating = False
For Each c In Selection
If (Not IsEmpty(c.Value)) Then
c.Value = Application.ConvertFormula(c.Formula, xlA1, , xlRelative, c)
End If
Next c
Application.ScreenUpdating = True
End Sub
部分的な回避策を見つけました。 OPでのコピーされたワークシートとカット範囲の回避策ほど一般的ではありませんが、何かをすばやくコピーする必要がある場合は、はるかに高速になる可能性があります。ここで私たち全員が本当に望んでいるのは、コピー中に絶対参照を一時的に無効にする方法です。貼り付け時にaltを押したままにして、すべての$を無視できるようにするオプションがあります。これは、$がなかったためですが、実際には、貼り付けが完了するとそのままになります。
したがって、それを念頭に置いて、絶対参照の更新を許可しながらセルのブロックをコピーするには、次のようにします。
列の総数が多いため、XFD#が最後の有効なセル参照です。生成された新しい参照がセル範囲内の実際の参照と重複していないことを確認してください。重複していない場合、その参照は最後の手順で壊れます。コピーするセルのブロックで参照することのない列から文字を選択すると、数式を壊さないようになります。例として、$を 'h'に置き換えた場合、$ b $ 42はhbh42になります。これは、コピーできる有効な参照であり、自動的に更新されます。
$を2文字に置き換えることもできますが、それ自体に多くの問題があるため、実際の参照と重ならない1文字の置き換えを見つける方が簡単です。