[Excel] 画像の貼り付け方法とデータサイズの圧縮についての Tips

Excel のシートに画像を貼り付ける一番手っ取り早い方法は、クリップボードに画像をコピーした後、シート上にペーストする方法だろう。ただし、この方法では、画像は bmp (ビットマップ) 形式で貼り付けられる。画像を大量に貼り付けていくと、それに伴って Excel ファイルそのもののサイズが肥大化していくうえ、図の圧縮 (書式 - 図の圧縮) ができない。

画像を貼り付ける際は、[挿入] - [図] で、画像ファイルを貼り付けていく方法の方が、データサイズという観点ではより望ましい。この方法であれば、データサイズを圧縮することができる。

エビデンス作成時に大量の画像ファイルを貼り付ける場合には、キャプチャソフトの設定をファイルとして出力するようにしたほうがよさそうだ。

[Excel] データ個数を数える

範囲内のセルに入力されている (空白ではない) セルがいくつあるかどうか数える関数。

A1 から A10 のセルで空白ではないセルをカウント (範囲は複数列を指定できる)。
=COUNTA(A1:A10)

[FUJITSU] ノート PC のキーボードからテンキーを設定・解除

アルファベット部分をテンキーに設定することができるノート PC も多い。
しかし、いつの間にか設定が変わっていて、英字が入力できん! となる場合がある。

メーカーによって若干異なっているので統一感がないように思うのだが、FUJITSU の場合は、Num Lk キーで設定・解除ができた。

[UT, IT, ST] 開発時のテストフェーズについて

システム開発においては、バグは必ずあるものとして考え、それをより早い段階で発見するこが望ましい。そういった意味では、テスト工程はコーディングを行うよりも重要であると思う。
プロジェクトでは以下のようなフェーズでテストを行っていくことが多い。
なお、以下は経験上の話であることをお断りしておく。

UT (Unit testing) = 単体テスト

プログラミングによって手を入れた部分のみを対象としたテスト。
ページ単位、画面単位で完結している。

ここでは基本的なバグについて注意を払わなければならないのだが、この段階で徹底的にバグをつぶしておくことが理想であると思う。
見積もりの段階でテスト込みの工数算出を行うべきであり、(経験から言うと) この部分をないがしろにしている (充分な期間を取っていない、テスト方針が定まっていない等) プロジェクトは、後のフェーズで炎上する確率が非常に高い。

データの出入力がある場合、最小値と最大値の入力を行って、データベースアクセスの部分はデータ型によるオーバーフローや NULL のチェック、想定した通りの登録や更新・削除が確実に行われているかどうかは特に気をつける。
異なるシステム (古いシステムの移行等) からのデータ移行がある場合は、文字コードによるバグなどもよくあるので、どのようなデータが入っているのか確認しておいたほうが良い。

このテストでは、テストを自動化している場合も多いだろうが、
基本的な観点を理解していないと成果が出ない。

IT (Integration testing) = 結合テスト

修正を行った部分をシステムに組み込んでみて、
それぞれがどういった影響を及ぼすかの検証を行う。

ここからは、テスト時に「シナリオ」を作成するだろう。
シナリオとは、いわばユーザーの振る舞いであり、システム稼動後にユーザーがどのような操作をするのか、今回修正対象となった部分はどのような動作を想定しているのかを具体的なイメージをもってテストケースを作成する。

プロジェクトの方針によってシナリオの書き方は変わってくるだろうが、特にデータベースへの登録や更新、削除などの一蓮の流れに重点を置いてシナリオが書かれることが多い。

ウェブシステムの場合は、ページの遷移が肝となるが、
セッションの管理なども特に気をつけてテストしなければならない。

新規のシステムを作っている場合を除き、修正を行っていない部分に新たなバグが発生していないか気をつけなければならない。今回修正したことによって新しいバグが生まれてしまっている場合も多いからだ。

ST (System testing) = システムテスト

プロジェクトによっては結合テストと一緒になっていることも多いが、今回のプロジェクトの対象となるシステムが、他のシステムと相互に影響を与えている規模の大きなシステムの場合は、このテストを行う。

今回対象となる A システムで登録したデータなどを B システムでも参照していたりする場合には、その部分の連結にバグがないかどうかをテストする。

結合テストと同じくシナリオに沿ってテストが行われ、内容的にも近いものがあるが、より実稼働環境に近い動きを想定しテストを行う。

UAT (User acceptance testing) = 受け入れテスト

納品先のユーザーにシステムを操作してもらうフェーズである。
ただし、このフェーズではユーザーにテストをしてもらうというよりも、ユーザーが想定している要望通りの動作をしているかどうかのチェックの意味合いが強い。
また、ここまでくると外部の人間はプロジェクトから離れることも多々ある。

ユーザーは操作性やデザインなどの細かい部分について要望を出してくる場合もあるが、要望をすべて聞いているとシステムが完成しない。また、実装を根底から覆すような要望もよくある。

期限を設けることや、バグ以外の要望は次のプロジェクトが立ち上がった際の課題とするように検討するべきだ。
このあたりは契約によって異なるが、リーダーがイエスマンだったり、立場上 断りにくいポジションにある会社の場合は、無理な注文でもさらに対応しなければならず、結果として炎上する話もよくある。


テストは実際の現場の方針によって左右される部分が大きいが、
できるだけ初期の段階で不具合をつぶしていくことが大事である。

[Excel] ブックのファイル名とパスを取得する cell ( filename ) 関数

現在の Excel ブックのファイル名とパスをシートに表示させたいときには、CELL で filename を指定する。

=CELL("filename",A1)

しかし、注意しなければならないのが、この関数はファイルをいったん保存しないと空白 (空) が返ってくる。これは、保存してあるファイルであっても右クリックから 「新規作成」 しても同様である。

保存することでファイルのパスが通り、ファイル名とパスが表示される。

[SQL Server] データが重複してしているレコードを抽出する

どの値が重複しているか不明で、そのレコードを取得したい場合は、以下のような条件で検索する。
なお、この例では、一時テーブルを使用している。
CREATE TABLE #T1
(
 ID NUMERIC(3)
 ,GIVEN_NAME NVARCHAR(50) 
)

INSERT INTO #T1 (ID,GIVEN_NAME)
VALUES (11,'Taro'),(12,'Jiro'),(100,'Saburo'),(11,'Siro'),(15,'Goro'),(100,'Rokuro'),(17,'Sitiro')

-- ID が重複しているレコードを抽出する。
SELECT * FROM #T1 T1
WHERE EXISTS
(
 SELECT ID FROM #T1
 WHERE T1.ID = #T1.ID
 GROUP BY #T1.ID
 HAVING COUNT(*) > 1
 
)
ORDER BY ID

DROP TABLE #T1

結果は以下のようになる。
ID が 11 と 100 のレコードで重複が発生していることがわかった。
ID                                      GIVEN_NAME
----------------------- -----------------------
11                                      Taro
11                                      Siro
100                                     Rokuro
100                                     Saburo

(4 行処理されました)

[SQL Server] データベースのテーブルやビューなどの一覧を取得する

-- テーブル一覧を取得。
SELECT NAME FROM SYSOBJECTS WHERE XTYPE = 'U';

-- ビュー一覧を取得。
SELECT NAME FROM SYSOBJECTS WHERE XTYPE = 'V';

-- ストアド一覧を取得。
SELECT NAME FROM SYSOBJECTS WHERE XTYPE = 'P';

-- シノニム一覧を取得。
SELECT NAME FROM SYSOBJECTS WHERE XTYPE = 'SN';
取得項目は name 以外にも色々とあり、xtype はこれ以外にもある。
システムオブジェクトについての詳しい情報は、以下のページにまとめられている。
sys.sysobjects (Transact-SQL) - TechNet

[SQL Server] テーブルのデータから INSERT 文を生成する

SQL Server Management studio (SSMS) には、テーブルに格納されているデータから INSERT 文を生成する機能がある。
  1. 対象のデータベースを右クリックし、[タスク ] - [スクリプトの生成] をクリック。
  2. 「スクリプトの生成とパブリッシュ」 が表示されるので、画面指示に従う。
  3. 注意点として、このまま画面指示に従っているとテーブルの構造 (スキーマ) しか出力されない。スクリプト生成オプションの設定で、詳細設定ボタンを押下、「スクリプト生成の詳細オプション」画面を表示する。

    ここでかなり細かく出力内容を設定できるのだが、「スクリプトを生成するデータの種類」を「データのみ」に設定すると、INSERT 文のみ出力される。
なお、ファイルに保存以外にも、クリップボードにコピーしたり、新しいクエリウィンドウに出力することもできる。

[Facebook] イベント日時の期間設定

Facebook で新しいイベントを作成する際に、期間を設定したい時がある。
作成時にこの画面を見ただけではどうやるのだろう? と思ってしまう。

これは 終了時間 をクリックすると、もう一つ日付の入力フィールドが表示される。
[ 終了時間 ] の方で期間を設定すれば良い。

パッと見ただけではわかりづらいね。
しかもこういうのは仕様がいきなり変わって変更されていることもあるし。


[Picasa] 右クリックからの 「開く」 に Photoshop を手動で追加

Picasa の便利機能として、右クリックから特定のアプリケーションで開くというものがある。
たいていの場合は登録済みのアプリケーションが表示されるようになっているのだが、Windows のアップグレードを行ったらこの値が変わってしまい、Photoshop で開けなくなってしまった。
調べてみると、Picasa の 「開く(W)」 は、レジストリに登録してあるものを使用しているようだ。
  1. レジストリエディタを起動する。ファイル名を指定して実行 (Windowsキー & R) → regedit
  2. 以下の場所を開く。
    HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.jpg\OpenWithList
  3. この例では 「C」の値をペイントから Photoshop.exe に変更した。
ペイントが Photoshop に変更された!<br> 他のアプリケーションも同じ要領で登録できるはず。

[SQL Server] 8115 エラー

numeric をデータ型 numeric に変換中に、算術オーバーフロー エラーが発生しました。

数値型の変換に失敗している。NULL をセットしようとした場合にも発生する。

[SQL Server] 種類 'System.OutOfMemoryException' の例外がスローされました。 (mscorlib)

Management Studio (SSMS) でクエリ実行時に、結果セットが巨大である場合に発生するメモリ不足エラー。大きめのテーブルの結果セット (グリッド) を全選択してそのままコピーしようとすると発生したりする。
32 ビット OS の場合、そもそも SSMS が 2G の制約を受け、かつ、結果をグリッド表示する場合は 64 KB まで。結果をテキスト表示する場合は 8 KB までという制約があるらしい。

解決方法は以下の 3 つだが、最後のコマンドはややハードルが高いが、自動化処理などの応用も利く。

  1. 結果をテキストで表示
    [クエリウィンドウで右クリック] - [結果の出力] -  [結果をテキストで表示]
  2. 結果をファイルに出力
    [クエリウィンドウで右クリック] - [結果の出力] -  [結果をファイルに出力]
  3. sqlcmd ユーティリティの使用
    コマンドラインから SQL を実行する。
    http://technet.microsoft.com/ja-jp/library/ms162773.aspx

[ 参考 ]
"System.OutOfMemoryException" exception when you execute a query in SQL Server Management Studio - Microsoft