プロが教える店舗&オフィスのセキュリティ対策術

エクセル2002を使用しています。

例えば、A列に順に数値が入っているのですが、ところどころ空欄です。
<こんな感じです。>
12
15
22

33
34


55
<ここまで>

数値は、連番ではありません。不規則です。約300行あります。
本当は、空欄の場所は一つ上のセル数値が入るのです。(連続して空欄になっているところも、一つ上の数値と同じ値が入るのです。)
<上の例を当てはめると>
12
15
22
22 ←
33
34
34 ←
34 ←
55
<ここまで>

こんな感じにしたいのです。
関数などで一つのセルに入力して、あとはフィルドラッグでコピーするなんていう便利な方法はありませんか?
すでに入力している数値が消えないようにしたいのです。

よろしくお願いいたします。

A 回答 (13件中1~10件)

とりあえず数値の範囲を選択


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

この回答への補足

関数を使わない方法をご提示していただきありがとうございました。

しかし、順に作業したのですが、
>これで空白のセルが除外されます。
ここまでは、できました。

>ここでコピーして張り付ければいいかと...
この部分がわかりません。

空欄になっているセルは不規則ですので、手作業で作業することになるのでしょうか?

それとも、簡単にコピーできるのでしょうか?

F5キーの使い方は知らなかったので、今後活用したいと思います。

ありがとうございました。
できましたら、再度解説をいただけると嬉しいです。よろしくお願いいたします。

補足日時:2007/01/24 11:54
    • good
    • 9

まとめ


(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)のデータ例
11
22
33
3
3
3
66
6
88
8
22
(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
となります。
    • good
    • 1
この回答へのお礼

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

ありがとうございました。

お礼日時:2007/01/25 08:49

No.8です。



F列を処理したいのであれば、
  For Each R In Range("A1", Range("A65536").End(xlUp))
の行を、
  For Each R In Range("F1", Range("F65536").End(xlUp))
と2箇所修正してください。
    • good
    • 1
この回答へのお礼

すみません。

大変助かりました。


今、マクロの初心者向け参考書を読み始めたところです。

勉強になりました。

ありがとうございました.

お礼日時:2007/01/25 08:46

NO1です


ごめんなさい
A1のところをB1に変えてください
    • good
    • 0
この回答へのお礼

うまくできました。

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

お礼日時:2007/01/25 08:30

ANo.7の者です。


私の環境(Excel2003)ではうまくいったのですが・・・
うまく再計算されていないのでしょうか。
B 列の途中に空欄があると、そのような状況になってしまうでしょうが。

ANo.6の方法が一番手っ取り早いかもしれませんね。

1.A4 に =A3 と入力
2.A4 をコピー
3.A 列を選択して、F5 -> セル選択 -> 空白セル -> OK
4.貼り付け
    • good
    • 1
この回答へのお礼

大変すみませんでした。

私の入力ミスです。

教えていただいたB1の箇所を誤ってA1にしてしまっていました。

教えていただいた式は問題なく作動しました。
大変失礼しました。

また、F5キーのやり方についても、
4.貼り付け
と書いていただいたので、恐る恐る貼り付けアイコンをポチッと押したら、すべてうまくいきました。すごい機能ですね。

ありがとうございました。

お礼日時:2007/01/25 08:30

すいません。

( > < )
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
    • good
    • 1
この回答へのお礼

できました。

なるほどーと思いました。
ありがとうございました。

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

すみませんでした。

お礼日時:2007/01/24 14:41

マクロを作ってみました。


シートタブを右クリックして「コードの表示」を選択すると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

この回答への補足

貼り付けましたら出来ます。さすがマクロですね。

説明を省いた私のミスなのてすが、実際に作業する列は、F3からF322までです。

いただいたコードの
For Each R In Range("A1", Range("A65536").End(xlUp))
のA1を勝手にF3にして貼り付けました。(勝手ですみません)
すると、A列からF列まですべて同じように空欄がある場合は上の行をコピーするようになってしまいました。

AからE列まではコピーしないようにするには、どのようにするものでしょうか。

すみませんが、教えていただけるでしょうか。
よろしくお願いいたします。

補足日時:2007/01/24 14:15
    • good
    • 3
この回答へのお礼

恐れ入ります。マクロまで作っていただいて。

ありがとうございます。
大変参考になりました。
勉強させていただきました。

お礼日時:2007/01/24 12:04

既に入力している数値が消えないようにする、というのは難しいですね。


上の例で考えると、

1. A4 に =A3 と入力
2. A4 を全ての空欄(A7, A8等)に対してコピペ

という手順になるでしょうか。
ただ、これだと面倒なので、もし私がやるのであれば次の通りにします。

3. B1 に =A1 と入力
4. B2 に =IF(ISBLANK(A2), B1, A2) と入力
5. B2 を列の最後までコピペ(フィルドラッグ)
6. A 列を必要に応じて非表示化

以上、参考になれば。

この回答への補足

すばらしい方法だと思うのですが、A列に空欄が2行以上続くと、2行目以降が0になってしまいます。

どうしたらよいものなのでしょうか。

ありがとうございます。

補足日時:2007/01/24 14:08
    • good
    • 0
この回答へのお礼

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

勉強になりました。

お礼日時:2007/01/24 12:00

もっとうまいやり方があるかもしれませんが、一例として・・・



関数の入った表示される列と、空欄のある入力の列とに分ける。
これは、「すでに入力している数値が消えないようにしたい」という事の為の措置です。
~例~
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です。

こんなしょぼいやり方じゃなくやれる方法があるかもしれませんが・・・書いておきます。

この回答への補足

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

どうしたらよいのでしょうか?

補足日時:2007/01/24 14:00
    • good
    • 0
この回答へのお礼

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

ありがとうございました。

お礼日時:2007/01/24 11:52

#02です


=IF(A2="",OFFSET(A2,-1,0),A2)
の誤りでした。

なおOFFSET関数を使用したのは行削除を行ったときに、その行を参照している式が#REF!エラーとならないようにするためです。
    • good
    • 1
この回答へのお礼

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

お礼日時:2007/01/24 11:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A