おまえは今までにDBを検索してEXCELに貼り付けた回数をおぼえているのかw

# 仕方がないからといって検索した内容をファイルに出力したくない人（※シャア専用

日々の業務の中でDBを検索しないといけない時ってありませんか。
昨日までに食べた食パンの数とか。
集計しないといけないときありますよね。検索したらEXCELですよね。
日本人EXCEL大好きだし。

# 普通の人はこんな感じだろうな、と。

MySQL を検索した場合。ひとまず検索するのはみんなの情報スキマ。
最近 postgreSQL も操作するようになって
MySQL は Oracle色が強いのかなって感じはじめた今日この頃。

それにしても標準SQL規格とは。Oracle にもあるのですね。
DBA_TABLES とかいつも見ていた遠い昔。

```shell
taro@macbook-air[YAMADA]> desc information_schema.tables;
--------------
desc information_schema.tables
--------------

+-----------------+---------------------+------+-----+---------+-------+
| Field           | Type                | Null | Key | Default | Extra |
+-----------------+---------------------+------+-----+---------+-------+
| TABLE_CATALOG   | varchar(512)        | NO   |     |         |       |
| TABLE_SCHEMA    | varchar(64)         | NO   |     |         |       |
| TABLE_NAME      | varchar(64)         | NO   |     |         |       |
| TABLE_TYPE      | varchar(64)         | NO   |     |         |       |
| ENGINE          | varchar(64)         | YES  |     | NULL    |       |
| VERSION         | bigint(21) unsigned | YES  |     | NULL    |       |
| ROW_FORMAT      | varchar(10)         | YES  |     | NULL    |       |
| TABLE_ROWS      | bigint(21) unsigned | YES  |     | NULL    |       |
| AVG_ROW_LENGTH  | bigint(21) unsigned | YES  |     | NULL    |       |
| DATA_LENGTH     | bigint(21) unsigned | YES  |     | NULL    |       |
| MAX_DATA_LENGTH | bigint(21) unsigned | YES  |     | NULL    |       |
| INDEX_LENGTH    | bigint(21) unsigned | YES  |     | NULL    |       |
| DATA_FREE       | bigint(21) unsigned | YES  |     | NULL    |       |
| AUTO_INCREMENT  | bigint(21) unsigned | YES  |     | NULL    |       |
| CREATE_TIME     | datetime            | YES  |     | NULL    |       |
| UPDATE_TIME     | datetime            | YES  |     | NULL    |       |
| CHECK_TIME      | datetime            | YES  |     | NULL    |       |
| TABLE_COLLATION | varchar(32)         | YES  |     | NULL    |       |
| CHECKSUM        | bigint(21) unsigned | YES  |     | NULL    |       |
| CREATE_OPTIONS  | varchar(255)        | YES  |     | NULL    |       |
| TABLE_COMMENT   | varchar(2048)       | NO   |     |         |       |
+-----------------+---------------------+------+-----+---------+-------+
21 rows in set (0.01 sec)

taro@macbook-air[YAMADA]> 

```

postgreSQL を標準で検索した場合にはこんな感じ。
若干違いがあるの分かりますか。
いずれも縦の罫線「|」パイプで項目を区切っている書式で
MySQLチームは表っぽくするために上下左右も括る几帳面さ。


```shell
YAMADA => \d information_schema.tables;
                                    ビュー"information_schema.tables"
              列              |                型                 | 照合順序 | Null 値を許容 | デフォルト
------------------------------+-----------------------------------+----------+---------------+------------
 table_catalog                | information_schema.sql_identifier |          |               |
 table_schema                 | information_schema.sql_identifier |          |               |
 table_name                   | information_schema.sql_identifier |          |               |
 table_type                   | information_schema.character_data |          |               |
 self_referencing_column_name | information_schema.sql_identifier |          |               |
 reference_generation         | information_schema.character_data |          |               |
 user_defined_type_catalog    | information_schema.sql_identifier |          |               |
 user_defined_type_schema     | information_schema.sql_identifier |          |               |
 user_defined_type_name       | information_schema.sql_identifier |          |               |
 is_insertable_into           | information_schema.yes_or_no      |          |               |
 is_typed                     | information_schema.yes_or_no      |          |               |
 commit_action                | information_schema.character_data |          |               |

YAMADA => \q
```

information_schema は postgreSQLだけかと思ったら両方出てきて草。

## 美容整形スタート（MySQL）

MySQLの場合

まずEXCELの全セルを文字列にしてから貼り付ける
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/38693daa-2562-8798-e657-99b675a38ac0.png)

このままでもいいけど、やっぱりセルを分割してEXCELだから表にしたい

<details><summary>具体的な手順（省略ｗ</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/ac0731c0-0b93-0bae-d82b-4cc338b08d8e.png)

ひとまずセルを選択して
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/aab72a15-8b3f-1bf8-8c4a-dae4986ebe10.png)

区切り文字ウィザード発動。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/6f1929cc-1857-5618-1791-e7deceef5da1.png)

その他で「パイプ」で区切り
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/af2fdf00-08b2-0fb8-5ad9-ffe499e3dfce.png)

区切った後の項目を全て文字列に選択して「OKグーグル」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/7ffc5048-e3b7-0524-3a38-7219ac6865b5.png)

一応表っぽくなってきた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/d08b8eb8-1a7c-0a68-3057-238aca58852a.png)

再度一番左のセルを選択して
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/22a3332f-7f67-b838-0d26-4918efa9cdf4.png)

左方向にシフト
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/3e3bce43-678c-e049-5952-050c92edccf7.png)

項目名とデータの間に隙間ができるので
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/f6a3de2c-cc8a-f849-b5d5-7d37fb568fc4.png)

行を選択して削除
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/a7565140-dc54-5f72-9ed7-9f91eff7f613.png)

あとちょい。あとは全部を選択して
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/31b1a01e-7019-b003-11de-076492682eed.png)

</details>

罫線を引いておけば完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/7de15135-ef4c-78a4-a25a-35cb86b32831.png)

でもさ★
項目の先頭に空白があったり、項目のお尻には空白が詰まっていること
気になる人はいませんか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/63b59058-7d79-7f19-c7c7-12942f916792.png)

## 美容整形スタート（postgreSQL）

まずは全セルを文字列にしてから貼り付けする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/3ccc8778-bc04-17a6-96c6-83be026213f4.png)

<details><summary>具体的な手順（省略ｗ</summary>

一番左を選択してから
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/eb29fa19-bdc5-31b0-392a-b73a7dabfd6c.png)

区切り位置の指定ウィザード発動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/3cdec6d7-cbae-e287-b04f-92c98e994e2d.png)

変わらず「パイプ」。私はこれで会社をやめました（違
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/a4165da8-299d-44e3-2761-67af251a39f1.png)

全部を選択して文字列にしておく（変換されちゃうから
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/32ca8946-58b0-52fd-895f-be1e9b6f4024.png)

あとは選択して表にするだけ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/1c0b673b-47fc-d391-ca94-a9dad150ab69.png)

いらない行間を削除して
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/b74ea7dc-0490-05a2-6dd4-2c026e137b39.png)

</details>

罫線引いたら表になった
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/72633619-8bf2-a954-17cf-663df37b3775.png)

でもやっぱり、このあたり気になりませんか。
先頭の空白とか、項目がないはずなのに半角空白で穴埋めされたデータ。
いりませんよね。

やりたいことは・・「トリム」。

もちろん sql を terminal で実行したのを切り貼りするのではなく
mysql でも postgreSQL でも
SQLの検索結果をファイルに出力することできます。

そうすれば区切り文字がタブになるので簡単にEXCELはりつけできます。
でもサーバ上に出力されたファイルをローカルにもってくるのって
結構大変だったりしませんか。

そもそもファイルに出力した内容を外部に持ち出していいの？って。
面倒ですよね。

## そこでアレ。マクロの出番です

EXCELには好き勝手にマクロを登録することが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/33c29188-69c0-d10f-f019-a12a82c4e12d.png)

毎回マクロを作成するのは面倒ですよね。
そんな場合はアカウントに紐づく共通のマクロファイルに登録できます。

重要ポイント；これなら毎回マクロを作成しなくても使える。なんて神。

・ファイル名；PERSONAL.XLSB
・格納場所；C:\Users\TaroYamada\AppData\Roaming\Microsoft\Excel\XLSTART

```visualbasic
Option Explicit

Sub 選択した範囲をトリム()
'
' 選択した範囲をトリム Macro
'
    Dim c As Range
    Application.ScreenUpdating = False

    For Each c In Selection
        c = WorksheetFunction.Trim(c)
    Next c
    
    Application.ScreenUpdating = True
End Sub
```

そしてマクロにショートカットキーを割当。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/29490a9c-224c-93a4-33e0-aaf89983528d.png)

トリムのティーだ！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/1d1ad7a6-5f2c-13d4-5928-bf36ac8b5ff5.png)

MySQLでも
さっき表にした部分を選択してから
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/a7bb08d0-2965-08da-a1b8-03c1591cf423.png)

コントロールティー！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/4843e907-dfdb-d5b8-fdc8-59f5b0df1a57.png)
半角空白が全桁埋められていた項目もなくなっています。スッキリ。

postgreSQLでも
さっき表にした部分を選択してから
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/58b403a4-7ee3-2ada-b12f-fa3bb416e3b5.png)

コントロールティー！！
項目名とかちゃんと見えるようになったの分かりますかしら。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/77aca1c1-385b-709f-a4d7-93703e02eb47.png)

## まとめ

「私しか得しないニッチな技術」ってキーワードをみたらドキッて。
地味に便利なので誰かに伝えたくて投稿。

空白トリムくらいしてから提出してよって依頼元から嫌な顔をされるのを
数行のマクロとショートカットを使うだけで回避できます。

どうか、みなさんにしあわせが届きますように🎅