2019年8月7日水曜日

今日のExcel:エクセルでドット絵作成したX,Y座標の取得

 あるアプリで、ドット絵の座標を簡単に生成する必要があり、Excelを道具として使ってみたのでその時の情報を掲載しておこうと思います。
 ※開発技術手法の一環で機密に近いかもしれませんが、社内でもリクエストがあったため、ここに掲載して公開しようと思います。たいした技術やアイディアでもないですし(?)。


 結果ですが、このような感じです(Excel)。



<手順と説明>

 まず、シート全体を方眼調にセルの縦横を妥当な大きさに変更します(私は縦横共に20ピクセルなどに変更しました。)

 次に、左側に今回は20×20のマスをエリアとして準備しました。

 上と左には1~01~0のラベルとしての文字を入力し、わかりやすいようにセルをグレーへ。

 上記枠の中をすべて選択し、「条件付き書式」を使って“値が1ならセルの塗りつぶし色をオレンジにする”様に条件を追加します。

 枠の下の適当な場所に、枠全体の合計値を算出した結果を表示する場所を準備します。

 上の画像の「100」と記述されているところです。

 計算式は、よくあるSUMで
  =SUM(B10:U29)
 ですね。

 ここから、枠の中に「1」を立てていきます。

 上記画像のように、100個ピッタリで「」を表してみました。

 Excelのウインドウ右下にある表示の拡大/縮小を使って、小さくしてもそれなりに「」が読めそうかも確認します。



 >>>ここからが本題です。<<<

 上記左エリアの丁度右側にも同じ様にエリアをコピーして貼り付けし準備します。
   → 

 中の「1」はすべて削除。条件付き書式はそのままでも消してもOK。

 この右枠の、いちばん左上(1、1にあたるところで、上記画像のセルAB10)に、以下の計算式を書きます。

  =IF(B10=1,","&AB$9&","&$AA10,"")
 (詳細説明は後程。セルの位置が違う場合は妥当な位置に変更してください。)

 この数式をコピーし、右枠内すべてに張り付ける。

 結果、上の画像の様に、「」を描く場所に何やら数値とカンマが入ったセル群が出てくると思います。

 このセルを、枠内すべてマウスで選択し、「コピー」してクリップボードに記憶させます。

 それを、適当なテキストエディタ(置換が行えるもの)に張り付けます。

 あとはテキストエディタ内で置換等の機能を使って、
  タブ文字を削除
  改行を削除
  最初のカンマ1文字を削除(不要なら)
  最後にカンマを1文字追加(必要なら)
 を実施します。

 ※適当なテキストエディタがない場合は、Excelのセル内で操作してもいいかもしれませんが、文字列の最大長に注意が必要です。

 そうすると出来上がりは、こんな感じの羅列になります(x1,y1,x2,y2,・・・)。
16,2,17,2,15,3,18,3,5,4,15,4,18,4,4,5,8,5,9,5,10,5,11,5,12,5,13,5,14,5,15,5,16,5,17,5,4,6,12,6,13,6,3,7,4,7,12,7,13,7,3,8,4,8,12,8,13,8,3,9,4,9,8,9,9,9,10,9,11,9,12,9,13,9,14,9,15,9,16,9,17,9,3,10,4,10,12,10,13,10,3,11,4,11,12,11,13,11,3,12,4,12,9,12,10,12,11,12,12,12,13,12,3,13,4,13,8,13,9,13,10,13,11,13,12,13,13,13,14,13,3,14,4,14,7,14,8,14,12,14,13,14,14,14,15,14,16,14,4,15,7,15,8,15,12,15,13,15,15,15,16,15,17,15,4,16,7,16,8,16,12,16,13,16,17,16,18,16,4,17,5,17,8,17,9,17,10,17,11,17,12,17,5,18,9,18,10,18,11,18,
 あとはコード内で定数として利用、splitで分割して配列に取り込む等、自由に使えます。


<補足>

 ※先ほどのExcel関数計算部分を補足します。

  =IF(B10=1,","&AB$9&","&$AA10,"")

 日本語で書くと、

  もし、“セルB10”が「1」ならば、

   「,」という文字と、
    (&で文字をつなげて)
   “セルAB9”の文字と、($9はコピペしてもセルの“9(縦)”を固定する意味)
    (&で文字をつなげて)   「,」という文字と、
    (&で文字をつなげて)   “セルAA10”の文字と、($AAはコピペしてもセルの“AA(横)”を固定する意味)
   の文字を表示しなさい。

  でなければ(“セルB10”が「1」でなければ)、

   何も表示するな(””で空を出せという意味)

  をしなさい。

 となりますね。

 結果、例としては、一つのセルに、「」等のXとYの座標が入ってくることになります。

 詳細説明は以上です。



<その他思うところ>

 Excelを仕事の小技的に使うことの方が圧倒的に多いです。
 もう何年もExcelをExcelらしく、表計算、帳票、VBA、DB風利用などで使った覚えがないですね。。。
 ただ、細かい使い方を知っておけば、ちょっとしたときにササっと役に立つツールであることには変わりがないのでとても便利です。
 あとはガントチャート的な使い方でマネジメントとして使うくらいでしょうか^^;
 ベーシックがゆえにアイディア次第で便利に活用できますよね。
 これが、専用ツールとしてゴリゴリ作りこまれてしまうと融通も利かなくつぶしも利かない物となり使わなくなってしまう、そんな気がします。
 ExcelはExcelのまま、シンプルにいてほしいと切に願います。PowerPointも。

 他にも実際に使った事例などがあればいつか載せてみたいと思います。


- PDS PIS 研究室 室長 -

0 件のコメント:

コメントを投稿