はじめての親子ハイキングに挑戦!! >>

こちらには困ったときにいつもお世話になっております。
今回もよろしくお願いいたします。

EXCEL2002にて、セルが空だったら一つ上のセルを自動入力するようにしたいのです。状況といたしましては、ある個人情報管理アプリケーションが、吐き出すCSVファイルがあります。それが、困ったことに一人の人に複数の情報がある場合、個人情報ナンバーを省略します。わかりずらいと思いますので、以下の表をご覧ください。

個人情報ID 電話番号
0001     01-2345-1111
0002     01-2345-2222
        01-2345-2223
0003     01-2345-3333
        01-2345-3334
        01-2345-3335
        01-2345-3336
0004     01-2345-4444

以上のような表になります。そこで、「0002」の下の空のセルにも0002。「0003」の下の3つの空のセルすべてに0003を自動的に入力できるようにしたいのです。各々コピーしていけば何とか埋まるのですが、データ量が多くかなり時間がかかってしまいます。

解決方法をご存知の方がいらっしゃいましたら、お力添えの程、よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (5件)

こんにちは



・A列の対象範囲を選択
・編集 ジャンプ セルの選択 「空白セル」にチェック
・数式バーに =An(注) と入力後
 [Ctrl]を押したまま[Enter] で入力確定

セル行(n) はアクティブセルの直上セル行値です
 対象セル(空白セル)が選択された状態で1箇所だけ
 反転していないセルがアクティブセルです。
例えば以下の場合
 A4がアクティブセルになっている筈なので =A3 と
 なります。

   A       B
1 個人情報ID 電話番号
2 0001     01-2345-1111
3 0002     01-2345-2222
4         01-2345-2223
5 0003     01-2345-3333
6         01-2345-3334
7         01-2345-3335
8         01-2345-3336
9 0004     01-2345-4444
    • good
    • 9
この回答へのお礼

ご回答頂きまして、ありがとうございました。
大変勉強になりました。今後も何かありましたら、
よろしくお願いいたします。

お礼日時:2002/11/07 13:44

私は#2のご回答がスマートと思います。


#2のご回答の方式でやっていることが理解が難しいかもしれないので、私なりの別説明を加えてみます。決してご回答者のご説明が判り難いというのではありませんのでご理解をお願いします。
いま例えばA1に1、A4に2、A6に3が入っていて、
A2,A3、A5、A7は空白とします。
空白セルに直前セルの値を順次セットしたいわけです。
(1)CTRLキーを押しつつセルをクリックすると、飛び離れたセルを選択出来ることをご存知でしょうか。
それでA2,A3、A5、A7をクリックします。
(2)アクチブセルはA7になっていますが、CTRLキーを押したままA2をクリックします。これでA2がアクチブセルに
なります。
(3)A2セルに数式バーから=A1をいれます。
(4)指定した(1)のセル全部に式を(相対的に)複写するためCTRLキーを押しながらEnterキーを押します。
CTRLキーを押してないとA2セルにしか式が入りません。
するとA2,A3、A5、A7に式が複写されます。
(5)(1)でセルを1つづつクリックするのは、数が
多いと大変なので、編集-ジャンプ-セル選択-空白セル-OKで空白セルを自動的に全部探す機能を(1)の段階で使うのです。
(6)すなわちa.空白条件の飛び飛びのセルを全て1度に選択する.
b.選択したセル全部に相対的に変化させた式を設定する機能(CTRL+ENTER)の2つが使われています。
    • good
    • 3
この回答へのお礼

ご回答頂きまして、ありがとうございました。
大変勉強になりました。今後も何かありましたら、
よろしくお願いいたします。

お礼日時:2002/11/07 13:41

初めまして。

サンプルマクロを作ってみました。下記のコードをコピー&ペーストするだけで、他の作業を(#1・#2のような)せずに貴方様の思い通りの動作を実行させることができます。下記の様に操作してみて下さい。

1.データの入っているブックを開く。
2.Sheet1にコマンドボタンを1個配置する。
 ・ファイルメニューにマウスポインターをあわせて右クリックし、出てき  たプルダウンメニューのVisual Basicをクリックする。
 ・出てきたツールバーの右から3番目(コントロールツールボックス)をク  リックし、コントロールツールボックスの一番右側の上から2番のコマ  ンドボタンをクリックし、シートの適当な位置でクリックする。
 ・ツールバーの2番目(デザインモード)のボタンが押された状態になって  いたらそのボタンをクリックしてOFFの状態にする。
3.ALT+F11を押してVBE画面を立ち上げ、VBAProjectと書いてある下のSheet1の部分にマウスポインターをあわせてダブルクリックし、右側の白い部分に下記のコードをコピー・ペーストする。
4.ALT+F11を押してシート1の画面に戻り、データを入力後コマンドボタンを押す。

Private Sub CommandButton1_Click()

For i = 2 to Cells(Rows.Count,1).end(xlUp).Row
If cells(i,1).value = "" then
Cells(i,1).Value = Cells(i,1).Offset(-1,0).Value
next i 

お試しになってみて下さい。 
    • good
    • 0
この回答へのお礼

ご回答頂きまして、ありがとうございました。
大変勉強になりました。今後も何かありましたら、
よろしくお願いいたします。

お礼日時:2002/11/07 13:43

VBAですが・・・



1、[Alt]+[F11]を押す。VisialBasicEditerに変更されます。
2、左上にプロジェクトと書いてある中に、
   VBAProject(現在のブック名)
     └Microsoft Excel Objects
        ├Sheet1
         ・・・
        └ThisWorkbook
  とあると思うので、ThisWorkBookをダブルクリック
3.以下のコードを貼り付ける
***************************この下から*****************************
Sub Data_Chk()
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If (Cells(i, 1) = "") Then
Cells(i, 1) = Cells(i - 1, 1)
End If
Next i
End Sub
***************************この上まで***************************
4.[Alt]+[F11]を押す。Excelに戻ります。
5.コメントを挿入したいセルを選択する。
6.「ツール」→「マクロ」→「マクロ」→「ThisWorkbook.Data_Chk」を選択し、実行

いつも同じブックで処理を行うならば、上の方法でできます。
違うブックの場合、個人マクロとして登録する方法もありますので、分からなければ、補足してください。
うまくいかないときにも、補足していただければ、私のわかる範囲で回答します。
    • good
    • 1
この回答へのお礼

ご回答頂きまして、ありがとうございました。
大変勉強になりました。今後も何かありましたら、
よろしくお願いいたします。

お礼日時:2002/11/07 13:44

IF分を使えばできます。


やり方は色々ありますが
例えば、上記例題の場合(個人情報IDがA1の場合)
01-2345-1111の右のセル(C2)に
=IF(A2<>"",A2,C1)という式を書けばOKです。
後はC1のセルをそのまま下にコピーすれば思い通りのデータができます。
Cにできたデータを個人情報IDへコピーすればいいと思いますが
    • good
    • 8
この回答へのお礼

ご回答頂きまして、ありがとうございました。
大変勉強になりました。今後も何かありましたら、
よろしくお願いいたします。

お礼日時:2002/11/07 13:44

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルで上の行の値を自動的にコピーする

どなたか教えて欲しいのですが

大阪営業所
 (空白)
 (空白)
南大阪店
 (空白)
東大阪営業所
 (空白)
 (空白)
 (空白)
以下同様のパターンの表があった場合、
現在(空白)の部分に前に表示されていた値を表示したいのです。
大阪営業所
大阪営業所 
大阪営業所 
南大阪店
南大阪店 
東大阪営業所
東大阪営業所

こんな風にしたいのですが関数を使って出来ますか?
よい方法があれば教えてください。

Aベストアンサー

こんにちは。

挙げられてる例がA列だとして、
データの範囲(空白を含む)であるセルA1~A9を選択します。
CTRLキー+ G を押します。
「ジャンプ」のダイアログが出ますんで、セル選択を押します。
「空白セル」をチェックして、「OK」ボタンを押します。

空白セルだけ選択された状態になりますので、そのままの状態で
=A1 と式を入力し、 CTRLキー+ENTER として確定します。

これで、空白だったセル全体に一行上のセルと同じ内容が入りますので、
そのままでもいいですし値のコピー貼り付けなどで確定されるのも良いでしょう。

では(^^♪

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

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

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

33
34


55
<ここまで>

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

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

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

Aベストアンサー

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

Q【Excel】【VBA】空白のセルに上のデータを入力する方法

  A  B    C
1 山田 地下鉄  160 
2    地下鉄  150
3    タクシー 1120
4    地下鉄  150
5 鈴木 地下鉄  210
6    タクシー 5220

上記のようなデータがあり、VBAで別シートに
A2~A4までA1の山田が、A6にはA5の鈴木が
入った形でコピーしたいのですが、実現可能でしょうか?
よろしくお願いいたします。

Aベストアンサー

Dim i As Integer
Dim S As String
S = ""
For i = 1 To Range("B" & Rows.Count).End(xlUp).Row
If Cells(i, 1).Value = "" Then
Cells(i, 1).Value = S
Else
S = Cells(i, 1).Value
End If
Next i

Qエクセル2000で常に1つ上のセルを参照する。

出来るのでしたら教えてください。
質問はタイトルの通りです。
最初はA18のセルに=A17などしていましたが、
行の削除、コピーなどを行なうことがあり、
ちょっと困ってます。
どうか宜しくお願いします

Aベストアンサー

A18に入力する式を、=A17 の代わりに

 =OFFSET(A18,-1,0)

とすれば、セルA17を削除してもエラーは出ません。

こういう意味の質問だったでしょうか。

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

Qエクセルで条件に一致したセルの隣のセルを取得したい

下のような「得点」という名前のシートがあります。
(「田中」のセルがA1です。)

 [ 田中 ][ 10 ][ 200 ]
 [ 山田 ][ 21 ][ 150 ]
 [ 佐藤 ][ 76 ][ 250 ]
 [ 鈴木 ][ 53 ][ 350 ]

別のシートのA1セルに、「佐藤」と入力すると、

 [ 佐藤 ]

「得点」シートから「佐藤」の列を見つけて、B1、C1に

 [ 佐藤 ][ 76 ][ 250 ]

のように表示させたいのですが、B1、C1にはどのような式を書けば良いのでしょうか。
「得点」シートでは氏名が重複する事はありません。
IF文を使うと思うのですが、いまいち良く分かりませんでした。

よろしくおねがい致します。

Aベストアンサー

こんにちは!
VLOOKUP関数で対応できます。
IF関数と併用すればエラー処理が可能です。

Excel2007以降のバージョンであれば
B1セルに
=IFERROR(VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0),"")
としてC1セルまでオートフィルでコピー!
そのまま下へコピーすると行が2行目以降でも対応できます。

Excel2003までの場合は
=IF($A1="","",VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0))

としてみてください、m(_ _)m

Qある範囲のセルから任意の値を検索して、その隣のセルの値を取得するという関数はありますか?

Excelの関数について質問します。
ある範囲のせるを検索して、その隣のセルの値を取得するという関数を探しています。
なければユーザー定義で作りたいと思っています。
VLOOKUP関数では一番左端が検索されますが、
それをある範囲まで拡張して、
その右隣の値を取得できるようにしたいのです。
どうかお知恵をお貸しください。

Aベストアンサー

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場合によっては、IFをかぶせてCOUNTIFで確認した方が良いかもしれません。
 ex. =IF(COUNTIF(A1:F200,X1)=1,【上記数式】,"えらー")

ちなみに、VBAでやるならこんな感じになるかと。

動作の概要
 【検査範囲】から【検査値】を探し、
 最初にHITしたセルについて、右隣のセルの値を返す。
 ex. =Sample(X1,A1:F200)

'--------------------------↓ココカラ↓--------------------------
Function Sample(ByVal 検査値 As Variant,ByVal 検査範囲 As Range)
 For Each セル In 検査範囲
  If セル = 検査値 Then Exit For
 Next セル
 Sample = セル.Offset(0, 1)
End Function
'--------------------------↑ココマデ↑--------------------------

いずれもExcel2003で動作確認済。
以上ご参考まで。

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場...続きを読む

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Qエクセル 同じ値を探して隣の数値をコピーする

エクセルで以下の作業を簡単にする方法を教えて下さい。

Sheet1の1行目には見出しがあり、A列とB列の2行目から下にデータが入っています。(約200行)
A列     B列
田中    13
山本     8
谷口    11
鈴木    6
佐々木    9
奥村     15




Sheet2のA列1行目から下には別のデータが入っています。(約600行)
A列
太田川
山村
田中
多賀先
鈴木
奥村
幸田




Sheet2のA列のデータと完全一致するデータ(名前)をSheet1のA列から探して、同じ名前があれば、その隣のB列にある数値をSheet2のB列に貼り付ける。
見つからない場合はSheet2のB列は空欄のままです。
Sheet2
A列      B列
太田川     
山村
田中    13
多賀先
鈴木     6
奥村    15
幸田


Aベストアンサー

シート2のB2セルには次の式を入力して下方にドラッグコピーします。

=IF(COUNTIF(Sheet1!A:A,A2)=0,"",VLOOKUP(A2,Sheet1!A:B,2,FALSE))


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

人気Q&Aランキング