web-dev-qa-db-ja.com

Excelで絶対セル参照を相対参照として一時的にコピーアンドペーストする方法は?

Excel(2007)で、絶対参照を含むセルの場合(例:$A$3)がコピーされ、絶対参照は同じままです。これは仕様によるものであり、絶対参照を使用する理由です。

問題-ただし、セルのブロック(絶対参照とおそらく相対参照も含む)をコピーしたい場合があります。新しいブロックに対して正しくシフトされた絶対参照を使用してそれらを貼り付けます。つまり、絶対参照はコピー時に相対参照のように動作しますが、最終的にコピーされた結果では絶対参照のままにします。

例-スクリーンショットの例では、ブロックA2:B3を下にコピーします。コピーするときは、基本的にB3(=$A$3)左側のセルを参照するように変更されました。たとえば、=$A$11スクリーンショットの下部にあるように、B11にコピーした場合。

example in Excel

回避策-これを行うための回避策を見つけました:

  1. ワークシート全体のコピーを作成し(Ctrlキーを押しながらワークシートタブを新しい場所にドラッグ)、
  2. 次にcutting(ctrl-X)新しいワークシートから関連するセルのブロック
  3. 元のワークシートに(ctrl-v)を貼り付けます。
  4. 最後に、新しい一時ワークシートを削除します(ワークシートタブを右クリックして削除します)。

質問-しかし、これは私の好みには多すぎるアクションです。より簡単な方法はありますか(おそらく、[形式を選択して貼り付け]非表示オプション)。

5
Rabarberski

そのためのマクロをいつでも書いてみることができます。 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 [〜#〜]そして新しいワークシートにコピーします

次に、すべてのセルが、新しく改良されたシートで希望する再指定された絶対値にリンクされていることに気付くでしょう。

幸運を :)

1
Johnson Bear

私は重複のためのworkaroudを見つけました。

問題:開始セルB2からの選択が重複し、開始セルP2に配置されます。

  1. 新しいシートを作成します。
  2. 元のシートから複製したいものをすべてコピーして、同じ開始セルの新しいシートに貼り付けます(選択した長方形がB2から始まる場合は、新しいシートB2に貼り付けます)
  3. その選択範囲を右側の新しい開始セルの新しいシートに移動します(開始セルP2に移動します)。
  4. 選択範囲をコピーします。
  5. 右側の新しい開始セル(P2)の元のシートに選択範囲を貼り付けます。
1
Juraj

この問題に取り組む1つの方法は、相対参照のみを使用し、以下の手順に従って、絶対参照のように扱う方法で相対参照をコピーすることです。この回答のソースには、 スタックオーバーフロー および このページ が含まれます。

  1. Excelを数式表示モードにします。これを行う最も簡単な方法は、Ctrl + `を押すことです(その文字は「後方アポストロフィ」であり、通常は〜(チルダ)と同じキー上にあります。
  2. コピーする範囲を選択します。
  3. Ctrl + Cを押します
  4. Windowsのメモ帳を起動します
  5. Ctrl + Vを押して、コピーしたデータをメモ帳に貼り付けます
  6. メモ帳で、Ctrl + Aを押してからCtrl + Cを押してテキストをコピーします(メモ帳でCtrl + Cを実行する前に、Excelに戻って既存の選択をクリアする必要がある場合がありました)
  7. Excelをアクティブにして、数式を貼り付ける左上のセルをアクティブにします。また、コピー先のシートが数式表示モードになっていることを確認してください。
  8. Ctrl + Vを押して貼り付けます。
  9. Ctrl + `を押して、数式表示モードを切り替えます。
1
Danny A

私も同様の問題を抱えていました。何千もの数式を含む非常に大きなスプレッドシートがあり、列の絶対値を含むものと、列と行の両方を含むものがあります。新しいスプレッドシートで複製を作成するのではなく、同じワークシートで並べて複製したかったのです。すべての数式をコピーして、Excelで絶対参照を相対参照として処理する必要がありました。

数式を使用してセル範囲の左側に列を挿入すると、Excelはすべてのアドレスを相対的なものとして変更します。

  1. 元のシートの横に新しいシートを作成します。これが最終製品のシートになります。

  2. 元のシートに移動します。数式で列を強調表示します。コピーします。

  3. 新しいシートに移動し、同じ列を強調表示します。ペースト。

  4. 元のシートに移動します。範囲が広いので、列数を挿入します。たとえば、私の範囲は20列幅です。そこで、範囲の左側に20列を挿入し、すべての数式を移動して、すべての参照を相対的なものであるかのように変更しました。

  5. 新しい列を強調表示します。コピーします。

  6. 新しいシートに移動します。新しいシートのまったく同じ列を強調表示します。ペースト。

0
smokie

新しいワークシートから切り取って貼り付ける手順を実行しようとすると、相対参照を含む新しい場所にコピーするときに、数式内のすべての参照が固定されたままであることがわかります。実際、Excel 2010では、数式を切り取って貼り付けた後、最初の行と列に古いシートへのリンクが含まれていますが、他の行と列はバグのように見える新しいシートを参照していますか?

すべての参照を同じに保ちながら数式のブロックをコピーする場合は、Ctrl + `(バッククォート)を押して数式を表示し、クリップボードの作業ウィンドウのアイコンをクリックしてコピーして貼り付けることができます(のクリップボードセクションにある小さな矢印を使用してアクティブにしますホームタブ)。これが達成しようとしていることではない場合は、簡単な例が役立ちます。

0
lori_m

以下は、独自のマクロを作成するよりも複雑さが少なく、最終結果を達成します。

はい、絶対セル参照を使用していないことはわかっていますが、OPの例に示されているように、それは必要ありません。

コピーする範囲を選択します

enter image description here

次に、[貼り付け]のドロップダウンメニューから、次に示すように[数式]オプションを選択します。

enter image description here

これは私によってテストされ、Excel2007および2010で動作します。お楽しみください:)

0
Darius

私はこのマクロ(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
0
Brian Low

部分的な回避策を見つけました。 OPでのコピーされたワークシートとカット範囲の回避策ほど一般的ではありませんが、何かをすばやくコピーする必要がある場合は、はるかに高速になる可能性があります。ここで私たち全員が本当に望んでいるのは、コピー中に絶対参照を一時的に無効にする方法です。貼り付け時にaltを押したままにして、すべての$を無視できるようにするオプションがあります。これは、$がなかったためですが、実際には、貼り付けが完了するとそのままになります。

したがって、それを念頭に置いて、絶対参照の更新を許可しながらセルのブロックをコピーするには、次のようにします。

  1. コピーするセルの範囲を強調表示します
  2. $を有効な参照にする文字で「すべて置換」します。

列の総数が多いため、XFD#が最後の有効なセル参照です。生成された新しい参照がセル範囲内の実際の参照と重複していないことを確認してください。重複していない場合、その参照は最後の手順で壊れます。コピーするセルのブロックで参照することのない列から文字を選択すると、数式を壊さないようになります。例として、$を 'h'に置き換えた場合、$ b $ 42はhbh42になります。これは、コピーできる有効な参照であり、自動的に更新されます。

  1. 最後に、一時文字(上記の例では「h」)を$に変換し直すと、完了です。

$を2文字に置き換えることもできますが、それ自体に多くの問題があるため、実際の参照と重ならない1文字の置き換えを見つける方が簡単です。

0
kindlin