So-net無料ブログ作成

Excel VBAで無限ループを停止 [その他]

ExcelのCellに入力された改行文字をスペースに置換しようとマクロを作ってみた。
まず、改行文字が vbLf だったのに手間取った。

改行文字を消すだけだしと保存もせずに、やっつけで作ったマクロを動かすと
無限ループに突入し「保存しとけば良かった・・・」と思ったけど調べてみると止め方が見つかった。

・Microsoft Visual Basic for Applications を開く
・Ctrl + Pause もしくは Ctrl + Break を押す。
 Pause/Breakキーが無い場合(特にノートPC)は、スクリーンキーボードを表示して
 Ctrlキーを押しながら、スクリーンキーボードのPauseをクリックする。
・これでも止まらない場合は、Escキーを連打する!
 自分はこれで止まりました。

スクリーンキーボードは、[アクセサリ]-[コンピューターの簡単操作]にあります。
nice!(0)  コメント(0) 

モバイルデータをOFFにしての電話とかメールとか [その他]

スマホのモバイルデータの通信容量が上限を超えそうなので、
モバイルデータをOFFにしてWiFiのみで頑張ってみたときのメモ。

・電話の着信、発信ができた。
・SMSの受信、送信ができた。
・メールの受信は「サーバーにメールがあります」と表示された。
 メールの新着が分かるので、WiFiが繋がるところまで行って受信したりした。

モバイルデータをOFFにしても困ることはなかったかな?
待ち時間での暇つぶしとか、電車の時間調べたりが不便でした。
nice!(0)  コメント(0) 

VMWareで仮想シリアルポート同士を接続 [その他]

RS232Cの開発でシリアルポートが必要になったけど、
ノートPCなんでシリアルポートがない。
USB-RS232C変換ケーブルもない。

VMWareのゲストOSにシリアルポートを2個追加して、同じ名前付きパイプを設定すると
仮想PC内のシリアルポート同士で送受信できるようになった。

開発環境のノートPCでは、COM2とCOM3が追加された。
ss001.png
ss002.png

未使用のシリアルポート(COMポート)の削除 [その他]

USBのシリアル変換を使用して、いろいろな機器と接続していると
なんだかんだで、COMポートが増えていた。
COM1がずっと使用状態になって、割り当てできなかったりと不便だったので
次の方法で未使用のCOMポートを削除した。

コマンドプロンプトを管理者として実行して
次のコマンドを実行するとデバイスマネージャが開くので

set devmgr_show_nonpresent_devices=1
start devmgmt.msc

メニューの[表示]-[非表示のデバイスの表示]を押すと、現在使用していないデバイスが表示される。

デバイスマネージャのポートのツリーを開いて現在使用していないポートを右クリックして削除する。
このとき、ドライバーソフトウェアは削除しない。

参考URL
Windowsで増えすぎた未使用COMポートを削除する方法
http://airvariable.asablo.jp/blog/2013/02/24/6730209

WinMergeのJSONプラグインを作成してみた [その他]

JSONファイルが何かと便利!と色々使ってみてるけど、
元データとの比較が面倒だったりしたのでWinMergeのJSONプラグインを作成したときのメモ。

JSONファイルを整形して比較する。
整形には、JavaScriptのJSONを使用する。
WinMergeのプラグインは、VBScriptで作成されている。
WinMergeのプラグインで、JavaScriptは動くのか?(動いた!)
でも、JSONを使用すると「'JSON' は宣言されていません」と出る。
json2.jsを使用すれば出来た!

json2.js
https://github.com/douglascrockford/JSON-js

作成したプラグインと、json2.jsをMergePluginsフォルダに入れます。

ファイル名:CompareJsonFiles.sct
<scriptlet>

<implements type="Automation" id="dispatcher">
	<property name="PluginEvent">
		<get/>
	</property>
	<property name="PluginDescription">
		<get/>
	</property>
	<property name="PluginFileFilters">
		<get/>
	</property>
	<property name="PluginIsAutomatic">
		<get/>
	</property>
	<method name="UnpackFile"/>
	<method name="PackFile"/>
</implements>

<script language="JavaScript" src="json2.js"></script>
<script language="JavaScript">
function getJson(filename) {
	return jsonParse(adoLoadText(filename, "utf-8"));
}
function jsonParse(text) {
	try {
		var obj = JSON.parse(text); 
		return JSON.stringify(obj, null, "    ");
	} catch(e) {
		return e.message;
	}
}
function adoLoadText(filename, charset) {
	var stream, text;
	stream = new ActiveXObject("ADODB.Stream");
	stream.type = 2;
	stream.charset = charset;
	stream.open();
	stream.loadFromFile(filename);
	text = stream.readText(-1);
	stream.close();
	return text;
}
</script>

<script language="VBS">

Option Explicit

Function get_PluginEvent()
	get_PluginEvent = "FILE_PACK_UNPACK"
End Function

Function get_PluginDescription()
	get_PluginDescription = "Json形式のファイルを整形し比較をする。"
End Function

Function get_PluginFileFilters()
	get_PluginFileFilters = "\.json$"
End Function

Function get_PluginIsAutomatic()
	get_PluginIsAutomatic = True
End Function

Function UnpackFile(fileSrc, fileDst, pbChanged, pSubcode)
	Dim fso
	Dim foDst
	
	Set fso = CreateObject("Scripting.FileSystemObject")
	
	Set foDst = fso.OpenTextFile(fileDst, 2, True)
	foDst.Write(getJson(fileSrc))
	foDst.Close
	
	Set foDst = Nothing
	Set fso = Nothing
	
	pbChanged = True
	pSubcode = 0
	UnpackFile = True
End Function

Function PackFile(fileSrc, fileDst, pbChanged, pSubcode)
	PackFile = False
End Function

</script>
</scriptlet>


WinMergeのプラグインは、JavaScriptでも良いんじゃないのかな?

SQLite3へ大量のCSVを一括で取り込む [その他]

SQLite3へCSVファイルを取り込むためのスクリプトのメモ

次の必要なファイルを同じフォルダに配置する。
・sqlite3.exe
・CSVを取り込む先のテーブル(CSV_DATA)が作成されたDB(Sample.sqlite3)
・csv_import.bat
・INPUTフォルダを作成し、取り込む対象のCSVファイルを入れる。

*sqlite3.exeは http://www.sqlite.org/ から sqlite-shell-win32-x86-3090200.zip をダウンロードする。
*CSV_DATAテーブルの内容は、DATETIME型、後はREAL型が100個。

csv_import.batを実行すると、OUTPUTフォルダにINPUTフォルダ内のCSVファイルを結合した
merge.csvが作成され、それをDBに取り込む。

・csv_import.bat
@ECHO OFF

ECHO DB内のCSVデータを削除
sqlite3 Sample.sqlite3 "delete from CSV_DATA"

ECHO CSVを結合
mkdir .\OUTPUT
type .\INPUT\*.csv > .\OUTPUT\merge.csv

ECHO CSVをDBに取込
sqlite3 -separator , Sample.sqlite3 ".import ./OUTPUT/merge.csv CSV_DATA"

ECHO.
ECHO 処理が完了しました。
ECHO 終了するには何かキーを押してください...
PAUSE > NUL


・取り込むCSVファイルの内容
数値データは、100個あります。
2015/12/01 00:00:00,     0,     0.1,     0,     0,     0,     0,     0,     0,   830,     0,     0,     0,     0,  1000
2015/12/01 00:01:00,     0,     0.2,     0,     0,     0,     0,     0,     0,   830,     0,     0,     0,     0,  1000
2015/12/01 00:02:00,     0,     0.1,     0,     0,     0,     0,     0,     0,   830,     0,     0,     0,     0,  1000
2015/12/01 00:03:00,     0,     0.3,     0,     0,     0,     0,     0,     0,   653,     0,     0,     0,     0,     0
2015/12/01 00:04:00,     0,     0.1,     0,     0,     0,     0,     0,     0,   657,     0,     0,     0,     0,     0
2015/12/01 00:05:00,     0,     0.2,     0,     0,     0,     0,     0,     0,   661,     0,     0,     0,     0,     0
2015/12/01 00:06:00,     0,     0.3,     0,     0,     0,     0,     0,     0,   653,     0,     0,     0,     0,     0
2015/12/01 00:07:00,     0,     0.3,     0,     0,     0,     0,     0,     0,   653,     0,     0,     0,     0,     0
2015/12/01 00:08:00,     0,     0.4,     0,     0,     0,     0,     0,     0,   827,     0,     0,     0,     0,  1000
2015/12/01 00:09:00,     0,     0.3,     0,     0,     0,     0,     0,     0,   830,     0,     0,     0,     0,  1000
2015/12/01 00:10:00,     0,     0.4,     0,     0,     0,     0,     0,     0,   830,     0,     0,     0,     0,  1000


プロセス毎のCPU使用率、メモリ使用量のログを取得する [その他]

プロセス毎にCPU使用率や、メモリ使用量のログを取得したい。
パフォーマンスモニターでログを取得しても良かったけど
1日に1~2回程度で良いので長期間ロギングをする。

WMICというコマンドを使用する。
batファイルに次のコマンドを書いて、タスクスケジューラで実行させた。
@ECHO OFF
SET logDate=%date:~0,4%%date:~5,2%%date:~8,2%
WMIC /OUTPUT:C:\PROLOG\PROLOG_%logDate%.log PROCESS GET /FORMAT:LIST

出力されたログファイルの内容は、色々な項目がある。
WorkingSetSize:物理メモリ使用量
PageFileUsage:ページングファイルの使用量

ExcelのVLOOKUPで見つからない場合は空白にしたい [その他]

資料を作ったりするときにExcelをよく使います。
このとき、VLOOKUP関数がすごく役にたつのだけど
一覧から見つからないときは、0を返したりするので、
IFで判断して空白に変えたりとがんばってました。

でも、これだけで、VLOOKUPで見つからない場合0ではなく、空白を返すことが出来ます。
参考URL
http://officetanaka.net/excel/function/tips/tips48.htm

VLOOKUP関数の最後に &"" を付け加えるだけ。

具体例
=VLOOKUP(A1,$F$1:$K$100,3,FALSE)&""

HPから発売されるミニPCが欲しくなった [その他]

HPが発売するミニPC「HP Pavilion Mini 300-100jp」の画像を見て欲しくなった。
四角くなくて、丸っぽい形が気に入りました。
7月17日から発売する見たい。

HP Pavilion 300-130jp
Core i3 / 4GB メモリ / 500GB
\69,800.

HP Pavilion 300-150jp
Core i5 / 8GB メモリ / 1TB
\89,800.

http://h50146.www5.hp.com/directplus/personal/desktops/dp_pavilion_mini300_15sum/
HP Pavilion 300.jpg

SQL Serverで一度に実行できるSQLコマンドの最大文字数 [その他]

VB.netでUPDATEを一度に実行したかった。
1回ずつUPDATEしても良かったけど、この方法だと件数が多いとかっこ悪いので
セミコロンで区切ってUPDATE文をつなげてってしてる時にふと
「CommandTextの最大文字数ってどれぐらいだっけ?」と思ったので調べてみた。

しらべて見たけど、あってるかどうか分かりません。
試してみたら良いんだけど・・・

デフォルトの設定だと
1行に8000バイト
全体で256MB

SQLCommand ExecuteNonQuery Maximum CommandText Length?
http://stackoverflow.com/questions/21390537/sqlcommand-executenonquery-maximum-commandtext-length

SQL Server 2014の最大容量仕様
https://translate.googleusercontent.com/translate_c?act=url&depth=1&hl=ja&ie=UTF8&prev=_t&rurl=translate.google.co.jp&sl=en&tl=ja&u=https://technet.microsoft.com/en-US/library/ms143432.aspx&usg=ALkJrhhi6lQodxNfsELJM6lZ5Z0bM35P2w