|
あるシステムのデータを更新する場合に、そのシステムからCSVファイルとしてダウンロードし、そのファイルを修正してシステムに読み込ませる作業をしています。
Aシステム
↓DOWNLOAD
CSVファイルを修正
↓UPLOAD
Aシステム
今回は、空白のデータの箇所のみデータを入力して、システムに読み込ませることを想定しています。
データは1000件くらいの行数のボリュームで、手作業で行を削除する作業は一日がかりになってしまいますし
ミスが発生しても困ります。この作業をマクロで実行すると、数十秒で正確に作業を完了できます。
エクセルのフィルタ機能を使用してもできなくはないのですが、非表示になっている行や列があると
フィルタ機能を使用したときに、抽出されたデータが思い通りにコピーできません。
■使用するデータ
今回はC列のaddressが空白となっていますので、このデータだけ抽出して、そのデータを入力しシステムに読み込ませることを想定しています。
■フィルタ機能とコピペを使用した場合
フィルタ機能でC列が空白の行を抽出します。
元のデータのB列が非表示となっている場合、A1セルからC5セルをコピし
別の場所に貼り付けると、非表示となっていたB列がコピーされません。
このままではシステムに読み込ませることができません。
■目的の抽出データ
目的とするデータは以下のようなもので、マクロを実行すると、上記「■使用するデータ」の2、4、6行目が削除されて、C列が空白となっている行のみ抽出できます。フィルタのプルダウンのマークが見えますが、フィルタは使用していません。フィルタを使用していないことは、左端の行数が、1、2、3行と表示され、非表示となっている行がないことからわかると思います。
このマクロは以下のようなコードで実現しました。
Sub 空白セルの行抽出()
'①行数の最大値を取得
Range("A1").Select
erow = Range(Cells(65536, 1), Cells(65536, 1)).End(xlUp).Row
'②2行目からデータの最後まで空白セルかチェック
Row = 2
Do While Row <= erow
'③C列のセルが空白の場合の行全体を削除
If Cells(Row, 3) <> "" Then
Rows(Row & ":" & Row).Delete
'④行を削除した分、変数Rowと最大行数erowの数をマイナス1
Row = Row - 1
erow = erow - 1
End If
'⑤次の行をチェックするため変数Rowをプラス1
Row = Row + 1
Loop
Range("A1").Select
MsgBox ("完了")
End Sub |

- >
- コンピュータとインターネット
- >
- コンピュータ
- >
- ソフトウェア




