こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

エクセル(2010)で
ある表に ところどころ空欄があり、
そこに上段と同じ値を入れたいです。

随時発生する作業のため
マクロ(もしくはVBA)が組めればと考えておりますが、
初心者につき、ご教示いただけますでしょうか。

A列:項番
B列:大項目
C列:中項目
D列:小項目
E列:備考
※1行目:項目名、2行目以降:値
という表で、
A列のナンバリング・D列の小項目 以外は
上と同じ扱いとなるため空欄となってしまっていますが、
アクセス(DB)に取り込むため、空欄の無い形にしたいのです。
※ちなみに、A列・D列は空欄が無い状態=最終行以下は空白です。

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

投稿日時 - 2018-03-01 10:11:25

QNo.9433898

困ってます

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

こんなカンジでしょうか。

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

投稿日時 - 2018-03-01 15:08:20

補足

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

投稿日時 - 2018-03-01 17:22:43

お礼

ありがとうございます!

投稿日時 - 2018-03-01 17:22:41

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.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

投稿日時 - 2018-03-01 21:54:07

ANo.5

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

複数のシートがあって、
例えば3枚目のシートを処理し、
その後、改めて、5枚目のシートを処理したいのであれば
With ThisWorkbook.Sheets(1)
この(1)が何枚目を処理するかの値ですので
With ThisWorkbook.Sheets(3) に直して実行し
その後、改めて
With ThisWorkbook.Sheets(5) に直して実行します。

シートがもっとたくさんあって、
複数シート横断で一気に処理したいということであれば
コードを数行追加することになります。

それとも、実行すると、
「何枚目を実行しますか?」と聞いてくるようにしたいのであれば、
それなりの手直しが必要です。

更にそれとも、適当なシートの適当なセルに
シート名、あるいは何枚目かを埋め実行する
といった対応も考えられます。

投稿日時 - 2018-03-01 20:02:50

お礼

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

投稿日時 - 2018-03-02 10:23:39

何回か読んだのですが文が判りません。

個人情報とかあったら、黒塗りで結構ですので、その画像を表示の上、ご質問頂けますでしょうか?

投稿日時 - 2018-03-01 12:29:52

ANo.2

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

投稿日時 - 2018-03-01 11:10:47

ANo.1

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

投稿日時 - 2018-03-01 10:18:28

お礼

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

投稿日時 - 2018-03-01 10:41:49

あなたにオススメの質問