• ベストアンサー

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

  A  B    C 1 山田 地下鉄  160  2    地下鉄  150 3    タクシー 1120 4    地下鉄  150 5 鈴木 地下鉄  210 6    タクシー 5220 上記のようなデータがあり、VBAで別シートに A2~A4までA1の山田が、A6にはA5の鈴木が 入った形でコピーしたいのですが、実現可能でしょうか? よろしくお願いいたします。

この投稿のマルチメディアは削除されているためご覧いただけません。

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

  • ベストアンサー
  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.4

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

nattomayo
質問者

お礼

nag0720様、ご回答ありがとうございます。 変数Sの使い方が大変勉強になりました。 記述いただきました内容でやりたいことが無事できました。

その他の回答 (5)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.6

Dim rr As Range Dim rb As Range Dim i As Long Set rr = Range("A1", "A" & Cells(Rows.Count, 2).End(xlUp).Row) Set rb = rr.SpecialCells(xlCellTypeBlanks) For i = 1 To rb.Areas.Count With rb.Areas(i) .Value = .Item(1).Offset(-1).Value End With Next i スペースとか、長さ0の文字列、が入っている見かけが空白セルの場合は別途対策が必要です。

nattomayo
質問者

お礼

xls88様、ご回答ありがとうございました。 色々な書き方があって大変勉強になります。

  • yuujgmn
  • ベストアンサー率50% (2/4)
回答No.5

以下の手順で行ってください。 (1)まずは以下のコードをモジュールに貼り付けてください。 Sub コピー() Dim i As Integer, s As Worksheet, s1 As Worksheet, x As String Set s = Sheets("Sheet1") '(1)「Sheet1」の6文字をコピー元のシート名に変更 Set s1 = Sheets("Sheet2") '(2)「Sheet2」の6文字をコピー先のシート名に変更 For i = 1 To s.Range("B" & Rows.Count).End(xlUp).Row If Not s.Cells(i, 1).Value = "" Then x = s.Cells(i, 1).Value s.Range("A" & i & ":" & "C" & i).Copy s1.Range("A1").Offset(i - 1)'(3) s1.Range("A1").Offset(i - 1) = x Next i End Sub (2)そしてコードの緑色の部分(1)(2)を指示通りに変更してください。 (3)マクロを実行してください。(どのシートを開いてマクロを実行してもOKです。) きちんと動きましたか? A列からC列を処理するようにしています。もし行一列すべてをコピーしたいなら(3)の s.Range("A" & i & ":" & "C" & i).Copy s1.Range("A1").Offset(i - 1)'(3) を消して s.Rows(i).Copy s1.Range("A1").Offset(i - 1) に変更してください。

nattomayo
質問者

お礼

yuujgmn様、ご回答ありがとうございます。 丁寧に教えていただきまして助かりました。

回答No.3

A列において、A2からデータがある行まで選択します。 Ctrl+Gで「ジャンプ」画面を開きます。 ジャンプ画面の「セル選択」で「選択オプション」を開きます。 空白セルを選択してOKを押します。(A列の複数の空白セルのみが選択されます) 「名前ボックス」が「A2」となっていることを確認したら、数式バーに「=A1」と入力し、Ctrl+Enterします。 以上です。

nattomayo
質問者

補足

cistronezk様、ご回答ありがとうございます。 毎回、元の形式で新しいデータが届くため、ワンボタンで 処理できるようにしたいと考えております。 説明不足で申し訳ございません。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

VBAを使用しなくても、次の式をE2セルに入力して下方にオートフィルドラッグすればよいでしょう。 =IF(A2<>"",A2,IF(AND(A2="",B2<>""),A1,""))

nattomayo
質問者

補足

KURUMITO様、ご回答ありがとうございます。 元のデータが5000件以上あり、毎日新しく届くため、 VBAで取込処理をしたいと考えております。 また、その為の列も極力用意したくないため、VBAでの方法を ご教授いただければとご相談しました。 説明不足で申し訳ございません。

  • FEX2053
  • ベストアンサー率37% (7987/21355)
回答No.1

あの・・・ D1セルに =A1 D2セルに =IF(A2="",D1,A2) D2セルをD3セル以降にコピー これだけで、D列にお望みのデータが出来上がりますけど・・・。 後は適当に「コピー」「形式を選択して貼り付け:値」にすれば。

nattomayo
質問者

補足

FEX2053様、早速のご回答ありがとうございます。 それ用に列を用意しなくて済む方法があればと思い 相談させていただきました。説明不足で申し訳ございません。

関連するQ&A

  • ExcelのVBAにてキーになるものを入力してデータを振分けたい

    2つのシートがあり、sheet2に振分けるデータ(下表)を作成しておきます。   (列)  1   2   3  (行)   1     A   B   C  2     ○   △   ×  3     ア   イ    ウ (1)sheet1にコンボボックスにてAを入力する。A、B、Cは、それぞれ決められたセルにコピーされる。 (2)sheet1にコンボボックスにて○を入力する。○、△、×は、それぞれ決められたセルにコピーされる。 (1)と(2)のコピーされる場所は、同じ場所です。 というようなものをExcelのVBAにて作成したいのですが、VBAは、あまりよくわかりません。 宜しくお願い致します。

  • EXCEL2010 VBAで空白行以外をコピー

    EXCEL2010を使用しています。 シートAではセルA1からA10に順にデータを入力していきます。 A1からA10のすべてにデータを入力する場合やA1からA4のみデータを入力する場合等があります。 このA1からA10のデータをシートBのA1からJ1にコピーしたいと思っています。 空白以外のデータをコピーして、コピー後はシートBのA1:J10で空白の列は削除したいと 思っています。 (例) シートA A1 ○ A2 ○ A3 × A4以降すべて空白 シートB A1 ○ B1 ○ C1 × D1からJ1までは列ごと削除 これをVBAで作成したいのですがどなたか詳しい方押してください。

  • VBAでの他のシートにコピー

    今sheet1へ、sheet2とsheet3のデータをコピーしようとしています。 sheet1は見出しが2行目にあり、3行目からsheet2をコピーしようとしています。 そのつぎに、sheet3はsheet1にsheet2のコピーした次の行からコピーします。 sheet2    A  B  C 3 鈴木 りんご 5 4 山田 バナナ 1 sheet3   A  B  C  3 大羽 メロン 2 4 鷲尾 スイカ 1     ↓2行目まで見出しがあるsheet1に sheet1   A  B  C 3 鈴木 りんご 5 4 山田 バナナ 1  5 大羽 メロン 2 6 鷲尾 スイカ 1 このとき、シート2とシート3は数は決まっていません。 そして、数が0のときもあるので「sheet2とsheet3にデータがないときはコピーしない」 をというふうにしたいのですが、どのようにすればよろしいですか? VBAで行いたいです。よろしくお願いします。

  • ExcelのVBAにてキーになるものを入力すると、その関連データを振り分ける

    2つのシートがあり、sheet2に振分けるデータ(下表)を作成しておきます。   (列)  1   2   3  (行)   1     A   B   C  2     ○   △   ×  3     ア   イ    ウ (1)sheet1にコンボボックスにてAを入力する。AはセルA1(固定)に、BはセルC3(固定)に、Cは、セルE5にそれぞれ決められたセルにコピーされる。 (2)sheet1にコンボボックスにて○を入力する。○はセルA1(固定)に、△は、セルC3(固定)に、×は、セル(E5)にそれぞれ決められたセルにコピーされる。 (1)と(2)のコピーされる場所は、同じ場所です。 というようなものをExcelのVBAにて作成したいのですが、VBAは、あまりよくわかりません。 宜しくお願い致します。

  • VBAでセルが空白かどうかを調べたい(Excel)

    エクセル2000関連でVBAを勉強し始めました。 A1~C3まで列の名前が入っていて、 A2~C2列以下(データを入れるのはA3~C3, A4~C4・・で、どの行までデータが入っているかは 分からない状態)が空白か どうかを調べたい時にはどう書けばよろしいのでしょうか? ・A65536~C65536まで選択し ・上向きにデータが存在するかどうかを調べていって ・最終的にActiveになっている行番号が1であれば A2~C65536までは空白。 1じゃなければ、データがどこかに存在する。 という方法で調べようかと思ったのですが、 Dim Line As Integer Range("A65536:C65536").Select Range(Selection, Selection.End(xlUp)).Select  Line = Selection.Row でLineの値で判別しようかと思ったのですがうまく いきません。何が間違っているのでしょうか? また、より効率的な方法があったら教えていただき たいです。お願いします。

  • VBAにてデータを振り分けたい。

    2つのシート(sheet1、sheet2)があり、sheet2に振分けるデータ(下表)を作成しておきます。   (列)  A   B   C   D (行)   1     山   川   地   空  2     ○   △   ×   □  3     ア   イ    ウ   エ (1)ユーザーフォームを作成し、その中にコンボボックスを作成して山を入力する。 山は、セルA1へ、川は、セルB2へ、地は、セルC3へ、空は、セルD1、それぞれ 決められたセルにコピーされる(すべてsheet1へコピー)。 (2)にコンボボックスにて○を入力する。○はセルA1へ、△は、セルB2へ、×は、 セルC3へ、□は、セルD1へ、それぞれ決められたセルにコピーされる(すべて sheet1へコピー)。 ちなみに(1)と(2)のコピーされるセルの位置は同じ場所です。 というようなものをExcelのVBAにて作成したいのですが、VBAは、まだよくわかりません。 出来れば、sheet1のセルに数式などを入力したくはないのですが...。 どうか皆様のご指導を宜しくお願い致します。

  • 【VBA】特定の条件でセルをコピー

    VBA初心者です 特定の条件を満たすセルの隣接する指定のセルをコピーして別のシートへ貼付けたいです 【sheet1】 A   B   C   ~   F  G 1   2   あ   ~   3  あり 2   1   い   ~   7  なし 3   2   う   ~   4  あり 5   3   え   ~   6  あり 6   2   お   ~   5  なし 7   1   か   ~   3  あり 8   3   き   ~   7  なし 9   2   く    ~  8  なし といったデータのうち、G列が「あり」の行の C~Fの値を別のシートへ以下のように貼り付けたいです 【sheet2】 A   ~   D  E あ   ~   3  _ う   ~   4  _ え   ~   6  _ か   ~   3  _ 全くの初心者です よろしくお願いします

  • 【VBA】シート1の入力表をシート2に並び替えて表示させたい【VBA】

    はじめて質問させて頂きます。 駄文で伝わりづらいかと思いますが、大変困っておりますので、ご教授下さい。宜しくお願いします。 【シート1】       商品コード 店舗コード 001  002 003 0000A  ¥1   ¥2  ¥3 0000B  ¥4   ¥5  ¥6 0000C  ¥7   ¥8  ¥9 【シート2】 店舗コード 商品コード 金額 0000A  001   ¥1 0000A  002   ¥2 0000A  003   ¥3 0000B  001   ¥4 0000B  002   ¥5 0000B  003   ¥6 0000C  001   ¥7 0000C  002   ¥8 0000C  003   ¥9 ★実現したいこと VBAを用いて、シート1にて入力した内容を、シート2のように並べ替えて表示したい。 ★条件 店舗コード→可変(A列で上から拾いNULLまでループ) 商品コード→固定(上記例だと001~003の3つ) 金額→可変 以上です。当方VBA初心者ですが宜しくお願いします。

  • vbaマクロ一覧から担当者別にデータを転機する方法

    vbaマクロ初心者です。 次のような処理をしたいのですが、調べてもなかなか思うようにいかず ここに辿りつきました。良い方法を教えてください。 【マクロで行いたい処理】 「一覧(*)のデータを、担当者毎に分かれた別シートにデータを転記する処理」 ・一覧シート上にある下記のようなデータを「担当者」にフィルターをかけて、 別の担当者毎作成したシートにデータを転記したい。 (例 「山田」シートに「一覧」シートの山田さんの行のデータをコピーしてもってくる) ・すでに担当者毎のシートは作成されているものとします。 ・「一覧」シートに複数回分かれて同一人物名前がでてきます。(例山田さんが8行目、18行目に出てくる) ・「一覧」シートのデータは100~200行、担当者は10名ほどです。 「一覧」シート(*)  担当者  商品  売・買  実施日   山田   りんご  売    2/11  鈴木 みかん  買    2/25  田中 いちご   買  山田   いちご  売  山田   オレンジ 買 また、一覧シートに記載されているが、個別の担当者シートがない場合に メッセージ等で知らせてくれる処理がありましたらその機能も追加したいと思っております。 (上記の例で申しますと、田中さんシートが処理前に作成されていないケースでそれをマクロ処理中に教えてくれる) 文章に落とすとわかりづらくなってしまい、申し訳ないのですが、どうぞよろしくお願い致します。  

  • VBAでExcelデータの加工方法について

    Excel VBAにて、データ加工するプログラムをご教授ください。 環境はWindows7 Pro Excel2010 添付データのsheet1をsheet2の状態にするロジックです。 ・sheet1、sheet2は別シート ・sheet1の列は最終行までという形 何行あるかは不明で連続したデータが入っている。

専門家に質問してみよう