エクセルVBAで同じデータが切り替わる項目ごとに空白行を挿入する方法

こんにちは~。「デザインもできるシステムエンジニア」のあつもり(@atumori17)です。今日も業務効率化のアイデアを発信していきますっ!

前回お伝えした「集計や並び替えを使わず1行おきに空白行を一括で挿入する」に続いて、今回は「同じデータが切り替わる項目行ごとに空白行を挿入する」するテクニックをご紹介します。

エクセルVBAで集計や並び替えを使わず1行おきに空白行を一括で挿入する方法
エクセルシート上に入力されたデータの見栄えを整えたりする時などに、1行おきに空白行を入れたいケースがあると思います。Ctrlキーでを使う方法、並び替えを行う方法などがありますが、大量のデータでは非常に時間がかかります。そこでエクセルVBAで一括で空白行を入れる方法を紹介します。

エクセルシートの見栄えを整えていると項目ごとに空白を入れたいっていうケースがあると思います。例えばこんな感じ

エクセルの集計機能を使えば手動でできないこともないのですが、やはりいくつかの手順を踏まなければならないし、職場など複数人で作業する場合、それぞれの人にやり方を教えなければならず不便です。

というわけでVBAを使って「項目ごとに空白行を挿入する」プログラムを作ってしまいましょう。

項目ごとに空白行を入れるプログラムの作成

前回使用した一括変換プログラムにボタンを追加する

毎度のことですが作業効率を考え、前回使ったプログラムを再利用します。デスクトップにある「一括変換.xls」を開きます。

UserFrom1を開いて新たに「項目ごとに空白行を入れる」ボタンを追加します。ボタンの表示名はプロパティウィンドウのCaptionで変更できます。ずいぶんボタンが増えたので全体的に少し小さくして、2列に並べました。

サンプルコードを貼り付ける

「項目ごとに空白行を入れる」ボタンをダブルクリックしてコードウィンドウを開きます。「CommandButton7_Click()」の下に以下のコードを貼り付けます。

プログラムコードの解説

重要なポイントに要点を絞って説明していきます。過去の連載記事で解説してきたことについては触れていません。

プログラムの流れは以下のようになります。

  • 項目列を選択するInputBoxを表示させる
  • 開始行を入力するInputBoxを表示させる
  • 最終行から開始行に向かってループさせる
  • 項目行の項目名が変わったらInsertメソッドで空白行を入れる

Withステートメントを使ってプログラムコードを見やすくする

ここで初めてWithが出てきましたね。Withを使うことでオブジェクトを表すコードを何度も書く必要がなくなるので、プログラムがすっきりして見やすくなります。プログラムの可読性が上がりますよっ。

With オブジェクト
処理
End With

Withを使わない場合

Withを使った場合

Withを使わない場合はCells(y, Col)を2回書かないといけませんが、Withを使う場合は1回書くだけで済みます。このことはプログラムコードの可読性を上げるだけでなく、プログラム変更時も少ない修正で済むということです。

Offsetプロパティで前のセルのデータを取得する

Offsetプロパティを使い基準となるセルからの位置を指定することで、別のセルの値を取得することができます。

Rangeオブジェクト.Offset(RowOffset, ColumnOffset)

項目ごとに空白行を入れるプログラムの動作確認

それでは実際に出来上がったプログラムを動かしてみましょう。

ワークシートの起動するボタンを押します。

フォームが表示されたら対象のシートに移動し「項目ごとに空白行を入れる」ボタンを押します。

列を選択するInputboxが表示されたら、項目列を選択しOKボタンを押します。

続いて開始行を入力するInputboxが表示されるので、処理を開始したい行番号を入力します。

項目の変わり目に空白行が挿入されました。

まとめ

いかがでしたか?今回の内容をまとめます。

  • Withを使うことでプログラムコードを見やすくする
  • Offsetプロパティを使って前のセルを取得する

それではまた~。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする