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

こんにちは!「デザインもできるシステムエンジニア」のあつもり(プロフィール)です。

今日も業務効率化のアイデアを発信していきますっ!

エクセルVBAを使ってランチャーアプリを作ります。

全10回の連載で今回は第10回目。いよいよ最終回になりました。

今回は「同じデータが切り替わる項目ごとに空白行を挿入する」する機能を追加していきます。

エクセルで表データを作るときに、見栄えを良くすることは重要なことです。自分で見るだけならいいかもしれないですが、他人に見せるデータなら、なおさら見栄えは大切です。

見栄えを良くすることで相手の理解が深まり、説得力が増すからです。

見栄えを整えていると、

「項目の切り替わる所に改行を入れたい」というケースがあります。

例えばこんな感じ。

取引先名が変わるたびに改行を入れて見やすくする。

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

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

一度プログラムを作ってしまえば、あとの作業が楽になるし、教える手間も省けるからです。

レクタングル大336×280

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

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

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

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

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

さきほど追加した「項目ごとに空白行を入れる」ボタンをダブルクリックしてコードウィンドウを開きます。

「CommandButton7_Click()」の下に以下のコードを貼り付けます。

これでランチャーに改行機能が追加されました。

このままでも使えますが、手直して自分の思うようにプログラムを変えたい人向けに、プログラムコードの解説をします。

プログラムコードの解説

改行挿入機能に絞って説明していきます。過去の連載記事で解説してきたことについては触れていません。

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

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

なぜ最終行から開始行に向かってループさせるのかというと、空白行を挿入すると行番号がずれてしまうためです。

空白行を入れる度に行番号がずれてしまうと、想定通りの動きになりません。

詳しくは前回の記事で説明していますので参考にしてください。

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

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

Withステートメントはプログラムの可読性を高めるために使います。

Withを使うとオブジェクトコードを何度も書く必要がなくなります。そのため、可読性が上がるだけでなく、プログラミングの効率アップにもつながるわけです。

でも、絶対使わなければいけないわけではないので、使わないのもアリです。

With オブジェクト
処理
End With

Withを使わない場合

Withを使った場合

Withを使わない場合はCells(y, Col)を2回書かないといけませんが、Withを使う場合は1回書くだけで済みます。

Withを使えばプログラムコードの可読性を上げるだけでなく、プログラム変更時も少ない修正で済むということです。

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

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

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

Rangeオブジェクトには基準となるセルを指定します。

RowOffsetは取得したいセルの縦座標と基準となるセルの縦座標の差を入れます。

ColomnOffsetには取得したいセルの横座標と基準となるセルの横座標の差を入れます。

data = Cells(5, 5).Offset(-1, 0).value

とした場合、dataにはCells(4, 5)のデータが入ります。

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

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

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

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

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

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

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

まとめ

いかがでしたか?今回は同じデータが切り替わる項目ごとに空白行を挿入する方法をお伝えしました。

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

それではまた~。



[連載記事 全10回] エクセルVBAで文字列変換ツールを作る

全角半角の変換をしたり、空白行や改行を削除したり。データ編集に便利な機能を詰め込んだランチャーアプリを作っていきます。1つの記事で1機能ずつ追加していきますので、少しずつVBAを学びながら進めることができます。

  1. エクセルVBAでセル内の文字列に含まれる改行を一括で削除する方法
  2. エクセルVBAでセル内の文字列を操作して全角文字を半角に一括変換する方法
  3. エクセルVBAでチェックボックスのONOFFでボタン表示を変える方法
  4. エクセルVBAでセル内文字列の前後の空白をまとめて一括で削除する方法
  5. エクセルVBAのReplace関数でセルの文字列内の空白をまとめて一括削除する
  6. エクセルVBAのCountA関数でシート内の空白行をまとめて一括で削除する方法
  7. エクセルVBAで空白行を削除しないでまとめて一括非表示で隠す方法
  8. エクセルVBAで条件付き書式を使わず1行おきに色を付ける方法
  9. エクセルVBAで集計や並び替えを使わず1行おきに空白行を一括で挿入する方法
  10. エクセルVBAで同じデータが切り替わる項目ごとに空白行を挿入する方法 (本記事です)
レクタングル大336×280
レクタングル大336×280

シェアする

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

フォローする