• ベストアンサー

エクセル もし、セルが空欄なら、その上のセルの値を入力する

エクセル2002を使用しています。 例えば、A列に順に数値が入っているのですが、ところどころ空欄です。 <こんな感じです。> 12 15 22 33 34 55 <ここまで> 数値は、連番ではありません。不規則です。約300行あります。 本当は、空欄の場所は一つ上のセル数値が入るのです。(連続して空欄になっているところも、一つ上の数値と同じ値が入るのです。) <上の例を当てはめると> 12 15 22 22 ← 33 34 34 ← 34 ← 55 <ここまで> こんな感じにしたいのです。 関数などで一つのセルに入力して、あとはフィルドラッグでコピーするなんていう便利な方法はありませんか? すでに入力している数値が消えないようにしたいのです。 よろしくお願いいたします。

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

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.6

とりあえず数値の範囲を選択 F5キーを押してセル選択で定数を選択(文字を除くなら数値のみチェック) これで空白のセルが除外されます。 ここでコピーして張り付ければいいかと...

saitama090
質問者

補足

関数を使わない方法をご提示していただきありがとうございました。 しかし、順に作業したのですが、 >これで空白のセルが除外されます。 ここまでは、できました。 >ここでコピーして張り付ければいいかと... この部分がわかりません。 空欄になっているセルは不規則ですので、手作業で作業することになるのでしょうか? それとも、簡単にコピーできるのでしょうか? F5キーの使い方は知らなかったので、今後活用したいと思います。 ありがとうございました。 できましたら、再度解説をいただけると嬉しいです。よろしくお願いいたします。

その他の回答 (12)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.13

まとめ (1)質問者の言うように、A列!で式を入れて自動複写のようなことは、絶対できません。 一回限りなら下記でできます(B)。 (2)例えばB列を一旦使い、 B1に =IF(A1<>"",A1,MAX($A$1:A1<>"",$A$1:A1,0)) と入れてSHIFT+CTRL+ENTERを押す。 そしてA列に値だけ複写する。それならできますが、A列を変えると 連動性はありません。 (3)VBAなら数行でできる。ロジックも簡単で、上行から順に考えて空白なら、上の行の値をとる。 連動性はない。その都度再実行が必要。 (2)のデータ例 1 1 2 2 3 3 3 3 3 6 6 6 8 8 8 2 2 (1)で書いた方法。自動ではないが F1:F131 - 2 - - 5 - 6 - - - 2 - ーは空白セル F2に=F1 このセルをCTRL+Cでコピー 空白セルの最初F4をクリック CTRLを押しながら、空白セルの F5,7,9,10、11,13セルをクリック 貼り付け 結果 1 1 2 2 2 5 5 6 6 6 6 2 2 となります。

saitama090
質問者

お礼

仮にB列を使うということが便利だとわかりました。 ありがとうございました。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.12

No.8です。 F列を処理したいのであれば、   For Each R In Range("A1", Range("A65536").End(xlUp)) の行を、   For Each R In Range("F1", Range("F65536").End(xlUp)) と2箇所修正してください。

saitama090
質問者

お礼

すみません。 大変助かりました。 今、マクロの初心者向け参考書を読み始めたところです。 勉強になりました。 ありがとうございました.

  • Ce_faci
  • ベストアンサー率36% (46/127)
回答No.11

NO1です ごめんなさい A1のところをB1に変えてください

saitama090
質問者

お礼

うまくできました。 ご親切にありがとうございました。

  • gyazae
  • ベストアンサー率40% (8/20)
回答No.10

ANo.7の者です。 私の環境(Excel2003)ではうまくいったのですが・・・ うまく再計算されていないのでしょうか。 B 列の途中に空欄があると、そのような状況になってしまうでしょうが。 ANo.6の方法が一番手っ取り早いかもしれませんね。 1.A4 に =A3 と入力 2.A4 をコピー 3.A 列を選択して、F5 -> セル選択 -> 空白セル -> OK 4.貼り付け

saitama090
質問者

お礼

大変すみませんでした。 私の入力ミスです。 教えていただいたB1の箇所を誤ってA1にしてしまっていました。 教えていただいた式は問題なく作動しました。 大変失礼しました。 また、F5キーのやり方についても、 4.貼り付け と書いていただいたので、恐る恐る貼り付けアイコンをポチッと押したら、すべてうまくいきました。すごい機能ですね。 ありがとうございました。

回答No.9

すいません。( > < ) ANo.5です。 間違ったまま投稿してしまいました。 =IF(A1="",#REF!,A1)ではありません。 1行目は =A1 で、2行目に =IF(A2="",A1,A2) を入れてあとは、これをコピペです・・・ これを1行目にコピーすると上の=IF(A1="",#REF!,A1)となってしまうので、それに気が付かずそのまま投稿してしまいました。 すいません。 #REF!はエラーですので・・・本当にすいませんでした。 ようするにANo.3さんと同じです。 でも、これだと2行入力しないのが続くと・・・という問題があるので =IF(A2="",B1,A2) そ、参照するのを同じ列の上の行の数字にしました。 これで、いくら入力しない行があっても大丈夫です。 m(_ _)m

saitama090
質問者

お礼

できました。 なるほどーと思いました。 ありがとうございました。 また、別の回答者の皆様にこの欄を借りてお詫びいたします。 後から、補足欄で2行入力しないのが続くとできませんと訴えましたが、B列の一つ上を参照している式に対し、私が入力ミスでA列の一つ上を参照するようにしてしまいました。 すみませんでした。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.8

マクロを作ってみました。 シートタブを右クリックして「コードの表示」を選択するとVBAの画面が出るので、右の画面に以下のマクロをコピーして貼り付け、F5キーを押して実行してください。 Sub FillBlank()   Dim R As Range   For Each R In Range("A1", Range("A65536").End(xlUp))     If R.Value = "" Then R.Value = R.Offset(-1, 0).Value   Next End Sub

saitama090
質問者

お礼

恐れ入ります。マクロまで作っていただいて。 ありがとうございます。 大変参考になりました。 勉強させていただきました。

saitama090
質問者

補足

貼り付けましたら出来ます。さすがマクロですね。 説明を省いた私のミスなのてすが、実際に作業する列は、F3からF322までです。 いただいたコードの For Each R In Range("A1", Range("A65536").End(xlUp)) のA1を勝手にF3にして貼り付けました。(勝手ですみません) すると、A列からF列まですべて同じように空欄がある場合は上の行をコピーするようになってしまいました。 AからE列まではコピーしないようにするには、どのようにするものでしょうか。 すみませんが、教えていただけるでしょうか。 よろしくお願いいたします。

  • gyazae
  • ベストアンサー率40% (8/20)
回答No.7

既に入力している数値が消えないようにする、というのは難しいですね。 上の例で考えると、 1. A4 に =A3 と入力 2. A4 を全ての空欄(A7, A8等)に対してコピペ という手順になるでしょうか。 ただ、これだと面倒なので、もし私がやるのであれば次の通りにします。 3. B1 に =A1 と入力 4. B2 に =IF(ISBLANK(A2), B1, A2) と入力 5. B2 を列の最後までコピペ(フィルドラッグ) 6. A 列を必要に応じて非表示化 以上、参考になれば。

saitama090
質問者

お礼

いろいろな関数があるのですね。 ISBLANKは種類としては見たことがありましたが、使ったことはありませんでした。 勉強になりました。

saitama090
質問者

補足

すばらしい方法だと思うのですが、A列に空欄が2行以上続くと、2行目以降が0になってしまいます。 どうしたらよいものなのでしょうか。 ありがとうございます。

回答No.5

もっとうまいやり方があるかもしれませんが、一例として・・・ 関数の入った表示される列と、空欄のある入力の列とに分ける。 これは、「すでに入力している数値が消えないようにしたい」という事の為の措置です。 ~例~ A列には空欄のある 12 15 22 33 34 55 を入力する B列には その結果 12 15 22 22 ← 33 34 34 ← 34 ← 55 と表示される為の関数を入力する。 その関数は =IF(A1="",#REF!,A1) こんな感じ これは、B列1行目に入力する関数 あとは、B列にこれを全てコピペすれば希望通りに表示されます。 印刷などする場合は、A列を非表示(折りたたんで)にして印刷すればOKです。 こんなしょぼいやり方じゃなくやれる方法があるかもしれませんが・・・書いておきます。

saitama090
質問者

お礼

これは全く初めて見るコード?です。 #REF!ですか。興味がわきました。 ありがとうございました。

saitama090
質問者

補足

B列に入力し、フィルドラッグでコピーしましたが、隣が空欄のセルですと、  #REF! と表示されてしまいます。 どうしたらよいのでしょうか?

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.4

#02です =IF(A2="",OFFSET(A2,-1,0),A2) の誤りでした。 なおOFFSET関数を使用したのは行削除を行ったときに、その行を参照している式が#REF!エラーとならないようにするためです。

saitama090
質問者

お礼

ありがとうございます。 行削除までは私も気がつかなかったのですが、確かにその可能性はあります。 お心遣い感謝いたします。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

A列にはA1から下にデータがあるものとします。 B1に  =A1 B2に  =IF(A2="",B1,A2) といれて、B2を下までフィルドラッグでコピーします。 これで、B列に隙間無く数字が入ったと思います。 次ぎに、B列をコピーし、A列に、メニューの編集で「形式を選択して貼り付け」で「値」を貼り付けます。 B列の式をけします。 これでいかがでしょう?

saitama090
質問者

お礼

出来ました。 なるほど、「一つ上」というコードがあるのではなく、一つ上のセルを指定して、ドラッグすれば適宜ずれていくのですね。 エクセルは初心者なもので、考え方まで教えていただき、ありがとうございました。 また、貼り付け方法も解説いただき、感謝いたします。

saitama090
質問者

補足

すばらしい方法だと思うのですが、A列に空欄が2行以上続くと、2行目以降が0になってしまいます。 どうしたらよいものなのでしょうか。 ありがとうございます。

関連するQ&A