• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルでセル参照後数値で張り付けて保存)

エクセルでセル参照後数値で張り付けて保存

このQ&Aのポイント
  • エクセルでセル参照後数値で張り付けて保存する方法について教えてください。
  • LOT Noと計算シートのLOT Noが同じなら入力表のE列の最下行に計算結果のセルの値を参照させたいです。
  • E列、F列に参照で入力された値を保存前に数値化しないと次のLOTの計算結果の時には空白になってしまいます。どうすればよいでしょうか?

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.4

エラーが起きないのであれば、 .Sheets("特性表").Range("C38").Value .Sheets("特性表").Range("H38").Value これらの値が空欄(Null)、もしくは、 MyRange.Offset(1, 0) MyRange.Offset(1, 1)が期待と異なる場所を指していることになります。 Sheets("入力表").の5列目の最下行(E1048576)をクリックし Ctrlキー+上矢印キーを押してみてください。 止まったところがデータの既に埋まった最下行かどうかがポイントです。 これが期待したセルではない つまり、E列のどこか途中に、 何かが埋まっているセルがあるのではないかと思います。

akira0723
質問者

お礼

本当にいつもながら感心と感謝です。 連休中にVBA講座(初級:3.5万円)を受講しましたが「マクロとは?」から始まって実践編に入らないまま終わりそうだったので、このまま帰れない、と質問したら「初級Part2か中級クラスを受講してください」と言われてむなしく帰宅。 <<改善提案賞>>を送りたいのですが。。。。

akira0723
質問者

補足

ご明察!!! 表の最終行から「END」「↓」で450行以下数行に姿を現しました。 最初(かなり前)にTESTで表を作ったときに式を適当に500行程度下に引っ張った名残でした。 このTEST表をそのまま使用し始めたようです。(当方が渡した) とにかく、便利になりました。 これまでは計算表は別ファイルの計算専用シートで3~12個の計算結果をメモして電卓で平均を出して入力表に打ち込んでいた(知りませんでした)ので手間とミス防止の両面で非常に信頼性と作業効率が向上しました。

その他の回答 (3)

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.3

計算表シートのJ15の値を入力表シートのE列最下行に複写し、 更に 計算表シートのJ20の値を入力表シートのF列最下行に複写する。 ということのようですので、次のようなコードになります。 なお、入力表シートの1行目に複写されることはない前提です。 余談かもしれませんが、 入力表シートのE列、F列に単に追記していくだけなので このマクロを誤って複数回実行してしまうと その回数だけ追記してしまいますよ。 私だったら、 計算表シートのどこかに埋まっている(かもしれない) LOT番号と入力表シートのB列?の最下行が 一致しているかどうかをチェックします。 Option Explicit Sub Sample3()    Dim MyRange As Range    With ThisWorkbook   Set MyRange = _    .Sheets("入力表").Cells(Rows.Count, 5).End(xlUp)   MyRange.Offset(1, 0).Value = .Sheets("計算表").Range("J15").Value   MyRange.Offset(1, 1).Value = .Sheets("計算表").Range("J20").Value  End With End Sub

akira0723
質問者

お礼

いつもお世話になっております。 さて朝から喜び勇んで試しているのですが、何故かうまくいきません。 ただし、エラー表示もなく、何も起こらないのですが。 色々試して(と言ってもシート名を変える程度しか思いつかないのですが) 何も起こらないでので昨夜試した Application.Goto Reference:=Worksheets("入力表").Columns("A"), Scroll:=True を追加してみたら入力表のA列に移動するのでマクロは動いているようです。 他のシートのE、F列にも何も転記されていません。 ダミーファイルではうまくいったのですが、何か確認すべきところご教授お願いします。 いつものことですがお手数をお掛けしてしまう事になり申し訳ありません。 Sub 計算表() Dim MyRange As Range With ThisWorkbook Set MyRange = _ .Sheets("入力表").Cells(Rows.Count, 5).End(xlUp) MyRange.Offset(1, 0).Value = .Sheets("特性表").Range("C38").Value MyRange.Offset(1, 1).Value = .Sheets("特性表").Range("H38").Value Application.Goto Reference:=Worksheets("入力表").Columns("A"), Scroll:=True End With End Sub

akira0723
質問者

補足

毎度毎度ありがとうございます。 今日はバタバタしていて会社では試せませんでしたので今自宅でダミーシートで試してみました。 バッチリ!!です。 また実行の回数だけ同じ結果が追加されることも確認しました。 そこで、計算シートに実行ボタンを作って、マクロ実行後入力シートに移動するように1行追加したらバッチリです。 J列以降の入力項目もあるので続けて作業できるのでご懸念はなくなりました。 また、元々A列より順に横に埋めていくのでE、F列だけが出っ張ると分かるので間違うことはありません。 明日実ファイルで確認後BAで締め切らせていただきます。

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.2

akira0723さんが直面している現況と課題が ポストされた文章から読み取ることができません。 >B列にLOT No、 >E列とF列には別シートの毎回同じセルを使用する計算表の >計算結果のセルの値を引っ張てきたいのです。 この記述と >E列、F列に参照で入力された値は >保存前に数値化しないと >次のLOTの計算結果の時には空白になってしまいます。 この記述から、以下をイメージします。 『計算表』シートは、 『LOT No』ごとの行(あるいは列)があるのではなく 何やら計算したい都度、 このシートに『LOT No』と必要な情報を埋めると、 X1セルとX2セルに特性Aと特性Bが計算される。 つまりワーキングシートだ。 他方、akira0723さんがポストした画像のような 『LOT No』ごとの特性A,Bの一覧がある。 これを『特性一覧』シートと仮に呼びます。 これらの予想が正しいとするとやりたいことは 『計算表』シートに必要事項を埋めボタンを押すと 『計算表』シートの『LOT No』で 『特性一覧』シートを検索し、 X1、X2セルの値を該当行のE列、F列に複写する。 該当行が無い場合は、 『特性一覧』シートの最終行に 『LOT No』、X1、X2セルの値を追記する。 という動作ではないでしょうか。 ならば、 『計算表』シートの『LOT No』、特性Aと特性Bのセル位置 を明らかにしてください。 これらの予想が違っているようなら 現況と期待をもう一度説明してみてください。 ※画像を添付して質問するテクニックはマスターしてほしいところです。 さらに、現況を説明する時には、現況だけを、 手作業で行っていることをシート名やセル番地を使い、 入力しているとか、目でxxを探しているとか、どこそこにコピペしているとか 具体的に書き込んだほうが伝わりやすいと思います。

akira0723
質問者

補足

お世話になります。 そうですね、確かに分かりにくい。 やりたいことはご推察程難しいことではないと思うのですが。 ロットが一致したらとか書いてしまったのが間違いでした。 単に入力表の最下行E列、F列のことでした。 Sheet1が入力表でSheet2が計算表です。 Sheet1には毎日最下行に新しいLOTのデータが入っていきます。 1日に1ロット(1行)しか入力することはありません。 その中のある特性(E列)にはSheet2で計算した値を入れたいのです。 Sheet2(計算表)では3回の測定データの計算結果がG15、H15、I15に出力されます。 その3回の平均値(J15)をSheet1の入力表の最下行のE列に持ってきたいのです。 更に特性Bの計算結果はSheet2のG20、H20、I20に、平均値がJ20に出力され、これはSheet1(入力表)のF列の最下行にもっていきたいのです。 つまり、添付図のLOT GHI789の特性Aの789、特性Bの321という値はSheet2(計算表)のJ15とJ20の参照です。(ここまではLOTの一致やVLOOKUPでもできるのですが、このままでは翌日の入力時に問題が出ます。 次のロットもSheet2(計算表)の同じ表(セル)を使用するので上記のJ15、J20に次のロットの結果が出ます。 これを前回の行の下(最下行)に持ってくる、これの繰り返し作業です。 この作業を繰り返すためには前回のE列の値を数値化しておかないとSheet2から当該ロットの数値がなくなると困ったことになります。 よって、1つのロットの入力作業が終わったらファイルを上書き保存する時にE列(J15の参照)、F列(J20の参照)を数値でコピペすればよいのですが、最下行だけをコピペする方法が分かりませんのでGIVE UPとなった次第です。 Sheet2の特定のセルの値をSheet1のE列の最下行に入れたい。 この方が分かりやすかったですか。

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.1

> シート全体を数値化するとE列の参照の式も空白に変わってしまう なぜ?でしょう。参照の結果が数値であれば、値貼り付けで数値になると思いますが…。 > 試しにやってみたら非常に時間がかかって使えないことが どれほどのデータがあってどれほど時間がかかったのでしょう。 > B列のLOT Noと計算シートに入力されたLOT Noが同じなら入力表のE列の最下行(最新データのセル)に計算結果のセルの値を参照させたいのです。 VLOOKUP関数を利用して参照させたのですか?

akira0723
質問者

お礼

早々のご回答ありがとうございました。 質問の内容が分かりにくくて申し訳ありませんでした。 >参照の結果が数値であれば、値貼り付けで数値になると思いますが…。 問題にしたのは、次の行の例えばVLOOKUPなりIF関数でロットを照合して産所したセルは良いのですが、その下の行が空白で張り付けられてしまいます。 あまりに初歩的な問題を書いてしまったために混乱させてしまいました。 #No2さんのご回答で無事解決しました。 お手数をおかけしました。