- ベストアンサー
【エクセル】歯抜けの空白欄に上段と同じ値を入れたい
エクセル(2010)で ある表に ところどころ空欄があり、 そこに上段と同じ値を入れたいです。 随時発生する作業のため マクロ(もしくはVBA)が組めればと考えておりますが、 初心者につき、ご教示いただけますでしょうか。 A列:項番 B列:大項目 C列:中項目 D列:小項目 E列:備考 ※1行目:項目名、2行目以降:値 という表で、 A列のナンバリング・D列の小項目 以外は 上と同じ扱いとなるため空欄となってしまっていますが、 アクセス(DB)に取り込むため、空欄の無い形にしたいのです。 ※ちなみに、A列・D列は空欄が無い状態=最終行以下は空白です。 よろしくお願い致します。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こんなカンジでしょうか。 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
その他の回答 (5)
- watabe007
- ベストアンサー率62% (476/760)
>ある表に ところどころ空欄があり、 >そこに上段と同じ値を入れたいです。 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)
>ちなみに、どのシートでも使えるものにするには、 > With ThisWorkbook.Sheets(1)を、 >どのように設定すると可能になりますか? 複数のシートがあって、 例えば3枚目のシートを処理し、 その後、改めて、5枚目のシートを処理したいのであれば With ThisWorkbook.Sheets(1) この(1)が何枚目を処理するかの値ですので With ThisWorkbook.Sheets(3) に直して実行し その後、改めて With ThisWorkbook.Sheets(5) に直して実行します。 シートがもっとたくさんあって、 複数シート横断で一気に処理したいということであれば コードを数行追加することになります。 それとも、実行すると、 「何枚目を実行しますか?」と聞いてくるようにしたいのであれば、 それなりの手直しが必要です。 更にそれとも、適当なシートの適当なセルに シート名、あるいは何枚目かを埋め実行する といった対応も考えられます。
お礼
ご教示、ありがとうございました。参考になりました! 決まったシート名での処理ではないので、「アクティブシート」という設定にしようと思います。※複数のシートがある場合、シート毎にマクロを実行させなくてはなりませんが、歯抜けを無くす処理だけでも簡略化できるので。
何回か読んだのですが文が判りません。 個人情報とかあったら、黒塗りで結構ですので、その画像を表示の上、ご質問頂けますでしょうか?
- panacon
- ベストアンサー率31% (214/679)
例えば、B列の修正をF列に書くとして、1行目はすべて列の名称とします。 F1セルに、=if(B2="",B1,B2) この式の意味は、若しB2が空白ならば、B1と同じものを表示します。空白でなければB2の値を表示します。この関数を縦方向にドラッグするとB列の修正列が完成です。C列とE列も同様に行って、出来上がった列をすべてコピーして、別のところに形式を選択して貼り付けをします。貼り付けのオプションは、値と書式にすると良いです。 この方法で、A列とD列も加えて別シートにテーブルを整えて保存し、Acceessの外部データのインポートでこのエクセルシートを選択すればOKです。
- qwe2010
- ベストアンサー率19% (2199/11097)
空白のセルに、=を入れて上段のますを、クリック エンター
お礼
申し訳ありませんが、さすがにそのレベルでは理解しております。 且つ、それだと質問の意図とは異なると思うのですが・・。
お礼
ありがとうございます!
補足
ちなみに、どのシートでも使えるものにするには、 With ThisWorkbook.Sheets(1)を、どのように設定すると可能になりますか? ご面倒おかけします。