• ベストアンサー

マクロで移動したら、元データの参照が値に

マクロで移動したら、元データの参照が値に エクセル2010を使っています。 一日分のデータ AL3~AZ98 の 96行の データがあります。 この部分は他セルを参照しています。 ボタンを押すとこの一日分のデータがBC3~BQ93にそのままコピーされ更にこの部分にあったデータはまるごと、BC99~BQ194に移動します、以降データが追加されればこのまま下に増えていくようなコードを教えて頂きました。 以下の様なものです。 Range("AL3:AZ98").Copy Range("BC3:BQ98").Insert shift:=xlShiftDown Application.CutCopyMode = False 現在、データの移動は上手く行っているですが、他セルを参照している元データの部分 AL3~AZ98のが値に書き換えられてしまいます。 これは、どこが原因なのでしょうか? 詳しい方、教えて頂けませんか? よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

こんにちは。 #1の回答者です。 一度目・二度目というのは、クリックしたという意味でしょうか? >何故かBC101に一行のみ貼り付けられる状態なのです。 なにしろ、画面を大きく使っているようなので、データの確認が容易ではありませんから、コードの問題よりも、まず、マクロ実行中に、物理的なデータの移動を確かめてみないとわからないような気がします。 物理的というのは、目で見て、正しい位置に、その都度、データのあるなしの問題だということです。 左端のデータの移動からすれば、 BC3 -> BC99 AL3 -> BC3 ↑ ここのデータが、BC3再び出現するわけでしょうけれども、それが正しく実行されているか、ということです。 短いコードなので、ふたつのCopyメソッドがあるようですから、各々、その一つを実行する前に、その元のデータが、どうなっているか、確認するしかないのではありませんか? コードの問題ではないかと言われても、これほど単純なものに、エラーが発生するとは思えません。おそらく、単純なミスだと思います。何か、別の事象でもなければ、回答者側からは、今の段階では分かりません。もちろん、Insert メソッドを入れていれば、この限りではありませんが……。 なお、特に、「With セル範囲~End With」でも組んでいなければ、以下のようになります。 Rangeの中に、Rangeを入れるとコードの読み方がややこしくなってしまいます。 Range("BC3", Cells(Rows.Count, "BQ").End(xlUp)).Copy Destination:=Range("BC99")

gekikaraou
質問者

お礼

回答いただきありがとうございます。 原因が判明しました。 前回入力されていた AX AY AZ 列を今回は 空白にしていたのですが、それが原因でした。 参照元にデータを入れたところ、正常にコピーされましたので、マクロの範囲をAWまでに変更しました。 お騒がせしまして、すいませんでした。

gekikaraou
質問者

補足

【最終投稿】こちら 使ったコードは Sub StoreData()   Range(Range("bc3"), Cells(Rows.Count, "bq").End(xlUp)).Copy Destination:=Range("bc99")   Range("al3:az98").Copy   Range("bc3").PasteSpecial xlPasteValues End Sub でした。 AZまでをAWまでにしたら、正常に動作しています。

その他の回答 (2)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

>現在、データの移動は上手く行っているですが、他セルを参照している元データの部分 AL3~AZ98のが値に書き換えられてしまいます。 提示されたコードは、単純に元データをコピーして、コピー先に貼り付るような操作ですので、元データを「値」に変換するようなコードが含まれていません。 本当に数式が値に変換されるなら、提示されたコードの前後に元データを値に変換するコードが含まれていると思います。 VBEとエクセルシートを両方表示しておいて、F8キーで1ステップずつコードを実行して、数式が値に変換される部分を確認してみてください。

回答No.1

こんにちは。 >これは、どこが原因なのでしょうか? 数式は、相対参照になっているからではないのでしょうか。 でも、それ以上に、前回教わったコードを使わなかったのが原因だと思います。 >教えて頂きました というけれども、そのコードと、前回の回答(#8539232)とは違います。 貼り付けさせている内容に、参照を活かすとなれば、とたんにコードのレベルは上がります。 一体、どういう貼り付けをしたいのか、なぜ、前回の回答とは違うコードにしたのか、教そわったままにコードを書いていない以上、その理由が分からない限りは、「A」という回答をしたのに、「B」という反応をするのでは、同じような質問を繰り返すだけだと思います。 前回の回答にも出ていたように、SpecialCellsメソッドで、Value(値)は、なぜいけなかったのですか?

gekikaraou
質問者

お礼

くわしく説明しますと Sub ボタン4_Click()   Range(Range("bc3"), Cells(Rows.Count, "bq").End(xlUp)).Copy Destination:=Range("bc99")   Range("al3:az98").Copy   Range("bc3").PasteSpecial xlPasteValues End Sub と言うコードで実行すると、一度目のコピーペーストはOKなんですが、二度目のBC99に貼るつけられるはずのBC3からの物が、何故かBC101に一行のみ貼り付けられる状態なのです。 間違いがあるといけないので、新しくシートを作ってやり直してみたけれど同じ結果です。

gekikaraou
質問者

補足

いえ、絶対参照とか相対参照でもないようです。 試しにやってみましたが、絶対参照も書き換えられて値に変化しました。 それと、Aと言う回答は採用していません。 前回の回答Aは、2回目以降の貼り付けが上手く行かないからです。 ですから、一回目、二回目と移動自体は上手く行っているこのコードで問題点を質問したまでです。

関連するQ&A

専門家に質問してみよう