Programing Memoの最近のブログ記事

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

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

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

Excel_color_P.png

VBAサンプルは続きから

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回」の内容より。
 

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

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

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


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


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


◆概要

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


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


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

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

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


◆使い方

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

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

3.マクロを実行

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

5.アップロード完了


マクロは続きからどうぞ

テキストファイルを指定すると、そのテキストの周りにテキストで
枠をつけるPerlスクリプトを作成してみました。
(但し、等幅フォントでないと表示がずれます)

最近では需要はあまりないかと思いますが、
メールなど、テキストベースの物を作る際に役に立つと思います。

・使い方
1.「設定」部分を書き換える
 ・読み込むディレクトリ、ファイル名
 ・結果出力ディレクトリ、ファイル名
2.変換ファイル作成
 ・読み込むディレクトリ、ファイル名
  で指定したファイルに変換したい文字列を書き込む
3.変換スクリプトを実行する
4.結果出力ディレクトリ、ファイル名
  で指定したファイルに変換後の文字列が出力される

※「設定」の「部品」の部分を変えるといろいろな枠にすることができます。

・実行例:
D:\Data\temp>textConv.pl
書き出したファイル:D:\Data\temp\test_conv.txt



◆サンプル

textConv_ato.pngtextConv_mae.png
↑変換前テキスト         ⇒ ↑変換後テキスト


スクリプトは続きより見てください。

ディレクトリ内に圧縮ファイルがあれば、その圧縮前のファイルらしきものを
一括削除するシェルを作成してみました。
(判定は単純にファイル名だけで行っています)

◆このシェルの内容
カレントディレクトリのファイル、ディレクトリ全てを調べ、すでに「名前.tar.gz」の
ファイルがある場合は「名前」のファイル(またはディレクトリ)を削除する
※但し、「.tar.gz」が含まれるものは対象外

.tar.gzがついたファイル名のものは圧縮ファイルという前提で作っています。
(.tgzなどの圧縮ファイルには対応していません)

◆ご注意
このスクリプトでは「rm -rf」で削除を行っていますので、
実行する場合は十分注意した上で、自己責任でご使用ください。


※内容は続きから見てください。
前回の記事のスクリプトを元に、ディレクトリ内のファイルを一括圧縮 する物を作成してみました。

◆このシェルの内容
・カレントディレクトリ内のファイルを一括圧縮
 (tarコマンドで固める)
※但し、「.tar.gz」がファイル名に含まれるものは対象外
 また、すでに「ファイル名.tar.gz」のファイルがある場合は圧縮しない

.tar.gzがついたファイル名のものは圧縮ファイルという前提で作っています。
(.tgzとかの圧縮ファイルがある場合は圧縮してしまいますので、 スクリプト改造で対応するとよいと思います)


※内容は続きから見てください。
Linuxで単純な処理を自動化したいけどシェルスクリプトはよくわからない・・・。
そんなときのために簡単なシェルスクリプトのサンプルを作ったのでメモしておきます。

私もシェルスクリプトはあまりわからないですが、コメントも多めに入れてあるので 参考にしてください。
これを元にいろいろ変えると便利なものもできるかも・・・?

◆このシェルの内容
・ユーザからのキーボード入力を受け取り、判定
・ファイルの存在チェック
・カンマ区切りのファイルの内容を1行ずつ読み込みながら処理
※シェルと同じディレクトリに"list.txt"が必要です


※内容は続きから見てください。

友達に、DirectXは入ってる?
っときかれたので、DirectXのバージョンを確認するにはどうしたらいいかを簡単に説明します。

プログラム全般に関するメモや解説などを載せていきます。
HSP,Perlなどなど

HSPの方から書き始めました。
HSPでなくてもアルゴリズムは参考になるかもしれません。
一度見てみるといいですよ。


bird
BIRD「ホームページではソフトウェアを公開していますぞ」