« 2008年06月 | メイン | 2008年08月 »

2008年07月26日

画像からGetPixelでピクセル情報を取得し、セルの色を変更2(Excel VBA)

前回の記事のVBAのプログラムを変更してパレットを変更するようにしてみました。
これで50色程度までなら元の画像と同じようにExcel上に表示できます。
(あまり意味はないVBAスクリプトですが^^;)

また、前回わかりやすいように冗長化していた部分を排除し、
さらに描画処理を一時的に停止することにより高速化しました。

※画像はあらかじめ50色以下に減色しておいてください。
※パレットを変更するので、他のExcelで開いているファイルは
閉じておいたほうがよいです。
※エラー処理は省略しているので、画像より大きい範囲に対して
 GetPixelしたりしないでください。。

Excel_color_P.png

VBAサンプルは続きから

あらかじめCommandButton1、Image1をUserFormに作成しておきます。
 今回もコードはUserForm1だけに書くだけでよいです。
 C:\test.bmp"にテスト用の画像を配置しておきます。
 (サンプルでは160*160まで。重くなるが、コード変更でさらに大きい画像でも対応可)



2008年07月21日

シマトネリコ、ガジュマルなど、観葉植物のその後

簡単ですが、観葉植物のその後です。
(数ヶ月でも植物は結構変わるものですね。
 写真がぜんぜん間に合っていないです。。) 
 
 
◆2008/05/10購入のシマトネリコ

shimatoneriko2.jpg
↑5月24日のシマトネリコ。

shimatoneriko3.jpg
↑5月24日のシマトネリコ。小さな新芽がでています。

shimatoneriko4.jpg
↑5月24日のシマトネリコ。別のところからも新芽がでています。

shimatoneriko_0713.jpg
↑7月13日現在。順調に成長しています。
 (購入時から比較して10〜15cmくらい成長)

 
その他の観葉植物は続きから・・・。

 
◆2008/3/15購入のガジュマル

gajyumaru3.jpg
↑5月25日のガジュマル。葉が落ちてきてしまいました。
 だんだん元気がなくなってきたため土に植え替えてみました。

gajyumaru_20080616.jpg
↑6月16日のガジュマル。しばらく外に移動しておきました。
  その甲斐あってか新芽もでて復活。(おそらく日照不足のせい?)
  7月現在、新芽も大きくなっています。
 
 
◆オリヅルラン 
oridururan_20080606.jpg
2008/06/06のオリヅルラン
きれいな白い花が咲き始めました。
写真が追いついていないですが、7月になり、
ランナーの葉がとても大きく伸びています。
(ランナーから根がではじめました)  
  
 
◆その他・・・。

・ポトスはどの株も順調に成長しています。
 (挿し木をしたポトスのうちの一つからから新芽がでて、
 成長しています。もう一つのほうはほとんど成長せず。)


・クロトンは全く成長していないように見えます。
 良くも悪くも買ったときからそのまま。。
 
   
・テーブルヤシは新しい葉が少し開きましたが、ほとんど成長は
 していないです。GWに水遣りが遅れ、少し葉先が枯れています。

 
・シュガーバインは一時期小さな新芽もでましたが、
 枯れてしまったため、7月19日に処分・・・。

syuga-bain02.jpg
↑7月13日の様子。倒壊してしまいました。
 このあと完全に枯死。根がぜんぜん伸びていなかったです・・・。

Excelアドインの作り方(ツールバーの作成と削除)

Excelでアドインを作成する方法が気になったので調べてみました。
以下のサイトが参考になります。

エクセル アドイン 作り方 第8回 - waste rest way
http://blog.goo.ne.jp/leapdys/e/bf48ff9d45364a3de9d66e23ee4b681a
 
 
VBAのウインドウで、ThisWorkBook上に
Private Sub workbook_addininstall()
'インストール時の処理(ツールバーの作成処理)
End Sub
 
Private Sub workbook_addinuninstall()
'アンインストール時の処理(ツールバー削除処理)
End Sub

と書くだけです。
 
ツールバーの作成のところに、
.OnAction = "マクロ1"
の記述がありますが、ここがボタンが押されたときに呼び出される関数で、この関数の定義を
標準モジュールに書いておけばOKです。

ExcelAddinToolbar2.png
※コードの内容は「エクセル アドイン 作り方 第8回」の内容より。
 

 
上記のサイトに書いてある通りに作成し、
  
メニューバーから、
ツール⇒アドインを選択すると以下の画像のようなウインドウが開くので、
チェックボックスをクリックし、OKを押して登録します。
 
すると、画像右のようなツールバーが現れます。
ExcelAddinToolbar.png
  
今回の例ではツールバーにニコニコマークみたいなものが現れましたが、
これは「FaceId = 59」の記述があるためです。
 
どのようなマークがあるかは以下のサイトに「 FaceId画像の一覧表示ツール 」
という便利なツールがあるのでこれで調べられます。
 
 
AddinBox(FaceId一覧)
http://www.h3.dion.ne.jp/~sakatsu/FaceIdBrowse.htm
 

2008年07月20日

画像からGetPixelでピクセル情報を取得し、セルの色を変更(Excel VBA)

画像からGetPixelでピクセル情報を取得し、セルの色を変更する Excel VBAのコードを書いてみました。
Excelで使える色数に制限があるため、うまくいかないこともありますが、
作ってしまったので載せておきます。

なぜこんなものを作ったかというと、以前の記事と組み合わせて、
画像からピクセル情報をテキストに落としたかったため。

C#を使えばすぐにできるのですが、Excelのセルにも反映させてたら
おもしろそうだと思ってしまったためです。思ったより苦労しました。
VBAでいろいろやろうとすると難しいです><


★概要
・画像を読み込み、Pixel情報を取得
・Excelのセルの色を取得した色に変更
・取得した値をセルの値として入力
excel_pixel_test.png
↑実行のイメージ
 ※実際はセルに値が入ります。
 ※Excelの制限により、うまく色がつかないことがあります。
  ⇒参考記事


※画像関連の主要コード(WinAPIを使って、hDCを取得するところ)は
 「Excel VBA質問箱 IV」の「 【54098】Re:フォーム上のイメージに文字を追加する方法」
 http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=54098;id=excel
 のコードを使わせていただきました。ありがとうございます。
 まだ未整理のため、使わないコードもまざっていますがご了承ください。

Excel_UserForm.png
↑あらかじめCommandButton1、Image1をUserFormに作成しておきます。
 今回、コードはUserForm1だけに書くだけでよいです。
 C:\test.bmp"にテスト用の画像を配置しておきます。
 (サンプルでは20*20まで。重くなるが、コード変更でさらに大きい画像でも対応可)



追記:
「excel vba ゲーム」で検索してみたら、
pacmanパックマン
http://www.geocities.jp/nchikada/pac/index.htm
を見つけました。
Excelのセルの色だけでアクションゲームを作ってしまっています。
これはすごいです。まねできません・・・。


追記2:
エクセルを使って動画にしている人がいました(笑)
さすがにリアルタイムではなくて、
動画からビットマップ抜き出し
⇒減色ツールで減色
⇒Excelのセルに反映
⇒Excel画面のスクリーンショットを取る
⇒上記をつなげて動画にする
のようにしているみたいです。

エクセルでひぐらしのなく頃に解OP‐ニコニコ動画(夏)
http://www.nicovideo.jp/watch/sm1642964

おまけを解説してみた‐ニコニコ動画(夏)
http://www.nicovideo.jp/watch/sm2026262


◆おすすめ減色ソフト
Padie - 高精度な減色専用ツール
http://www.vector.co.jp/soft/win95/art/se063024.html

Excelでセルの色を変える - Interior.Colorでうまくいかない(Excel VBA)

前回のExcel VBAでは、オレンジが46など、
Excel VBA特有の色の指定の仕方をしました。

⇒例)
  Range("A1").Interior.ColorIndex = 46


ところで、Excel VBAでは、このような指定の仕方以外にも
RGBを指定して色を変えられるようです。
⇒例)
  Range("A1").Interior.Color = RGB(255, 255, 0)

そこで、その方法を使ってみましたが、うまく行かないこともあるような・・・。
理論上は任意の色を作り出せるはずですが、できないことがあります。
(私のやり方が悪いのかもしれないですが・・・)


ためしにサンプルを作ってみました。
RGBの値を1ずつ変えながら実行するだけのものです。
本当ならきれいなグラデーションとなるはずが、色が分離してしまっています↓

Excel_Cell_Color_1.png
↑色が分かれてしまっている(Excel VBAでのセルの色分けテスト)
 
 
Vcs_Color_2.png
↑本来はこうなるはず(Visual C#での色塗りテスト)
 
  
もう一例やってみたので紹介します(続きから)

やはりだめなよう。
Excel_Cell_Color_2.png
↑色が分かれてしまっている(Excel VBAでのセルの色分けテスト)
 しかも、途中に変な灰色がはいっている・・・。
 
 
Vcs_Color_1.png
↑本来はこうなるはず(Visual C#での色塗りテスト)


回避方法がわかる方、教えてください・・・。

追記:
以下のページに同じ悩みがありました。やはり同時に使える色が限られているようです。
Excelのセルの色の変更方法

同時に使える色が限られてはいますが、
下記のように、カラーパレットを変更すると任意の色にすることはできます。
ThisWorkbook.Colors(1) = RGB(255, 123, 0)
 
以下のページが参考になります。
エクセル:カラーパレット
http://adamontn.blog.ocn.ne.jp/analyst/2007/05/post_4164.html
 
 
※カラーパレットの変更はExcelのメニューバーの
 ツール⇒オプション⇒タブ「色」 からも可能
Excel_Option_Color.png

2008年07月19日

Excelのセルの色を取得、変更する(Excel VBA)

Excelのアドインである「らくらく罫線」がすばらしいため
ExcelのVBAに興味がわきました。
VBAで簡単なコードを作ってみたので載せておきます。


◆概要

☆以下の動作をするテストプログラムです。
 ・セルの値に応じて、自動でセルの色を色分けする(今回は1〜3の3通り)
 ・セルの色に応じて、自動でセルに数値を記入(今回は1〜3の3通り)
 ※いずれもフォームにボタンを配置し、ボタンをクリックしたときの
  イベントの中のコードのイメージです。


VBA_Sample_rei.png
↑マクロ実行例  ※あらかじめセルに1〜3の数値を入れた物を用意します。
 ※今回は1が黒、2がオレンジ、3が赤に変換されます。
 ※範囲は16*16個まで。


VBAマクロの中身は続きからどうぞ





◆リンク
Excel VBA 入門講座
http://excelvba.pc-users.net/

Excel VBA Reference   ★文字色とセルの塗りつぶし設定★
http://www.big.or.jp/~seto/vbaref/vbaref4.htm

ColorIndexプロパティ値一覧:Excel エクセルの使い方-マクロ/VBA
http://www.relief.jp/itnote/archives/000482.php

2008年07月07日

表をテキストで表現する - らくらく罫線

おもしろいソフトを見つけたので紹介します。
Excelで表で作ったものをテキストに変換できる「らくらく罫線」
というExcelアドインです。

Excelで作成し、変換できるため、とても便利です。
Excelとの連携がおもしろい、便利だと感じました。
(このようなソフトを作ろうと思ったのですが、すでにこれがありました。
欠点があるとすればExcelのある環境が必要なことぐらい。)

rakurakukeisen.png
↑作成イメージ。操作は簡単。

rakurakukeisen2.png
↑複雑な表もあっというまにテキストにできる。

らくらく罫線のダウンロード(Vector)
http://www.vector.co.jp/soft/win95/net/se336721.html

◆おまけ
以下が実際のテキストです。
※等幅フォント(MS ゴシックなど)で見てください。
※プロポーショナルフォント(MS Pゴシックなど)で見るとずれてしまいます。


  ┌───────────────────────────┐
  │ 2008年7月 │
  ├───┬───┬───┬───┬───┬───┬───┤
  │ 日 │ 月 │ 火 │ 水 │ 木 │ 金 │ 土 │
  ├───┼───┼───┼───┼───┼───┼───┤
  │ │ │ 1 │ 2 │ 3 │ 4 │ 5 │
  ├───┼───┼───┼───┼───┼───┼───┤
  │ 6 │ 7 │ 8 │ 9 │ 10 │ 11 │ 12 │
  ├───┼───┼───┼───┼───┼───┼───┤
  │ 13 │ 14 │ 15 │ 16 │ 17 │ 18 │ 19 │
  ├───┼───┼───┼───┼───┼───┼───┤
  │ 20 │ 21 │ 22 │ 23 │ 24 │ 25 │ 26 │
  ├───┼───┼───┼───┼───┼───┼───┤
  │ 27 │ 28 │ 29 │ 30 │ 31 │ │ │
  └───┴───┴───┴───┴───┴───┴───┘

2008年07月06日

sftpでファイルを自動転送(TeraTermマクロ)

sftpでファイルを自動転送する簡単なTeraTermマクロを作ってみました。
いつも同じディレクトリにファイルを転送するような場合に有効です。
(ただし、パスワードを平文で書いているのでセキュリティ的には×です)

なんてことはないTeraTermマクロなのですが、文字列をつなげるのに
strconcatをつかうのがポイントです。


◆使い方

1.マクロに書いてあるユーザ名、ホスト名、パスワード、アップロードディレクトリ
等をあらかじめ書き換えておく。(★部分)

2.転送元マシンにログインする

3.マクロを実行

4.自動的に対象マシンにログインされ、
 ダイアログが表示されるのでディレクトリ名を入力

5.アップロード完了


マクロは続きからどうぞ





リンク
TeraTermのダウンロード(窓の杜)
http://www.forest.impress.co.jp/lib/inet/servernt/netuty/utf8teraterm.html