月: 2017年3月

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の中身の桁数が容易にわかるわけではないので、色々作って合致した!ってなパスワードが見つかってから置換えるわけ。ちょいと面倒なのだが、熱さ過ぎればチョメチョメチョメと。)

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