Excel VBAで各ファイル各シートを1シートにまとめる

各ファイル、各シートにばらばらに存在するデータをコピーし、1シートにまとめデータベースを持ってしまえば、処理が楽になる事がありそうです。そんな時に使おうと、1シートにまとめるExcel VBAのマクロを作ってみました。

シート最終行の取得は、No.8 ワークシートの最終行、最終列を取得する(なにぬねのーつ)を参考にしました。

MySQLコマンド覚書

MySQLで何かする際に、どのようなコマンドを打てばよいかを覚書として書き留めました。

ログインとログアウト

MySQLで何か行うために、まずはMySQLにログインします。

端末からログインするには、

と打ち、パスワードを入力すればログインできます。

ログアウトは

詳細:MySQLに端末からログインするには?

データベース

MySQLでは、

  1. MySLQの中にデータベースがあり
  2. データベースの中にテーブルがあり
  3. テーブルの中に各データが格納されている

という階層構造が取られています。

先ほどMySQLにログインしたので、次はデータベースを見てみます。

データベースの一覧を見る

show databases;でデータベースの一覧を確認できます。

新しくデータベースを作る

create database `データベース名`;で新しくデータベースを作れます。今回試しにstlibというデータベースを作ってみます。`(backtick)は小文字です。’(シングルクオーテーションマーク)だと上手くいかないようです。

データベースを使う

use データベース名;でデータベースを利用できるようになります。

データベースを削除する

drop database データベース名; でデータベースを削除します。

テーブルを使う

データベースの中にテーブルがあります。

データベースの中身であるテーブルの一覧を確認

show tables;で、データベースの中にどのようなテーブルがあるのかを確認できます。

先ほど作ったばかりのstlibには、まだテーブルが存在しない事が確認できます。

テーブルを作成

create table テーブル名 (仕様); でテーブルを作れます。

テーブルの中身の表示

テーブルの中身を確認

select * from テーブル名でテーブルの中身を確認できます。

先ほど作ったwlistの中身を見てみると、まだ何も中身が入っていない事が分かります。

テーブルの中身の内、条件を満たすデータを抽出

select * from テーブル名 where 条件;で、条件を満たすデータを抽出出来ます。いくつかデータを登録した後に、試しにcurがKRWであるデータを抽出してみます。

テーブルの中身を並べ替えて表示

select * from テーブル名 order by ソートするカラム名;で、並べ替えて表示できます。試しにcodeで並べ替えて表示します。

テーブル内容の操作

テーブルにデータを追加

insert into文でデータを追加できます。

入力方法は複数の種類があります。

参考:データの追加(DBOnline)

テーブルのデータを削除

delete from テーブル名 where 条件;で、条件を満たすデータを削除出来ます。間違えて必要なデータを消さないように、事前にselect文で抽出の条件に問題無い事を確認してからdelete文を使うのが良いとされています。例えばwlistのcurがusdであるデータを削除する場合は下記のコマンドです。

テーブルのデータの編集

update文でテーブルのデータを編集します。試しにwlistのcodeを7475:jpから7475.jpへと変更します。

テーブルのカラムの追加と削除

alter table テーブル名 add カラム名 データ型;でカラムを追加できます。試しにテーブルwlistにカラムperを追加してみます。

alter table テーブル名 drop カラム名;でカラムの削除ができます。先ほどのカラムperを削除してみます。

その他

データベースのユーザー追加

データベースのユーザー追加は、

GRANT ALL PRIVILEGES ON データベース名.* TO ユーザー名@localhost IDENTIFIED BY “パスワード”; です。データベース名とユーザー名は同じで構わないようです。パスワードは設定します。

このコマンドは、データベース「データベース名」のすべての操作を許可するという意味です。データベースを操作されないためにも、パスワードは破られにくいものが良いです。

ユーザーを追加しておけば、他のソフトウェア(例えばpythonやphp)を設定すれば、MySQLのデータベースにアクセスが可能になります。

設定を反映

flush privileges; で設定が反映されるようです。

体重計を買いました→ダイエットを始めます

体重計を買いました。

初めて体重計を購入しました。今までは体重計が無くても平気だったのですが、最近出たお腹が引っ込まなくなり、健康管理のために必要だと考え、購入しました。

買ったもの

買ったのは、ドリテック 体重体組成計 BS-910-WTKD 【ビックカメラグループオリジナル】です。体重だけではなく、体脂肪率や体水分率、筋肉量や骨量を測定できる機械です。

このような機械は、実は体重計ではなく、体組成計と名前がついているようです。

使い勝手

体重計としてはコンパクトで、幅218mm、奥行188mm程度です。このように小さいので置き場所に困りません。その上おしゃれですので、十分満足のいく商品です。

ただ体重以外の測定をする場合、最初直感で使いこなせない難しさがあると思いました。例えば設定ボタンを3秒以上長押しして情報を登録する等、説明書無しでは気付かない機能が付いています。(勿論説明書を読めば問題なく使えます。)

この他、体水分率のように、あまり意味のない(知って何が分かり、どう変化させるのが望ましいか不明)指標も邪魔な気がします。

そうは言えど、機能に上記以外の不満は無く、値段の割に高機能で十分満足な機械だと考えました。これを買ったビックカメラのお店でも、人気商品である旨が掲示されていました。

ダイエットを始めます

体重計を買った事を機に、BMI指数等の健康指標をいろいろ調べてみた結果、私は適正な状態と比べて少し太っている状態である事を知りました。

これを受け、ダイエットを始めます。現在体重は61.5kgでしたが、55kgを目標にします。

ホームページをリニュアールしてみた感想

ホームページをリニューアルしました。まずは今回のリニューアルによる変化を紹介します。そしてリニューアルの過程で私が何に気付き、どう思ったかについてまとめ、投稿します。

ホームページのリニューアル

旧ホームページ

旧ホームページは下図のレイアウトでした。プロが作ったサンプル素材をベースに編集しており、デザインそのものは気に入っていました。ただしスマホには対応しておらず、レスポンシブデザインに変更したいと考えていました。

新ホームページ

新ホームページは下図のレイアウトです。こちらもプロが作ったサンプル素材をベースに編集しました。無料で使わせて頂いています。画像はテンプレートのままですが、変更する必要も少ないと考え、一旦そのまま運用しようと考えています。

その他のページの更新有無

ホームページ以外にも、ホーム直下のいくつかのページを更新しました。プロフィール初音ミクオリジナル曲のページは更新し、レスポンシブデザインになりました。

一方でKapokの掲示板は、レスポンシブデザインにするとダサくなる様子でしたので、移行を諦めました。WordPressブログは既にレスポンシブでしたので、特に変更ありません。

所感

時間がかかった

ホームページリニューアルには、考えていたよりも多くの時間がかかりました。

当初コンテンツそのものには手をつけず、デザインのみを変更するつもりでいました。ところが、デザインの変更によりコンテンツの編集やテーブルへの移行が必要となった事で、予想よりも多くの編集作業がありました。

それに加えてゴールが近付いたタイミングで、追加で行ないたい変更(ソーシャルボタン設置や新着記事の表示)が出てきました。ゴール直前にもっと良いものを作ろうとした結果、時間を取られました。

このように、デザインの変更によるコンテンツ編集が必要となった事、および新しく設置したいものが見つかった事、の2点により、予想より多くの時間が取られました。

面白かった

ホームページリニューアルは面白いものでした。ご飯を食べる時間や眠る時間が惜しく感じる程でした。

何が面白いのかはうまくは説明できません。自分のホームページのソースコードの理解が深まる事が嬉しいのか、仕事と違いとりあえず着実に前進している作業そのものが好きなのか、素人なりに考えてプロっぽいホームページを構築しつつある事に対する誇りか、htmlやphp、MySQLが以前よりも手早く編集できるようになっていた事で賢くなったと実感できて嬉しいのか、いくつかの理由はありそうです。

いずれにしてもこの年になって熱中できるものがあるとは、幸せなものです。

エンジニアの気持ちが少し分かった

上記の通り、私のホームページは私が楽しんで更新しました。ただ、これを仕事にしているエンジニアの方は大変だと思いました。

最初の方は工程も不明確で時間が読めないですし、思ったよりも時間が取られる箇所が出てきたり、ゴール直前の仕様変更があったりしました。私はゴールデンウィークで遅れても余裕でしたので良かったのですが、もしもこれが仕事で納期ギリギリであったとしたら泣きたくなりそうです。

コピペは偉大

今回、コピペの力を実感しました。

プロがデザインしたテンプレートをコピーして利用したので、私のような素人がプロっぽいデザインのホームページを作成できました。半ばCMS(コンテンツマネジメントシステム)化していた旧ホームページのphpコードも、かなりの部分をコピペで使い回す事ができました。新着記事を表示するためにMySQLでデータベースを拾う部分もほとんどコピペです。

コンピューターの強力な武器の1つはコピペでしょう。どう既存のものをコピーするかのスキル、既存のものを探すスキル、は日曜エンジニアには大切だと良く分かりました。

2台のPCを1組のマウス・キーボードで操作するためのスイッチを購入

2台のPCを1組のマウス・キーボードで操作するには、エレコム KVMスイッチ キーボード・マウス用 手元スイッチ付 ブラック KM-A22BBKが便利です。

何故この製品を買ったか?

私は自宅で、普通のWindowsのPCと、サーバーとしてUbuntuのPCの2台のPCを利用しています。スペースの関係で、2台のPCのマウスとキーボードは共通です。今まではマウス・キーボードをUSBハブに挿し、USBハブごと使うPCに差し替える事で切り替えていましたが、少し面倒でした。

そんなときにビックカメラでこの製品を見つけ、思わず購入してしまいました。ただの切り替えスイッチにもかかわらず数千円ですので割高感はありましたが、一般的なPC周辺機器と比べれば需要が極めて少ないのでしょうから、商品化されている事そのものに感謝しつつ高値掴みしました。

製品について

製品は1台目PCに挿すUSB端子、2台目PCに挿すUSB端子、PC切り替えスイッチ、入力用USBポート(2つ)から構成されます。2つのUSBポートにはマウス・キーボードを挿す事を想定しているようですが、USBハブを挿してポートを増やしても機能するようです。

スイッチとUSBポートはマグネットのシールを付けて、金属につけておけるようになっています。また、2台のPCの内の片方をシャットダウンすると、自動的に電源がついている方のPCへの入力にスイッチが切り替わるようです。このように、なかなか気が利いた機能があり便利です。

Excel VBAでフォルダ内の各ファイルの指定シートを一括削除する

Excelシート操作の自動化に関するExcel VBAマクロを投稿します。

フォルダ内の各ファイルの指定シートを、一括で削除したい場合に使うマクロを作成しました。このマクロを記述したファイルを同じフォルダに置いて、マクロを実行して使います。

2行目:フォルダ内のファイルを取得します
5行目:ここに消去したいシート名を記述します
15行目:シートを消去する際に警告が表示される事でマクロの動作が一時停止しないように、警告表示機能をOFFにしておきます。

フォルダにExcelファイル以外のファイルが存在している場合や、ファイルに指定したシートが存在しない可能性は想定していません。

Excel VBAでExcelのテーブルをhtmlテーブルのソースに変換する

ブログに投稿したいExcelテーブルを作成した際に、スクリーンキャプチャではなくhtmlテーブルにして投稿できればと思う事があります。そのような時のために、Excelのテーブルをhtmlテーブルのソースへと変換するExcelマクロを組んでみました。

動作

元のテーブル

例えば下図のExcelテーブルをhtmlで表現したい場合を考えます。

マクロの実行結果

今回組んだマクロは、Excelテーブルの一部を選択した状態で実行します。するとマクロが書かれたExcelブックの最初のシートのB5セルに、htmlテーブルが出力されます。

ソースコード

ここで、

テーブル左上行 CurrentRegion.Row
テーブル左上列 CurrentRegion.Column
テーブルの高さ CurrentRegion.Rows.Count
テーブルの横幅 CurrentRegion.Columns.Count

を用いてテーブルの領域を示すパラメータを取得しました。

後は変数tstrにテーブル情報を追記し続け、最後に出力して終わりです。

Excel VBAで、シートが存在していなければ作成する

Excel VBAで、シート名からシートの存在有無を確認し、もしシートが存在していなければ、新規でその名前のシートを作成するコードを書きました。

コード

シートの存在を確認する「sheetExists関数」と、シートを作成する「mksheet」、調べたいシート名をmksheetに渡すmainの3つのプロシージャで構成しています。

実行結果

元からあったaaaシートに加えて、マクロ実行後にbbb,ccc,ddd,eeeという名前の新しいシートが作成されました。

参考:Excel VBA If WorkSheet(“wsName”) Exists [duplicate]

UbuntuにKVMをインストールして仮想OSを動かすには?

UbuntuにKVMを導入し、仮想マシンを動かすまでの覚書です。KVM関係のパッケージをインストールし、ゲストOSのisoファイルを準備、仮想OSをインストールして、起動してみました。

各種ファイルの取得・導入・設定

パッケージの導入

まずは必要なパッケージを導入します。

KVMをインストールする(Qiita)が参考になります。

ゲストOSのisoファイルの準備

KVMで何かOSを動かすには、動かすOSのisoファイルが必要です。

例えば、CentOSを動かす場合は、Download CentOSから取得します。今回CentOS7の最小版を使ってみます。

ダウンロードしたディスクイメージは、/var/lib/libvirt/images/に置いておきます。

仮想OSをインストールする

コマンドでインストールします。rootで実行しました。

いくつかのオプションがあります。–nameでは、仮想マシンの名前を付けます。ここではvm02cと名付けています。–memoryはメガバイト単位で、–diskのsizeはギガバイト単位のようです。–cdromには、isoファイルの場所を指定します。

networkのオプションは、接続方式を選びます。とりあえず動かすにはbridge接続で良いです。ブリッジ接続とは「橋渡ししてネットワークを繋げる」イメージです。

ブリッジ接続 (bridge connection)

コマンドを実行した後は、OSのインストーラーの指示に従いインストールします。

仮想OSを動かす

仮想OSの起動と終了

ホストOSのターミナルで、 virsh start vm02c と打ち仮想マシンを起動します。ここで「vm02c」は、さっき名付けた仮想マシンの名前です。

virt-viewer vm02c で起動したマシンの様子を確認します。

終了するには、ゲストOSで、shutdown nowと打ち込みます。ホストOSで、virsh shutdown vm02cとしても良いようです。強制終了(電源コードを抜くに相当)は、virsh destroy vm02cです。

仮想OSの種類の確認

インストールした暫く後に、再び仮想OSで遊ぼうとしても、何を導入したのかを忘れている事があります。

KVMのマシンを知るにはホストOSのターミナルで virsh list –all です。オプション–allをつける事で、停止状態のOSも確認できます。

VirshコマンドによるKVMゲストOSの管理

仮想OSの削除

仮想マシンを削除するには、virsh undefine vm02cです。

CentOSのネットワーク設定

この方法で導入したCentOSは、このままではネットワークに繋がりません。(ホストOSがUbuntuのデスクトップ版であれば、この方法でも最初からネットワークに繋がっていますので楽です。)

CentOSをネットワークに繋げるために、私はONBOOTの設定をyesに変更しました。

/etc/sysconfig/network-scripts/ifcfg-eth0 にネットワーク設定のファイルがありますので、最終行 ONBOOT=yes に変更し保存します。そうすれば起動(Boot)時にネットワークに繋がります。

ネットワークの項目の意味は、下記のリンクが参考になります。

CentOSのネットワーク設定を手動で行う方法

ONBOOTの設定後に再起動すれば、私の環境ではネットワークに繋がるようになりました。

ネットワークに繋がれば、 yum -y update でアップデートが出来ますし、多くのコマンドの導入も可能になってきます。

Ubuntuでスクリーンショットを利用する

Ubuntuも他のOS同様にスクリーンショットを利用できます。

PrintScreenキーで撮る

  1. 画面全体を撮る:PrintScreen
  2. 指定範囲を撮る:Shift + PrintScreen
  3. 指定windowを撮る:Alt + PrintScreen

便利なものです。特に2番目の機能は、ブログ記事投稿でも活躍しそうです。

ターミナルでコマンドを使い撮る

下記の記事の通り、PrintScreenキーを使わずとも、端末(ターミナル)から撮れるようです。

参考:Ubuntuで端末からスクリーンショットを撮る方法まとめ(Qiita)