• ベストアンサー

【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% (7995/21381)
回答No.1

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

nattomayo
質問者

補足

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

関連するQ&A

専門家に質問してみよう