• DoRubyとは
  • お問い合わせ
  • Ruby/Rails
  • Web開発
  • Webマーケティング
  • アピリッツ
  • ライフハック
  • ゲーム制作/開発
  • Railsの小技
  • Rubyの小技
  • Gemの紹介
  • ActiveRecord
  • 初心者向け
  • Java/Scalaテク
  • Unixのあれこれ
  • データベース
  • スマホ開発
  • HTML/CSS/JavaScript
  • デザイン製作
  • インフラ
  • クラウド
  • セキュリティ
  • エディタ
  • バージョン管理
  • その他
  • python
  • アクセス解析
  • Googleアナリティクス
  • Googleデータスタジオ
  • Web広告
  • SEO
  • UI/UX
  • ソーシャルメディア
  • EC開発
  • Webシステム開発
  • コンサルティング
  • Webデザイン
  • ブロックチェーン
  • ゲーム紹介
  • アプリ紹介
  • ASP
  • 風景
  • パソコン
  • ツール
  • ガジェット
  • 仕事術
  • 健康
  • 生活
  • 書評
  • Excel(エクセル)
  • PowerPoint(パワーポイント)
  • ゲームプランニング
  • SpriteStudio
  • マスターデータ入力/作成
  • Unity
  • キャラクターデザイン
  • ゲームシナリオ
  • レベルデザイン
  • ゲーム分析
  • 3DCG
  • イラスト制作
  • CG/アニメーション
  1. ホーム
  2. ゲーム制作/開発
  3. マスターデータ入力/作成
  4. 【VBA】エクセルで指定列ごとに改行したデータを作成するマクロ
  • 2017-06-07
    • カテゴリ:
    • マスターデータ入力/作成
    • タグ:
    • Excel

【VBA】エクセルで指定列ごとに改行したデータを作成するマクロ

この記事は公開から1年以上が経過しています。情報が古い可能性がありますのでご注意ください。

横に長いデータを指定した列数ごとに改行して縦長のデータに整理するマクロを(エクセル初心者に向けて)紹介します。

はじめに

 初めまして、新卒でゲームプランナーをやっている者です。プランナー職ではゲーム内のデータをエクセルで管理・編集するため、エクセルに慣れていないとつまずくことが多々あります。本記事では、エクセルをあまり使ったことがない人に向けて、検索しても出てこなかったエクセルの簡単なマクロを紹介したいと思います。

前置き

 ゲーム内の種々のデータ、例えばキャラやエネミーのパラメータ等の多くは、プランナーがエクセルで管理しています(マスターデータと言います)。スマホ向けゲームでもそのデータ量は膨大で、作業の多くはエクセルの関数などで機械的に行わないと、とてつもない時間が掛かってしまいます。これが、そもそも私がエクセルのマクロを使い始めた理由です。

エクセルのマクロ機能の紹介

 今回は私のような初心者の方を想定して、エクセルのマクロとは何なのか、というところから記しておこうと思います。
 エクセルには様々な機能がまとまっていますが、それらの機能を人が動かすのではなく、プログラムで動かしてやることができます。それがマクロです。正しく使えれば、人間では膨大な時間がかかるような作業を瞬時に行うことが可能です。
 エクセルのタブに開発というタブがあれば、すでにマクロが使える状態になっています。
enter image description here
出てない方は【ファイル】→【オプション】→【セキュリティーセンター】と進み、ここで設定を変更すれば表示されるようになります。
 マクロを組むということは、エクセルにどのような手順で作業をしてほしいかを指定することです。難しく感じるかも知れませんが、エクセルでは人の行動を記録してマクロを作ることも可能です。プログラムなんて書けないっていう方でも、開発からマクロの記録を選択すると、そこからの動作をマクロとして記録してくれます。
enter image description here
これを用いれば、単純な反復作業をボタンぽちっとすればエクセルがやってくれるようになるわけです。
開発タブから【Visual Basic】を押せば、行動記録ではなく、自分でプログラムしてマクロを組むことができる画面になります。ここで紹介するコードは、この画面で作ったものです。

指定列ごとに改行したデータを作成するマクロ

 前置きが長くなりましたが、本題に入ります。私が直面したのは、横長のデータを4列ごとで改行して縦長にして整理したい、という状況です。エクセルには、行から列へ、列から行へ変換する機能は元々備わっていますが、4列ごとに行へ変換することは(おそらく)できません。
 エクセルの関数だけを用いてやろうとすると、今の場合4列ごとと決まっているので、コピーしたいセルの指定をOFFSET関数やMOD関数などを組み合わせてやればできるかもしれませんが、ちょっと難しくて分かりません。
 前述の行動記録マクロを作ろうにも、対象とするセルが毎回変わってしまうので、どうにも上手くいきません。そこで、マクロに挑戦してみました。さっそくコードです。

Sub 複数列コピペ()

Dim ds As Worksheet, ad As Worksheet
Dim MaxRow As String, MaxRow_ad As String, MaxColumn As String
Dim i As Integer, INP As Integer

Set ds = Sheets("元データ")
Set ad = Sheets("整形後データ")

MaxRow = ds.Cells(Rows.Count, 1).End(xlUp).Row
MaxColumn = ds.Cells(1, Columns.Count).End(xlToLeft).Column

For i = 1 To MaxRow
    For INP = 1 To MaxColumn Step 4

        ds.Range(Cells(i, INP), Cells(i, INP + 3)).Copy
        MaxRow_ad = ad.Cells(Rows.Count, 1).End(xlUp).Row
        ad.Cells(MaxRow_ad + 1, 1).Insert
        Application.CutCopyMode = False    

     Next INP
Next i

End Sub

 プログラミング経験がほぼないので、見る人が見たら鼻で笑われるコードかもしれませんし、不要なことをしているかもしれませんが、求めていた動作はしてくれました。
 タイトルでは改行と書いてありますが、その実態は"元データ"シートから4列ずつコピーして"整形後データ"シートに貼り付けるということをしています。つまり、

元データ
このようなデータを別のシートに
整形後データ
という形にして貼り付けします。
 種々の関数の説明は省略しますが、僭越ながら軽く動作の説明をしたいと思います。
 最初に、使う変数の定義をし、そのあとにエクセルのシート名を変数に入れています。
次に、コピーしたいデータの最終行と最終列の情報を次の2文で持ってきています。

MaxRow = ds.Cells(Rows.Count, 1).End(xlUp).Row
MaxColumn = ds.Cells(1, Columns.Count).End(xlToLeft).Column

次に、For文で今持ってきた行数分だけ同じ動作を繰り返します。
その動作が、
・1列目から4列目までをコピー(INP=1のとき)

ds.Range(Cells(i, INP), Cells(i, INP + 3)).Copy

・貼り付け対象シートのデータが入っている最後の行を取得

MaxRow_ad = ad.Cells(Rows.Count, 1).End(xlUp).Row

・その次の行にコピーしたデータを貼り付ける

ad.Cells(MaxRow_ad + 1, 1).Insert

・コピペモードを終了し、次のINPに4を足して次のループへ
という流れになっています。

終わりに

 本職エンジニアの方々が難しそうな記事を投稿している中、初心者が簡単なコードを投稿するという恐れ多い記事ですが、お役に立てたら幸いです。マクロをまだまだ理解できていないので、他の方の環境でも動作するのか分かりませんが、ご了承ください。

※2017/06/13 記事をより分かりやすくするため、編集しました。


  • 1,026 views
    • Tweet
    • このエントリーをはてなブックマークに追加

この記事を書いた人
ガニメデ
2017入社ゲームプランナーです。 最近はイカした色塗りバトルを繰り広げています。

「いいね!」するとDoRubyの最新記事を受け取ることができます。

Facebook

Twitterから最新記事を受け取るならこちら

Follow @doruby

Feedlyから最新記事を受け取るならこちら

follow us in feedly

おすすめの記事
  • 779 views
  • 2018-06-13
おすすめのAfterEffects無料エフェクトプラグイン紹介
  • 716 views
  • 2018-04-02
Unityのシェーダーについて
  • 2,345 views
  • 2018-01-31
塗りにひと手間加えてイラストの印象を華やかにする【前編】

カテゴリ

Ruby/RailsRailsの小技Rubyの小技Gemの紹介ActiveRecord初心者向けWeb開発Java/ScalaテクUnixのあれこれデータベーススマホ開発HTML/CSS/JavaScriptデザイン製作インフラクラウドセキュリティエディタバージョン管理その他pythonWebマーケティングアクセス解析GoogleアナリティクスGoogleデータスタジオWeb広告SEOUI/UXソーシャルメディアアピリッツEC開発Webシステム開発コンサルティングWebデザインブロックチェーンゲーム紹介アプリ紹介ASP風景ライフハックパソコンツールガジェット仕事術健康生活書評Excel(エクセル)PowerPoint(パワーポイント)ゲーム制作/開発ゲームプランニングSpriteStudioマスターデータ入力/作成Unityキャラクターデザインゲームシナリオレベルデザインゲーム分析3DCGイラスト制作CG/アニメーション

    人気の記事
    最近の記事
    • 3,599 views
    • 2020-04-02
    Kali Linux 2020.2 導入と日本語化
    • 828 views
    • 2020-03-06
    rack-lineprofを改造して管理画面からファイル指定&ログ追跡出来るように
    • 802 views
    • 2020-03-05
    FactoryBot と Gimei を使って架空のユーザを作る
    • 584 views
    • 2020-02-04
    ActionCable実装しようwith webpack
    • 517 views
    • 2020-01-27
    この頃のプルリクに対するレビュー
    Facebook

      サイト情報
      • DoRubyとは
      • 株式会社アピリッツ

      ソーシャルアカウント
      • Facebook
      • Twitter

      企業情報
      • 会社概要
      • 採用情報
      • お問い合わせ
      サービス製品
      • レコメンドASP
      • サイト内検索ASP「Advantage Search」
      • オープンソースECサイト構築パッケージ「エレコマ」
      • 受注・在庫・商品情報一元管理「モールコネクター」
      • セキュリティ診断サービス
      • Googleアナリティクスセミナー

      Copyright © Appirits All Rights Reserved.