• ベストアンサー

【エクセル】歯抜けの空白欄に上段と同じ値を入れたい

エクセル(2010)で ある表に ところどころ空欄があり、 そこに上段と同じ値を入れたいです。 随時発生する作業のため マクロ(もしくはVBA)が組めればと考えておりますが、 初心者につき、ご教示いただけますでしょうか。 A列:項番 B列:大項目 C列:中項目 D列:小項目 E列:備考 ※1行目:項目名、2行目以降:値 という表で、 A列のナンバリング・D列の小項目 以外は 上と同じ扱いとなるため空欄となってしまっていますが、 アクセス(DB)に取り込むため、空欄の無い形にしたいのです。 ※ちなみに、A列・D列は空欄が無い状態=最終行以下は空白です。 よろしくお願い致します。

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.4

こんなカンジでしょうか。 Sub test()  Dim LineCounter As Long  LineCounter = 3    With ThisWorkbook.Sheets(1)     Do    If .Cells(LineCounter, 1).Value = "" Then Exit Do        If .Cells(LineCounter, 2).Value = "" Then     .Cells(LineCounter, 2).Value = _      .Cells(LineCounter - 1, 2).Value    End If        If .Cells(LineCounter, 3).Value = "" Then     .Cells(LineCounter, 3).Value = _      .Cells(LineCounter - 1, 3).Value    End If        If .Cells(LineCounter, 5).Value = "" Then     .Cells(LineCounter, 5).Value = _      .Cells(LineCounter - 1, 5).Value    End If        LineCounter = LineCounter + 1      Loop    End With End Sub

aka_ao
質問者

お礼

ありがとうございます!

aka_ao
質問者

補足

ちなみに、どのシートでも使えるものにするには、 With ThisWorkbook.Sheets(1)を、どのように設定すると可能になりますか? ご面倒おかけします。

その他の回答 (5)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.6

>ある表に ところどころ空欄があり、 >そこに上段と同じ値を入れたいです。 Sub Test()   Dim myRng As Range   Dim c As Range   With ActiveSheet     Set myRng = .Range("A2:E" & .Cells(Rows.Count, "A").End(xlUp).Row)     '範囲内に空白が無ければ終了     If Application.CountBlank(myRng) = 0 Then Exit Sub     For Each c In myRng.SpecialCells(xlCellTypeBlanks)       c.Value = c.Offset(-1).Value     Next   End With End Sub

  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.5

>ちなみに、どのシートでも使えるものにするには、 > With ThisWorkbook.Sheets(1)を、 >どのように設定すると可能になりますか? 複数のシートがあって、 例えば3枚目のシートを処理し、 その後、改めて、5枚目のシートを処理したいのであれば With ThisWorkbook.Sheets(1) この(1)が何枚目を処理するかの値ですので With ThisWorkbook.Sheets(3) に直して実行し その後、改めて With ThisWorkbook.Sheets(5) に直して実行します。 シートがもっとたくさんあって、 複数シート横断で一気に処理したいということであれば コードを数行追加することになります。 それとも、実行すると、 「何枚目を実行しますか?」と聞いてくるようにしたいのであれば、 それなりの手直しが必要です。 更にそれとも、適当なシートの適当なセルに シート名、あるいは何枚目かを埋め実行する といった対応も考えられます。

aka_ao
質問者

お礼

ご教示、ありがとうございました。参考になりました! 決まったシート名での処理ではないので、「アクティブシート」という設定にしようと思います。※複数のシートがある場合、シート毎にマクロを実行させなくてはなりませんが、歯抜けを無くす処理だけでも簡略化できるので。

noname#232800
noname#232800
回答No.3

何回か読んだのですが文が判りません。 個人情報とかあったら、黒塗りで結構ですので、その画像を表示の上、ご質問頂けますでしょうか?

  • panacon
  • ベストアンサー率31% (214/679)
回答No.2

例えば、B列の修正をF列に書くとして、1行目はすべて列の名称とします。 F1セルに、=if(B2="",B1,B2) この式の意味は、若しB2が空白ならば、B1と同じものを表示します。空白でなければB2の値を表示します。この関数を縦方向にドラッグするとB列の修正列が完成です。C列とE列も同様に行って、出来上がった列をすべてコピーして、別のところに形式を選択して貼り付けをします。貼り付けのオプションは、値と書式にすると良いです。 この方法で、A列とD列も加えて別シートにテーブルを整えて保存し、Acceessの外部データのインポートでこのエクセルシートを選択すればOKです。

  • qwe2010
  • ベストアンサー率19% (2199/11097)
回答No.1

空白のセルに、=を入れて上段のますを、クリック エンター

aka_ao
質問者

お礼

申し訳ありませんが、さすがにそのレベルでは理解しております。 且つ、それだと質問の意図とは異なると思うのですが・・。

関連するQ&A

専門家に質問してみよう