そうしないと、作成したexcelブックが宙に浮いたままになるようだ。つまり、CreateObjectして、ファイルをオープンし、セーブ、クローズ、そして、EXCELアプリを.quitするといったケアをしないと、駄目なようだ。
2021年12月16日木曜日
2021年12月12日日曜日
日本郵便のはがきデザインキットの突然の梯子外しで、マイクロソフトのWord差し込み印刷に回帰するまでの物語
ここ数年、macで日本郵政製のはがきデザインキットなるアプリを使用していた。このアプリは、adobeのairのテクノロジーをベースに作られていたので、adobeがこのテクノロジーをよその会社へ売り飛ばしたか、本当の理由は定かではないが、日本郵政はairベースのはがきデザインキットを提供しなくなってしまった。そして、突然の梯子外しにワタシは途方に暮れた訳だ。正確に言えば、はがきデザインキットはwebベースで出しているのだが、これまでのものとは全く違う、使えない代物。
幸い、数年前にWindows10のPCを購入していたので、Wordの差し込みハガキ印刷に戻ることにした。
住所録は、はがきデザインキットの住所録をコピーすれば良いのが、悪いときには悪いことが更に降りかかるのが人生の鉄則だ。その時、ワタシのmacはOSのバージョンアップを迫られ、新しいOSにしたばかりで、年賀はがき作成キットのアプリは起動できなくなっていたのだった。
でも、人生は悪い事ばかりではないようだ。はがきデザインキット住所録保存場所でググると、はがきデザインキットの住所録は、youbin10.dbというdbに作成されており、そこからデータを抽出できるのだという。世の中には凄い人達がいる。ありがたい。そして、めでたく、住所録を復元し、Wordで差し込みはがき印刷ができるようになった。やれやれ。
2021年12月3日金曜日
access(sql)で特定のフィールド(列)で重複した値を排除し、ユニークな値だけの集まりを作りたい場合、GROUP化すればよい。
access(sql)で特定のフィールドで重複した値を排除し、ユニークな値だけにしたい場合、GROUP化すればよい。こういうのが2つ、3つある時には、UNION ALLでマージすれば、いい。GROUP化、のちUNION ALLでマージ。これは便利だ。
2021年11月24日水曜日
スマホでnttのdポイントクラブ(d point club)をニックネームで登録したら、IDがほぼ凍結され干されてしまった。解決策を電話で聞いたら、docomoケータイじゃなくても良いので、「docomoショップへ出掛けてください」と。果して、どうなった?
スマホでnttのdポイントクラブ(d point club)をニックネームで登録したら、IDが半凍結された。解決策を電話で聞く。結論だけ言えば、それは、docomoショップで本名で変更するしてもらうこと。そして、IDは凍結解除された。めでたし、めでたし。
解決までの道程をもっと、詳しく語ると、こんな感じだ。ワタシはdocomoのケータイまたはスマホのユーザではない。実はocnモバイルワンのユーザだ。にもかかわらず、dポイントクラブのことはdocomoショップで対応してくれるというので、混んでいないと思われる、平日の昼間を狙って、近所のdocomoショップへ出掛けた訳だ。
docomoショップに到着すると、今時、そこは予約をしてからいく場所だったことがわかる。やむを得ず、入り口の機械で「受付」をして、空きを待つ。コロナ以後は、どこでも、銀行でも予約は必須のようだ。やれやれ。待つしかない。
しばらくして、フロア係のお姉さん達が2人ががかりで、ワタシの抱えている問題を解決すべく、色々と尋ねてくれた。まさに、解決に向けて立ち向かってくれた。
「ここの機械は、docomoのケータイまたはスマホユーザのdポイントは、名前変更ができますが、それ以外の方の分が変更できるかどうか、わかりません。が、やってみましょう」と言ってくれたのだった。
果たして、ワタシのdポイントクラブのIDとパスワードを入れて、ログインし、本名へ変更できた。すんなりと。そして、本人確認の免許証をアップロードしてくれた。そして、IDの半凍結が解除できた。良かった。docomoユーザじゃなくても、親切、丁寧に、対応して戴いた。「本当に、お世話になりました。」とお姉さん達へ感謝の挨拶をして、帰途につく。良かったなぁ
2021年11月15日月曜日
EXCEL のフィルタ作業をvbaにしてみた。でも、currentRegionの分断で、データ破壊してしまったのは、空白列のせいだった。
EXCELに様々な条件でフィルターを掛け、絞り込みつつ、色々なセルに値を設定していく。そうすることで、我々の仕事が進む。そんな作業を自動化するにはvbaが一番だ。
Dim R As range
With Range("A1")
.Autofilter 5,"="
.Autofilter 3,array("<60","="),xlFilterValues
If WorksheetFunction.Subtotal(3,Range("A:A")) > 1 then
With Range("A1").CurrentRegion.Offset(1,0)
For Each R in .Resize(.Rows.Count-1).SpecialCells(xlCellTypeVisible).Rows
R.Range("E1").Value = "C"
Next R
End With
End If
End with
でも、これだと、CurrentRegionが空白列或いは空白行でいくつかに分断されている(今回は、空白列で分断)と、その塊の単位でCurrentRegionの列なり、行なり(今回は行)を検出するため、意図していないCellにも、得点が60点以下でもないのに、"C"が設定されてしまい、表(データ)破壊をきたしてしまった(下図)。
これはキツいな。そこで、R.Columnが1(A列、つまり、最初のCurrentRegionであるときのみ、得点が60点以下ならば、”C”を設定するようにしてみた。つまり、この R.Columnが1(つまり、A列だね)のところがミソなのだ。図はEXCELでなく、OpenOfficeなのは、気にしないでね。
Dim R As range
With Range("A1")
.Autofilter 5,"="
.Autofilter 3,array("<60","="),xlFilterValues
If WorksheetFunction.Subtotal(3,Range("A:A")) > 1 then
With Range("A1").CurrentRegion.Offset(1,0)
For Each R in .Resize(.Rows.Count-1).SpecialCells(xlCellTypeVisible).Rows
If R.Column = 1 then
R.Range("E1").Value = "C"
End If
Next R
End With
End If
End with
これでいいんじゃないのかな?なぜ、CurrentRegionが分断されていると気がつくことができたか?それは、破壊されたセルの規則性と壊れた内容からの類推。そこで、先ほどのrのアドレスを出してみた。Debug.Print r.addressをイミディエートウィンドウで表示すると、複数のエリアに分割されていたのがわかったのだった。
2021年11月9日火曜日
vbaでdir("*.xls")はリモートファイル(共有フォルダ)のxlsxファイルをゲットできなかったよ。Good Grief(やれやれ)。
vbaでdir("*.xls")はローカルファイル(自分のpc)のxlsxファイルはゲットできたんだけど、リモートファイル(共有フォルダ)のxlsxファイルはゲットできなかったよ。やれやれ。また、マイクロソフトのバグ?でも、そんなときは、dir("*.xlsx*")と書けば良いようです。
2021年11月8日月曜日
モノマネvba虎の穴ルール1:vbaでは最大行を求める前にフィルターをクリアしておけ!
モノマネvba虎の穴ルール1:vbaでは最大行を求める前にフィルターをクリアしておけ。
maxRow = ActiveWorkbook.Worksheets(1).Cells(Rows.Count,1).End(xlUp).Row if Worksheets(1).FilterMode = True then WorkSheets(1).showAllData
ではなく、これだ
if Worksheets(1).FilterMode = True then WorkSheets(1).showAllData maxRow = ActiveWorkbook.Worksheets(1).Cells(Rows.Count,1).End(xlUp).Row
やれやれだ。

