Excelマクロ覚書 フォームコントロール

Blogの外観をちょいと変えてみた。また変えるかも。

さて、Windows10でExcel2010とか2013とかを使うようになって、Windows7で作ったExcelマクロのActiveXコントロール(コンボボックス)がうまく表示されないようになった。

これは困った・・・

グループ化すれば治る・・・って、治んない。

困りましたな・・・

ってことで、もうフォームコントロールに変えることにした。
面倒だわ・・・
ActiveXコントロールだと、リストの情報はマクロ上で設定すればいいのだが、フォームコントロールはリストの情報をセルに持たせて、そのセルとリンクを貼る・・・という厄介な手順を踏まなければならない。

ということで、ActiveSheet上にあるフォームコントロール「DLIST」のリストにしたい情報が、同じシートのセル「A2~A10」にあるとすると、

With ActiveSheet.Shapes("DLIST").ControlFormat
    .ListFillRange = "A2:A10"
    .LinkedCell = "B2"
End With

参照リストセルが別のシート(仮に「Sheet2」とする)にある場合、ListFillRange の設定をちょっと変える必要がある。

    .ListFillRange = "Sheet2!A2:A10"

でも、コントロールのフォントサイズの変え方がわかんない・・・
もうヤダ。

SQLite覚書 テーブル一覧の取得

SQLiteでテーブルの一覧を取得する場合、コマンドの「.schema」を使う方法もあるが、面倒な時もあるので、以下のようにSELECT文を使う。

SELECT * FROM sqlite_master
WHERE type = 'table' 
ORDER BY name;

WHERE句の条件を外すと、オブジェクトの一覧になって、INDEXの情報なんかも取得できる。

さて、6月も中盤。
4月から3か月間かけて行う新人研修も終盤だが、どうも、今年はイマイチ。
新人がイマイチなのか、我々がイマイチなのか、どちらもダメなのか・・・

それはともかく、中学生や高校生が読めるような漢字を読めない人がいるのがまずウンザリ。
昨今、高等教育の無料化を声高に言う人がいるが、そもそも、初等・中等教育をしっかりしてほしい。
小学生でも読めそうな漢字も読めない大人って、社会に必要なのか?
初歩的な現代国語ぐらいちゃんと勉強させてほしいものだ。

Excelマクロ覚書 Shellとカレントディレクトリ

Shell関数を使って別のexeを起動。

できんかった・・・・・・

なので調べた。

どうやら、カレントディレクトリをexeのある場所に指定しないとダメな様子。
で、ChDir関数を使ってカレントディレクトリの変更!ってやってみたけど、うまくできなかったので、別の方法でカレントディレクトリを変える。

以下は、Workbookと同じフォルダにあるtest.exeを実行してみるサンプル。
起動できたら、Excelを最小化させる

    Dim p   As String
    Dim res As Integer
    
    On Error Resume Next
    p = ThisWorkbook.Path
    If Right(p, 1) <> "\" Then p = p & "\"
    With CreateObject("WScript.Shell")
        .CurrentDirectory = p    // カレントディレクトリを変える
    End With
    res = Shell("test.exe", vbNormalFocus)
    If res <> 0 Then Application.WindowState = xlMinimized

移設から数か月

@pagesからこっちのサーバに移設してから、3か月が経った。
未だに旧サーバも立ち上げっぱなしなのだが、こちらのサーバの投稿記事のリンク(とくに画像)が正しく貼れていなかったり、リンク切れだったりするのを順に直していこうと考えている。
WordPressは投稿するにはラクチンなのだが、いろいろカスタマイズするのが面倒だなぁと感じる。
5年前ぐらいだと、ちょうどPHPの仕事もしてたし、暇もあったし、やる気もあったから、面白半分でいじってたのだが、5年経つと人間こうも変わるものかというほど、あまりやる気が起きない。

まぁ、しばらくは記事の修正を行って、終わったらカスタマイズしてみるか・・・
(いつになることやら)

ミュージカル『紳士のための愛と殺人の手引き』

約1か月、何も投稿していないので、ゴールデンウィークを振り返ってみよう。

とりあえず、梅田に行った。
梅芸でやっているミュージカル『紳士のための愛と殺人の手引き』を観るためだ。
しかし、開演時間は17時。昼前に行ってぶらぶらしようともくろむ。

梅田に着いて、いつもの通りチケット屋にいく。
今日は阪急百貨店でやっているパンフェアというイベントに行くのだ!!
なので、第1ビルあたりで、阪急・阪神のおつりがでる商品券(整理券)を2万円分追加購入して、阪神百貨店に行く。

阪神?と思うかもしれないが、第1ビル→ディアモール→阪神→阪急といくのが、私の常なのだ。

阪神百貨店はB1フロアがまた少し変わったようだが、いつものとおりの品揃えなのと、催場のイベントが棚卸みたいなものだったので、あえて行く必要もないかと思い、スルーして阪急にいそいそと歩く。

【阪急うめだ】

開店直後で、阪急百貨店はそこそこ空いているように感じた。
空いていたので、B1フロアは後で行こうと考えたのだが、後々ちょっと後悔した。
というのは、「今日はUHA味覚糖のグミを買って帰ろう!」と心に決めていたのだが、15時ぐらいにショップの前に行った時にはすでにレモンと梅味しか残っていなかった。
できれば白桃、せめてベリーあたりを買いたかったのだが、もう2種類しか残っていないことにガックシ。
とりあえず1種類だけ味見にと思い、レモンを買って食べてみたのだが、これがまた微妙・・・。さすがに「残るだけはある」感がもう淀んでいる。

ということで、先に攻めるべきB1Fを攻めずにパンフェアの会場に行ったのだが、ここはここでしっかり行列ができている。

タマコサンド各種

で、今日は行列に並ぶことにした。タマコサンドだ。
私は正直「タマコサンド」を知らなかったのだが、結構人が並んでたので「おいしいに相違ない!」と思って並んだ。
そう、典型的な「釣られる人」になり、そうして恐らくは「釣る人」にもなったのだろう。

レジ付近に近づくと、いろんな種類の玉子サンドがあることが分かったのだが、私はシンプルなタマコサンドとチキンと大葉のサンドの2種類を注文した。
時間が経ってから食べたからか、正直並ぶほどではなかった。
加えて、チキンと大葉のサンドにチキンが入っていなかった!?という衝撃!

 チキンってそれなりの大きさだよね?
 まさかクズみたいにタマゴと混ざってないよね?
 これかな?って思ったら漬物の味してたけど、あれじゃないよね?
 あれより大きいよね? 
 (正解を教えてください!)

あとは、茶美豚のサンドと、宇治で有名?な焼きそばパンを買って、恐竜を横目にB1Fまで降りていく。

焼きそばパン

茶美豚のサンドはおいしかった。そこそこ値が張る代物だったが、おいしかった。
焼きそばパンは、箸で食べる代物だった。
もはやパンは添え物だったが、もう少し具(例えばキャベツとか、肉も豚肉にするとか)が入ると、こちらもおいしいと思う。
まぁ、見た目から容易に分かるのだが、食べたらやはりもう小麦だらけで、小麦過ぎてブルーになる食べ物だった。

【阪急三番街】

そうして百貨店を後にして、三番街方面に進んでいく。
久しぶりに31のアイスを食べたかったので、HEP前の31にいってポッピングシャワーを注文。
しかし、弾かない飴が増量されただけの変哲もないアイスになっていたのはガックシ。
三番街で食事処を探したのだが、前から行きたかった洋食屋はいつものとおり行列。他も食べたいなぁと思うところは、待っている人がいたので、もう諦めてKIDDY LAND経由でLOFTへ。

【梅田ロフト】

開演時間まで、まだ時間がたっぷりあるのでロフトまで足を延ばす。
ロフトやハンズは大好きなショップだ。新しいものがいっぱいある、嬉しいショップだ。見ているだけで楽しめる。
で、見ているだけで何も買わなかった・・・アハハ

【梅芸】

五目焼きそば

あと30分で開場するということで、腹ごしらえ。16時前だが、まだ昼ご飯を食べていない。
B1Fにある中華料理屋で焼きそばを食べる。結構旨い。なんか味噌っぽいソースで今まで味わったことがない。具も大きい。
空いていたから、ちょっと侮っていたな。
今度から、この辺でどの店に入ろうか迷ったらここに食べに来よう。

【紳士のための愛と殺人の手引き】

モンティ役はウェンツ君だったが、正直出来栄えはいまいちだった。
芝居としては悪くないし、甘い声は素敵なのだが、発散している感に乏しい。なんとなくセーブしているのと、高音が意外にしんどそう。
舞台にはある程度のハッタリが必要なのだが、そこが足りないのだ。いい意味、いい人で、真面目なのだろう。
これからも舞台に立ってほしい人なので、頑張ってほしい。

宮澤エマさんは歌は上手でカワイイし、シルビアさんもカッコいい。2人がハモると、これがなかなかいいではないか!
そして市川正親さん。もうちょっと遊んで欲しいところだが、それでも十分面白かった。私が好きなのは、あのちょっとしか出ない大根役者のおばちゃんと慈善事業に邁進しているおばちゃん。
大根役者のおばちゃんが出てくるのはホントに一寸なので、かなり名残惜しい。これが、リピート欲を煽るんだよ、きっと・・・

このミュージカルで一番よかったのは、なんといってもアンサンブルだ。
さほどの人数ではないのに迫力があって、ハーモニーもよかった。
やはり、ミュージカルは歌!だと改めて感じる。
歌がよくて楽しい!面白い!って、それからやっぱりミュージカルって「終わりよければすべてよし!」なんだな。それが全部詰まったミュージカルだった。

やっぱし、もう1度観たいな。

【再び阪急うめだ】

もう1度阪急百貨店に立ち寄る。
今の時間だと、B2Fは割引している時間。
ウロチョロして、食料を買い足し、店を後にする。

あぁ、柏餅買うべきだったかなぁ・・・

私のゴールデンウィークはこれにて完了。月曜からはいつも通り。
って、いつも、いつも通りじゃないか?
ちなみに、やっぱり、柏餅は買うべきだった。

ExcelVBA覚書 Windowsログイン名の取得

Windowsのログインユーザアカウントをとってきたい!ってのを調べてロジックに組み込んだはいいが、このブログ上にメモしてなかった。

まぁWindowsにログインするときに入力するアカウントのことなんだけど、環境変数関係の情報を取得するときは、Environ関数を使う。

Environ(“USERNAME”)

と、こんな感じ。

引数にどんなものがあるか、どんな戻り値になるか、デバッグして調べてみるときは、こんな風に。

Debug.Print "OS:" & Environ("OS")
Debug.Print "デフォルトドライブ:" & Environ("HOMEDRIVE")
Debug.Print "デフォルトユーザパス(ドライブなし):" & Environ("HOMEPATH")
Debug.Print "tempフォルダパス:" & Environ("TEMP")
Debug.Print "ログインユーザID:" & Environ("USERNAME")
Debug.Print "systemフォルダパス:" & Environ("WINDIR")

Processing覚書 引数付き起動

Processing2.2.1で確認。

Processingで作成したexeを引数渡しで起動させる場合、というので調べてみたが、一番よさげなのは下記のURLの説明とサンプルだと思った。

uncertain world「Processingをコマンドラインから引数つきで実行する方法」

特に良いと感じたのは引数を「xxx=yyyy」という記載で渡すところ。

というのは、Processingで開発中のときにRUNするときと、Exportしてexe起動させるときでは、引数の数が違っている。
前者だと引数の最初に、「–sketch-path=XXXXX」が入っていて、後者だと入らない。
なので、引数の何番目を見て、ウンチャラカンチャラ・・・みたいなことはできない訳。

void setup() {
  for (String a : args) {
   String[] a2 = a.split("=");
   if (a2[0].trim().equals("para1")) {
    ・・・処理・・・  
   } else if (a2[0].trim().equals("para2")) {
    ・・・処理・・・  
   }
  }
}

と、こういう感じで、setupメソッド内に、引数取得処理を入れておく。

起動させるときは、

Prog.exe para1=1 para2=ABC

ってな感じでパラメータを渡してやればよい。

ExcelVBA覚書 Dictionaryループ

基本的にScripting.Dictionaryは、

Dim dic     As Object

Set dic = CreateObject("Scripting.Dictionary")
If Not dic.Exists(a) Then
  dic.Add a,b
End If

みたいに、Existsメソッドを利用することが多いのだが、
やはり1つずつ確認して処理を行うこともなくはない。

Dim i As Long
For i = 0 To dic.Count - 1 Step 1
    debug.print dic.Keys()(i) & "-" & dic.Item(i)
Next i

もしくは、

Dim v As Variant
For Each v In dic.Keys()
    debug.print CStr(v) & "-" & dic(v)
Next

で、いずれも、Keys()両括弧を付けるところがポイント。

色々サイトを見てみたのだが、この()が抜けていたり、ItemがItemsになっていたりして、混乱している記載が多く、ここまでたどり着くのに英語のサイトまで見に行ってしまった。

非常にやっかいだが、もともとこういう使い方するようなオブジェクトではないのだろうから、仕方ない。

ちなみに削除するときはRemoveを使う。(Deleteではない)

Dim v As Variant
For Each v In dic.Keys()
    dic.Remove v
Next

MySQL覚書 配列、縦→横、カンマ区切り

同じIDのTITLEデータをカンマ区切りでとってきたい!
とか思って漁っていたら、

MySQLでidだけをSELECTして、カンマ区切りにして出力する

という、ページが見つかった。
GROUP_CONCATという関数を使い、区切り文字をカンマに指定する方法である。

SELECT GROUP_CONCAT(title SEPARATOR ',') FROM t_sample WHERE id = 1;

PostgreSQLだと、ARRAY_TO_STRING

<参照>PostgreSQL覚書 配列

AccessVBA覚書 Excelファイルを取込む

ファイル渡すからプログラム組んでくれ、っていわれてプログラム作成している最中、
ファイルも寄越さないうちから、「進捗どうですか?」って聞かれて、ちょいムカっとしたのは今週の始め。
んで、ムカついたからもう少し待ってねメールのついでに、送ってきた中途半端な仕様書の「重箱の隅にもならない場所」(ちゃんと書いて!ってな場所)をつつくような質問を畳みかけてやった。(フン!)

まぁ、別に大して怒っている訳ではないのだが、
 「自分がやるべきこともしないで、なんなんだ?」とか、
 「いやいや○日かかるって言ってるでしょ!何日目だよ今日!」とか・・・
色々思うところはあった。
そうは言いつつ、自分もこうならないように気を付けようと、ちょいと思ったのだった。

で、慣れないDoCmdに苦戦しつつ、ExcelファイルをReadOnlyで開いて、データを読込み、終わったら閉じる処理を書いてみた。
DisplayAlertsをFalseにしているのは、Excelで発生したエラーやら確認メッセージを出させないためだけで、値をとってくるだけなら特に必要はないと思う。

Dim xls As Object
Dim wb  As Object

Set xls = CreateObject("Excel.Application")
xls.DisplayAlerts = False
Set wb = xls.Workbooks.Open(FileName:=[Excelパス], ReadOnly:=True)

 ・・・(読込処理)・・・

wb.Close SaveChanges:=False
Set wb = Nothing 
xls.DisplayAlerts = True
xls.Quit
Set xls = Nothing

面倒だなぁ・・・Excelでいいじゃん?
だって、xlUpとかxlToLeftとかのExcelVBA特有の定数も使えないし。
(参照設定で設定すれば、使えるようにはなるけどサ)

とは思ったのだが、まぁ、後々Accessの方がいいこともあるかもって思ったので、お客さんの言うとおりAccessにした。
だけど、やはり、今回は、Accessにデータを取込むわけでもなく、別DBに出力するロジックだったので、尚更、AccessでExcelを開くというのは、かなり馬鹿馬鹿しく感じた。
もちろん、できるならImportしたいところだが、できるほど単純なデータではなかったので、わざわざロジックを組む。

  ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

で、今回は読み込んだデータをAccessテーブルには放り込まなかったのだが、Accessに取込むとなるとどうするのか・・・ということも考えてみた。

しっかし、AccessのTableってのは、INSERT文で出力しようが、AddNew・Updateで入れてみようが、まぁ、遅いのなんの・・・
さらに複数のSQL文を一括実行する方法なんて探してみたのだが、

Accessにはない!

ということなので、1つ思いついたのが、
 ・Excelデータを取込んで、テーブルImport用のCSVを作成。
 ・CSVをImportする。
という方法。
確かに、INSERTを発行するより速いのだが、かといって、すこぶる速いという訳でもなかった。件数が多ければ、明らかに速くなる気はする。

しかし、ここで問題発生。文字コードだ。

UTF-8文字が入力されたExcelデータであったため、ADO.Streamを利用して、BOM無しのUTF8でCSV出力。
かつ、インポートするときも

 DoCmd.TransferText acImportDelim, , temp_table , csv_path, True, , 65001   

というように、文字コード(65001がUTF-8を示す)を指定して取込む必要があった。

ということで、いろいろ試しにやったのだが、プログラム自体はすんなり作成できた。

ってか、まだファイル来ないし・・・

平田弘史→細雪→KITTE

東京に行ってきた。
というのは、弥生美術館でやっている「平田弘史に刮目せよ!」に途轍もなく心惹かれた所為だった。
せっかく東京に行くのだから、ついでに何かやりたいもんだ!と思っていたら、そういえば東京と博多でしか上演しない「細雪」の舞台があるではないか。
早速いくことにした。他にいろいろ美術館の特別展示なんかを確認してみたのだが、スケジュール的に移動だけで結構時間が喰ってしまうため、とりあえず、あとは東京駅のあたりで旨いモノでも食べられたらいいなぁ~的な感じで東京へ出発したのである。

弥生美術館「平田弘史に刮目せよ!」

刮目しにきたぞ!!と入って、ぐるりと1周。

凄いよ!とにかく凄いよ!!!

迫力とか、いやそもそもパターンなんてない時代に、自分で全部やっちゃってるのね。
(途中アシをいれたり、奥さんにさせたりしていたようだけど)

サイン入りの画集を買おうか迷ったのだけど、結局漫画が読みたいから、ちょっとクールダウンして買うのを見合わせたのだが、「嗚呼、どうして大阪には来てくれないのだ!」と心の中でため息をついた。

明治座『細雪』

あの、有名なお芝居である。
船場や芦屋・神戸、といった、まぁ馴染みのあるっていえばあるし、ないっちゅうったらない場所が舞台になっている、かつ大阪弁(船場ことば)なので、久しぶりに、昔の大阪を懐かしむ、そんな芝居をみてみたいって思ったのですよ、私。
芝居は、まぁ3時間にまとめるために、端折るは、入替えるは、つなぎ合わせるは、もう原作アレンジしまくりな感じで、結局、

美しい人が、美しい桜の下に立ってたら、もうそんでかましませんねん!!!

みたいに終わった。いや、それで満足するんだから、これが!

<1幕目>
大阪弁がうん?ってところもあったのだが、2幕目以降はほぼほぼすんなり。
(太川陽介さんの大阪弁が意外にイマイチだったな。)
こいさんが、いきなり赤いワンピースで登場したら、客席が「うぉっ」って感じに。
<2幕目>
なんでか、ここでこいさんが啓坊と駆け落ちした話に・・・
いや、あれは若気の至りなので、もっと早く出さないと意味がないんちゃうの?
<3幕目>
橋爪淳さんが相変わらず男前(声もええねぇ)で安心。
雪子は結婚がきまって、心の中ではしゃぎまくり!みたいな感じだが、原作ではマリッジブルーみたいになって、下痢ピーで終わるんだよねぇ・・・
こいさんは原作では、本家が東京に移ってから絶縁されたはず。
なのに、大阪に家がある状態で絶縁されたこいさんが大阪の家に戻ってきてエンディング。

という、まぁ原作読んでたら、????みたいな話なんですけど、最後はゴージャスに4姉妹揃って見得?きっておしまい。

いいんです、もう。いいんですよ、これで!

ということで、この日はアフタートークショー付。
だったのだが、埼玉から来た団体さんは「バスが来てますので~~~」といわれて、トークショーの前に名残惜しそうに退散。
川崎麻世さんに「帰っちゃうの?」とか言われてたけど、「帰りたくないぃ~」って後ろ髪ひかれてた・・・
かわいそうに、2,30分ぐらいええやん!と思うのだけど、バスの出発が遅れると家に帰れないんだろうね。
そこらへんは容赦のない添乗員。

トークショーは川崎麻世、紫吹淳、壮一帆のお三方。川崎さんがMCになって話を進めていく。

女性2人とも宝塚出身の人で、「細雪」には宝塚の人がいっぱい出てますねぇ・・・みたいな話に。
で、「細雪」出演については、壮さんは「本当に感謝している」みたいなことをおっしゃり、紫吹さんは、宝塚時代、東京での舞台があったとき、同じ時期に細雪をやっていて、「今それに出られるというのは非常に感慨深い」、みたいなことをおっしゃった。

あとは、男であった時間の方がまだ長いって話。
壮さんは、「TVでも言ったのだが、座っているときに気が緩むと脚が開いちゃって、水野さんにバチっ修正とされる」ということで、なにぶん「女に戻ってる最中」なので、ガサツなのはご容赦を・・・みたいに言ってはった。
そうすると、紫吹さんも「私もまだ男だった時間の方が長い」って。

ん~~、宝塚恐るべし!
ってか、2人とも、「男役」ってのを「男」って、省略しすぎてやしませんか?

さて、話は進み、「細雪」をベースに芝居を作るとしたら?と聞かれ、壮さんは「ミュージカル版細雪」もしくは「井谷さんを主人公にしたスピンオフ」といってはった。

もともと芝居の最後あたりで、鶴子さんが坊さんの唄を歌っているのだが、そのときに坊さんが踊って出てくるってのはどうか?という話で、周りがあんまり飛びつかないので、「えぇ!面白くないですか?!」と紫吹さんに詰め寄る壮さん。

いや、たしかに坊さんが、1人ずつ白鳥の湖みたいに出てきたら面白いやろうけど・・・
その後、あの芝居できるの?と思ってしまった。(残像が強烈すぎひん?)

あと覚えている範囲だと、壮さんは2回化粧替えをしていて、1回目は雪を踊るとき白塗りと、2回目は前述の赤いワンピースを着て出てくるところ。
雪を踊り終わって暗転した後、猛スピードで舞台をはけるのだが、そのスピードが歴代最速だと言われたそう。(あんな走ってる人初めて・・・みたいに言われたそうな)

まぁ、後は川崎さんMCがぐだぐだなので、なかなか思うようには盛り上がらなかったのかもしれないが、紫吹さんのカイヤさん真似突っ込みとか聞けて、面白かった。
公演後お疲れのところ、トークショーしてくれてありがとう。

KITTE 東京駅前

さて、次の日は朝ごはんを探して東京駅へ。
六厘舎にいって朝ラーメンを食べたのだが、昔食べたときほどおいしさを感じず、ガッカリ。
そうしてプラプラすると、ソラノイロも朝ラーメンをしているので、すかさず入る。
ラーメン2杯目。甘いスープに初めは「甘すぎるわ、コレ」と思ったが、それにもまして麺がスープと合っているのか?という疑問に。
食べ進めていくと、スープの甘さには慣れてきたものの、麺の違和感は消えずじまいで終了。
(残ったスープにピラフとチーズ入れて、炙って食べたい・・・)

ソラノイロ朝ラーメン

そうして、さらに丸ビルあたりでプラプラして、茶して、KITTEに到着。
郵便局のイベントをやっていて、ハンコを集めてまわりながら、ちょこちょことお店にはいってみる。
店に入ったり出たりして、ぐるっと廻ろうとしていると、下でなんかかわいい子がウジャウジャしてるではないか!

ぽすくま集団

なんだっけ、名前。ってかこんなにいたのかキャラクター。(1人しか知らんかった)
最近の私の一押し、関電「はぴ太」君と遜色なくカワイイ。(はぴ太は声がかわいいんだよ)
いや、もともと君たちがかわいいのは既に知っていたし、キーホルダーも持ってたよ。
しかし、揃ってワイのワイのやってると、さらにかわいく見えてしまうなぁ。
あぁ、なんていい日だ。

ということで、この2日間は、おなかも心も満たされて東京を後にした。
これからしばらくは東京土産でさらにおなかも膨らむことだろう。

ExcelVBA覚書 VBAPのパスワード忘れた?

略すとPPAPみたいになってるけど、ExcelのVBAプロジェクトのパスワードがわからないとき(忘れたとき)は、それを外すやり方がある。

何だっけ・・・

と思って調べた。

ここでは詳細は書かないけど、検索ワード的には
 Excel, VBA, DPB=
といったところか。

DPB=のダブルクォーテーションで括られた中身が暗号化?されたPWで、それをうまいこと置換えるわけなんだけど、バイト数が合わないとVBA関連のファイルが潰れちゃうので注意しなくてはならない。
なので、バイト数のきっちり合った置換文字を作成するため、新規ExcelファイルにVBAパスを付けて保存した後バイナリファイルの中身を確認する。
(パスワードの桁数からDPBの中身の桁数が容易にわかるわけではないので、色々作って合致した!ってなパスワードが見つかってから置換えるわけ。ちょいと面倒なのだが、熱さ過ぎればチョメチョメチョメと。)

あらら、結構書いてしまったぞい。
忘れたときのためなので、悪用するべからず!

レンタルサーバを変えた件

@PagesからXdomainにサーバを変えようかと思って作業中。

<追記:03/01>
FFFTPでFTP接続しようとして、うまくいかなかったが、
 (1) PASVモードにしない
 (2) 暗号化ナシの接続許可にチェック
で、うまくいくようになった。

ここまで書いてくれてないマニュアルって何?
ってか暗号化ナシって・・・

Java覚書 サーバ名からMACアドレスを取得

Windows上で動いている場合にしか利用できない方法だけど、メモ。

JavaでサーバのMACアドレスを簡単に取得する方法を漁ってみたのだが、結局は「ARPコマンドを実行する」ぐらいしかないようである。
なので、ちょっとガックシきてしまった。

1) target に サーバ名を設定。
2) Windowsコマンド arp に、targetサーバのIPアドレスを設定して実行。
3) コマンドプロンプトの出力からtargetサーバのIPアドレスのMACアドレスを取得

    String target = "ここにサーバ名を設定";
    String adr= "";
    try {
      // 1)
      InetAddress ip = InetAddress.getByName(target);
      // 2)
      ProcessBuilder pb = new ProcessBuilder("arp", "-a", ip.getHostAddress());
      pb.redirectErrorStream(true);
      Process proc = pb.start();
      proc.waitFor();
      // 3)
      InputStream is = proc.getInputStream();
      BufferedReader br = new BufferedReader(new InputStreamReader(is));
      try {
        for (;;) {
          String line= br.readLine();
          if (line == null) break;
          if (line.indexOf(ip.getHostAddress()) >= 0) {
            adr = buf.substring(23,45).trim();
          }
        }
      } finally {
        br.close();
      }
      if (res.length() > 0) {
        System.out.println("Server ["+ target+ "] , IP [" + ip.getHostAddress() + "] , MAC [" + adr + "]");
      }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
    }

参考URL
きしだのはてな「JavaでMACアドレスを取得する」
ひしだま’s 技術メモページ「Java > 外部プロセス起動」

宅配サービスで嫌なもの

ここのところ、散財中。

Dr.AIRのマッサージ機を買ってみた。
9千円ぐらいだけど、百貨店で試しに使ってみたらメッチャ強力!だったので、思わず買ってしまった。
買ってすぐ家で使ってみたら、やっぱしメッチャ強力!
って、まだ弱レベルだった・・・
さらに強力にしてずーーっとブルブルさせてたら、突然電池切れ。
弱ーくなっていってプチっとかじゃなく、突然あっけなくなところが笑ってしまった。
で、早速充電。持ち歩けそうだし便利だな。(壊れなければ)

他にも色々買ってみたけど、それは別のお話。

で、宅配便のお世話になっているわけだが、迷惑な宅配業者(あるいは宅配担当者)を列挙してみん!

・人がいないときに来る
  まぁ、これはしょうがないじゃん、って思うんだけど、
  ヤマトだとあらかじめ宅配するけど大丈夫?メールがやってくるんだよね。
  これ、ホントありがたい。
  再配達してもらうのってやっぱしもうしわけないからね。
・時間どおりに来ない
  これもまぁしょうがないね。いっぱい運ばせてるのこっちだし。
・何度もやってくる
  1回できてね。その方が楽でしょ?って思う。

んで、こっからが本番!
・Web再配達受付の仕組みがない
  これはつらい。もういい加減電話なしで生活できるようにしてほしい。
・荷物がたばこ臭い
  論外。客のモノ(他人のモノ)って認識あるのか?
  下請け使ってるところは、もう本当にひどいときがあって、
  この間なんて、段ボールの外側だけじゃなくって内側にまでたばこ臭がついていた。

と、愚痴ってみたが、基本的に世話になっている身なので、一番下以外は文句は言わない。
一番下のやつは、もう、ホント勘弁してくれ。迷惑。部屋ん中まで臭なるわ・・・

謹賀新年2017

新しい年が幕を明けた。
だからといって、大して何も変わらないので12月に見た面白い芝居について。

「繻子の靴」

京都の大学内にある春秋座というところで8.5時間かけて行われた芝居。
いやぁ~、長いのなんのって!
観てるほうが疲れるんだから、やってるほうはどうなんだろうか。

8.5時間の芝居って、台詞を覚えるのはどうすんのかなぁ?と考えたのだが、実際みてみると、半分は朗読なので、覚えるところはそんなに多くはなかったようだ。
が、それでも、膨大な量だなぁ。
と、裏っ側のことを気にしながら観てしまった。

舞台は3段になっていて、それに似非プロジェクションマッピングを合わせて、面白い構造になっていた。これをうまく画面転換や人物の距離を表すように使っていて、うん、うまい使い方だなぁ、などと思った。

ただ、いつも思うんだが、蜷川氏といい、この演出家といい、日本人がやると、妙に日本エッセンスを出そうとするところが、ちょっと「?」。
いい効果もあると思うのだが、例えば台詞を言っている最中に笛吹かれても、うるさいだけなんですけど。いや、風が吹いていることを表現したいのはわかるんだが、五月蝿いのよ、これが。
音響ってこういうことじゃないし、どうして狂言師をここまで配置する必要があるのか、雅楽?をこういうところ使われてもねぇ、とか、まぁとにかく音楽はいまいちだったなぁ・・・
(日本エッセンスも使いようなんだよね。いい使いかただなぁ、と思うところもあったのだけれど、必要ないよなぁ、と思うところやら、どうせだったらここで使ったらどうかなぁ?と思うところやら、いろいろあった。)

ただ、総合的に見て今までみた芝居の中でも、上位に入るすばらしい舞台だったなぁ、と思う。よくここまで作り上げたなぁ・・・と感心した。
また、機会があったら観てみたいな。

4日目まで見続けた人も、役者さんもお疲れ様でした。
これぐらいの芝居が7千円弱で観られるってのが凄いな。
企画してくれた人ありがとう。

ということで、これが12月のお話。
さて、今年は何を観ようか。

SQLite覚書 副クエリを使ったUPDATE

世の中には、ありがた迷惑とか、小さな親切大きなお世話とか、そういうことがわからない人が一杯いるようだ。
そういう人は、「やるな!」「やらないでくれ!」っていっても、「やる」のだなぁ。
人のやること横取りするんじゃないよ!と、叫びたかった、今日の朝。

それはそうと、SQLiteでSELECT文を使ってUPDATEしたい!というのがあって、
そうすると、まぁ、

 UPDATE table1 SET
  col1 = (SELECT col1 FROM table2 WHERE .... )

みたいにすればできるぜ!みたいなことはいっぱい書いてあるんだけど・・・

 そうじゃないんです!
 JOINで連結させて、ホゲホゲホゲ・・・とやりたいんです!

という要求は満たされないわけ。

で、調べた。

SQLiteはWITH句が使えるらしい。
んで、WITH句をうまく活用して、UPDATEできるらしい。

他のDBのSQL文を

UPDATE table1 SET
    col1 = a.col1
  , col2 = a.col2
 FROM (SELECT .... FROM .... INNER JOIN ....) a
 WHERE table1.id = a.id

とすると、
WITH句を使ったSQL文は

WITH a AS (
  SELECT .... FROM .... INNER JOIN ....
)
UPDATE table1 SET
    col1 = (SELECT col1 FROM a WHERE table1.id = a.id)
  , col2 = (SELECT col2 FROM a WHERE table1.id = a.id)

みたいな感じ。

で、これを私が愛用する「A5:SQL Mk-2」(SQL開発ツール)で実行したのだが、うまくいかずに、「あれ?できないの?」とか思って悩んだのだが、ツール上ではうまくいかないだけで、SQLiteのコマンド実行では、ちゃんと動いた。

ホント、統一させてほしいんですけど。

2か月もほったらかしてしまったから観劇感想

ブログをほったらかして、そろそろ2か月。
ちょっとは更新しておこう。

何もなかったわけではないのだが、「貧乏暇無し!」これに尽きる。

この2か月の間に、宝塚星組「桜華に舞え!/ロマンス」と梅芸「スカーレットピンパーネル」は観劇した。

前者は、週末の、しかも、トップのさよなら公演であったので、けっこう混んでいたが、さほど悪くない席が取れた。

で、まぁ、最終的に北翔さんという人は私は好きだったけど、トップになってみたら、

 さしたるトップではなかったなぁ・・・

と、ファンには申し訳ないのだが、そんなことを思った。
どちらかというと、割と自由にやれる脇役ってのがピッタリくる。
バウとかのメリーウィドウ等々がよかったから、トップでも十二分にやってくれそうな感じはしたのだが、トップになるといろいろなところでボロが出るもんだな・・・と感じた。
(誰も何も言わないんだろうか?)

一方、紅さんは品性に欠ける点があまり好きではないのだが、とはいっても、なんとかトップとしてやれそう?やれるかな?的な雰囲気が出ていたのが印象的だった。
(でも、金払って行くかと言われれば行かないかな。)

続いて、「スカーレットピンパーネル

石丸さん好きですよ、私。
石井さんも好きですよ、私。
平方くん頑張ってますな、はい。

やっぱり男前が時代感たっぷりな衣装を着ていると、「目の保養」でありますな。
衣装が素晴らしく格好良くって、いや、衣装だけでも充分なのに、男前!という、ジュルジュル感たっぷりでございましたよ。

そこへ行くと、安蘭はイマイチ。なんというか品がないんだな。
立ち姿は悪くないし衣装が綺麗だし、静止画としてはいいのだが、動くと商店街のおばちゃんみたいな感じ。
前に観た「サンセット大通り」はよかったし、「スカーレットピンパーネル」の宝塚の初演は彼女が主役で、しかもとても面白い舞台だった。
私はこの宝塚初演版のDVDまで買ってしまったほどだったので、いつも以上に期待をしていたのだが、今回はガックシきてしまった。

内容は、といえば、宝塚版とは構成が違って、どちらかというと中身に重点を置いていて重厚感がある。
だけど、少々歯切れが悪く、どちらかと言えば、宝塚版のほうがライトで楽しめる感じ。
宝塚は人数が多いからそれだけで舞踏会の場面とかも迫力があるというのも、宝塚版のほうがいいと感じている理由の1つだ。
(小池修一郎の演出力を改めて見直してしまった。)

で、1つ愚痴っとこ。

私はスタンディングオベーションが大嫌い!なのだ。

ってかさ、そんなこと欧米のまねしなくてもよくない?
演者はスタンディングオベーションされて嬉しいんだろうけどさ、そもそも、

前の人が立った所為で舞台が見えなくなるから、仕方なく立ってるんです!

っていう人間がどれだけいると思ってる?
もうちょっと、他人に対する気配りしようよ、ホント。
(ってか拍手するだけじゃ、満足せんのか?)

私はレスリー・チャンが好きだったのだが、レスリーのファンというのが、
「映画を見終わったら、スタンディングオベーションしよう!」
みたいなことをやってて、実際にやってるひとがいたんだけど、あれもホント迷惑。
本人いないし。
もう、自己満足をひけらかしてる。
後ろからケリ入れたい気分だったが、良くも悪くも足が届かんかった。

あぁ~~~、悪魔の私が出てきてひっこまないぞぉ~~ということで、今日はこの辺に。

Processing覚書 SQLite接続

Processing開発。
BezierSQLibライブラリを使ってSQLiteのDBにつないでいるのだが、1つ問題が。

というのも、エラーになったときExceptionが発生しない。
ライブラリ内部で例外処理までしてるのは兎も角、結果がエラーになってもエラーを判別できるフラグがない。
DBにLockがかかってる時にUPDATEしても、コンソールにエラーメッセージは出るが、それだけ・・・
Rollbackするタイミングがつかめない。
このままではマズイ。困った。

こうなったら、直接jdbcライブラリを利用しよう!となった。

プログラムソースのpdeファイルが入っているフォルダの下に「data」フォルダを作って、その中にDBファイルの「test.db」を入れる。
「data」フォルダと同じ並びに「code」フォルダを作って、その中にライブラリ「sqlite-jdbc-***.jar」ファイルを入れておく。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

// ------------------- ( 略 ) -------------------

void getData() {
  Connection con = null;
  Statement stmt = null;
  try {
    Class.forName("org.sqlite.JDBC");
    con = DriverManager.getConnection("jdbc:sqlite:"+ dataPath("test.db"));
    println("Opened database successfully");
    
    stmt = con.createStatement();
    stmt.executeUpdate("INSERT INTO m_users (user_cd ,user_name) VALUES ('1010101', 'Lily');");
    stmt.close();
    con.close();
  } catch ( Exception e ) {
    println( e.getClass().getName() + ":" + e.getMessage());
  }
}

Macでいけたから、あとはWindowsでも確認しよう。