2020年12月6日日曜日

dateserialとdataaddでexcel/access+vbaの日付を制す

DateSerial and DateAdd are usefull and perfect.
ThisMonth firstday : DateSerial(Year(Date()),Month(Date()),1)
Today a month ago : dateAdd("m", -1,Date())
辻村深月さんの「ツナグ」という小説はずっと前に読んていた。先日、ブルーレイレンタルで映画を観た。その中で原作にはない、「最上のわざ」(Life's Greatest Task)という詩が出てきた。「老いは神様からの賜物(ギフト)」。「最上のわざ」とは、まず、「To grow old with a cheerful heart,」(楽しい心で年をとること)。生きていること、そのことがギフトだし、老いてもまさに、楽しくありたいものだ。

2020年12月3日木曜日

access docmdコマンドではクエリのパラメタを設定できない。じゃ、どうすればいいんだ?

 accessのクエリをDocmdコマンドで自動化しようとしたのだが、そのクエリでは日付をパラメタで指定する必要があるにもかかわらず、Docmdコマンドではパラメタを設定できないことが判明した。それが仕様だ。どうしよう(仕様)もない、しよう(仕様)がないらしい。 やれやれ、
 何かいい手はないものかと、つらつらと考えた。要するに、日付のパラメタを止められればいいわけだ。幸い、ワタシの場合、前日、前々日、前月前日、前年前日の4パターンでクエリーを動かせば事足りる。それならば、日付別に4つクエリーを作れば、パラメタをやめることができる。クエリの日付の抽出条件にそれぞれの日付、つまり、前日にはDate()-1を、前々日にはDate()-2を,前月前日にはDateAdd("m", -1, Date())を、前年前日にはDateAdd("yyyy", -1, Date())をそれぞれ設定すればよいことを思いついてしまった。どうだろう。逆転とまではいかないが、いい感じでしょ。あきらめないこと、それが大事だ。 
 村上春樹さんの「走ることについて語るときに僕の語ること」では「考えるために書く」ことを述べている箇所がある。書かないと考えがまとまらない、深められないのだと。そういえば、Writing is thinkingもしくはThinking is writingみたいなことをスティーブン・キング氏(Stephen Edwin King)が言っていたとおもう。そういうタイトルの本を出していた。いや、On writingだった。

2020年11月30日月曜日

vba pivotitemクラスのvisibleプロパティを設定できません

 vbaで「pivotitemクラスのvisibleプロパティを設定できません。」というエラーが出た。 原因は、ピボットのフィルターに古いアイテムが残るためだ。 
 対処は、[ピボットテーブル オプション] ダイアログ ボックスの [データ] タブの [データ ソースから削除されたアイテムの保持] の [1 フィールドに保持するアイテム数] で [なし] を選択して、[OK] をクリックする。そして、ピボットを更新すればよい。 もしくは、以下のようなvbaを書く。
Dim pvotItem As PivotItem
    Worksheets("WorksheetNameA").PivotTables("pivottable1").PivotCache.MissingItemsLimit = xlMissingItemsNone
    Worksheets("WorksheetNameA").PivotTables("pivottable1").PivotCache.Refresh
    For Each pivotItem In WorkSheets("WorksheetNameA").PivotTables("pivottable1").PivotFields("fieldA").PivotItems
        If pvotItem like "key" then
            povotItem.visible = True
        else
            pvotItem.visible = False
        End If
    Next

2020年10月8日木曜日

windowsでディレクトリ配下の全てのtxtファイルを結合する便利コマンド

type *.txt > all.txt 2>&1
2>&1を付けると、ファイルの内容に先行し、ファイル名が出力されるのだ。 2>&1とは、2番で表現される標準エラー出力も1番で表現される標準出力に出してしまう、いわば、「おまじない」だ。

2020年9月26日土曜日

accessで連番を振るにはdcount関数でカウントする際、idのようなユニークキーを持つフィールドが必須だ

 Accessで連番を振るには条件にあう行をカウントする為、dcount(*,テーブル 名,連番を振りたい条件)と言う感じで書くことになるが、連番の条件にidのようなユニーク(値が重複しない)なキーがなければ、そのようなキーを持つフィールドが必要になる。これがないと、連番を振りたい条件に合致する行が複数ある場合、順番に番号を振ることができない。

 ここで一息のコーナー。超簡単な枝豆の作り方です。
 まず、枝豆を洗う。
 次にフライパンに枝豆+水(枝豆2袋なら70cc)を入れてフタをして中火で7分ぐらい蒸す(ツマミぐして、食べ頃を見極めるのが肝要)。
 時々、かき混ぜる。
 余った水分を切り、最後に塩をツマミ振って、これで完成だ。

2020年9月18日金曜日

Accessで連番を振るDcountで日時データを指定する際、型エラーを避ける為に”#”で挟め

 Accessで連番を振るDcountで日時データを指定する際、型エラーを避ける為には”#”で挟んでおく。 
 即ち、Dcount( "*", "テーブル 1","ID <= " & [テーブル 1]![ID] & " And [日時データフィールド] >=" & "#" & [ テーブル 1]![日時データフィールド[ & "#")としておく。

マイクロソフトはAccessで日時データを扱う時には#で挟むという「おまじない」
を強制するので、忘れないようにするしかない。
  さて、ここで一息のコーナー。  これまでのやり方にはこだわらず、新しいやり方を探求するといいことがある。
  トウモロコシは茹でるよりもレンジでチンすると、美味しくなる。やり方はこうだ。まず、塩水が沁みやくする為、皮を1枚残し、塩水をまぶす。次に、ラップに包んで600wで2分。そして、反転させてもう2分で完成だ。
 これまで食べたことがないくらい、美味しいトウモロコシができるよ。

2020年8月2日日曜日

accessで特定の条件に一致するレコード数をカウントしたいのであれば、sum関数とIIf関数でできるよ

 MS accessを使っていて、特定の条件を満たすレコードの数をカウントしたいことがある。
 そんなときには、sum関数とIIf関数の組合せで実現できる。
 例えば、レコードに「氏名」、「年齢」、「性別」のフィールドがあるとします。
 年齢が60以上の数をカウントしたい場合、クエリのデザインで、名前フィールドに60才以上の数: Sum(IIf[年齢]>=60,1,0)という式を設定し、Σのマークのクリックで集計クエリにし、集計フィールドには「演算」にする。
 このSumで合計、IIfで条件を設定すればよい訳です。

2020年7月13日月曜日

accessのODBC接続でSQLサーバからデータ取得するときにVBAでログイン

 accessのODBC接続でSQLサーバからデータ取得するときに、SQLサーバの参照の度にログイン画面がでてくのは、ウザイ。VBAでログイン処理を書いて自動化したい。つまり、ログイン画面をポップアップさせずに、VBAでODBCでSQLサーバにログインし、データを取って来たいのだ。  よくあるやりかたとしては、ADOコネクションを生成し、DB接続情報をセット(ODBC)、接続をOpenするというrecordsetでデータを取得するというアプローチで、1レコードずつ処理することになるので、面倒くさい。
Set objConn = CreateObject("ADO.Connection")
objConn.ConnectionString = "DSN=DSN1;UID=user1;PWD=password1;" 
objConn.Open
 SQLサーバのテーブルをリンクした、選択クエリを作成している場合、SQLサーバのテーブルへアクセスするのにログイン画面がでてくる。 そのログイン画面を出さないためには、Docmdを使った「簡単な」方法があるのだ。 以下のコードを標準モジュールのどこかに記述してやる。
DoCmd.DeleteObject  Actable,"dbo_TBL-A"
DoCmd.TransferDatabase acLInk,"ODBC Database", _
 "ODBC;DSN=dsn_name;UID=user_id;PWD=pass_wd; _
 & "DATABASE= database_name",acTable,"tabl_name","dbo.tbl_name"
 このテクニックのミソは、TransferDatabaseでSQLサーバのテーブルへのリンクをログイン画面をださすに接続できる、つまり、自動的にコード内で密かにログインしているところだ。そのためにTransferDatabase acLInkの後ろにDB接続情報を記述している。そこがミソなのだ。ちなみにこの文字列はACCESSのリンクテーブルにカーソルを持っていくと、ヌッと表示されるのだ。試してもらいたい。  そして、SQLのテーブルを参照した選択クエリを実行し、EXCELにエクスポートするという2つの操作を1つのDocmdで実現できてしまうのだ。実に効率がいいね。
Dim file1 As String
Docmd TransferSpreadsheet acExport,acSpreadsheetTypeExcel12Xmi,"SELECT_QUERY_USING_SQLserversTable",file1,True

2020年5月20日水曜日

何故かTinyCOREに惹かれる

軽い。早い。何故かTinyCOREに惹かれる。
 rxvt-unicode -fn "xft:monospace-10" -letsp -5
urxvt -fn "xft:monospace size:10" -letsp -5

この投稿もTinyCORE+Google 入力ツールだ。いろいろ検索してたら、どこかのページでこれをゲットした。
 pango-view --markup --rotate=270 --gravity=east test.txt&
test.txt の中身は
 
ほんじつ
本日は、晴天なり

2020年5月1日金曜日

TinyCore V11 seamonkey

TinyCore V11 とseamonkeyで、YouTubeやYahooニュースのFlashvideoがみれるようになった。それはSeaMonkeyのおかげだ。PaleMoonもFireFoxもOperaも全部だめだったけれど、最後にSeaMOnkeyが音を出してくれた。これで完璧です。

2020年4月25日土曜日

TinyCore v11.1 how to save the volume of alsa master volume

TinyCore Liunxでalsaの音量をセーブするためには、.xsessionにamixer set 'Master',0       90% unmuteと書き込んでおけばよい。そして、filetool.sh -bを忘れるな。
そして、このコマンドでスピーカーから音がでるか確認する。
speaker-test [-Ddefault:1] -c2 -t wav -l1

2020年4月24日金曜日

tinycore 11.1 memo

tinycorelinux 11.1+FMV BIBLO NB50Sで音を出すためには、
snd_hda_intelのmodeオプションにgeneric と指定し、sudo rmmod -f snd_hda_intelし、sudo modprobe snd_hda_intelすればよいのだ。
 これを/opt/bootlocal.shの中に書く。こんな具合。
echo "options snd_hda_intel model=generic" > /etc/modprobe.conf
sudo rmmod -f snd_hda_intel
sudo modprobe snd_hda_intel

それから以下のモジュールが必要だ。
alsa-confog.tcz
alsa-dev.tcz
alsa-modules-5.4.3-tinycore.tcz
alsa-plugins.tcz
alsa.tcz

alsamixerでMキーでミュート状態から抜けて、ボリュームをあげておくとよい。
ボリュームを90%にするには、amixer set 'Master',0       90% unmuteを打てばいい。

そして、このコマンドでスピーカーから音がでるか確認する。
 speaker-test [-Ddefault:1] -c2 -t wav -l1


キーボードをjpにするには、aterm上でsetxkbmap jpとうつ。これを.xsessionに書く。
filetoo.sh -bでバックアップに反映しておくと、次回も反映される。
今回も日本語入力はgoogle日本語入力ツールをオンラインで試すのページだ。
http://www.google.co.jp/intl/ja/inputtools/try/

2020年4月22日水曜日

新型コロナによる外出規制の中、FMV BIBLOにTinycoreを入れてみた。

新型コロナによる外出規制の中、FMV BIBLOにTinycore 11.1 currentを入れてみた。
まず、既存のハードディスクにフルーガル(frugal)でインストール。 ポイントとしては、CorePlusを一旦cdかDVDに焼くということだ。 そして、CDから起動したら、Wifiを使えるようにしたら、tc-install-GUIをインストールするわけだ。ただ、インストールする際には、Download+loadでGOのインストール方法をつかうことだ。そうしないと、既存パーティションを使うことになり、マウントが解除できなくなる。そして、frugal & Existing partitionを選べばいいのだ。そして、Mark Partition Active(Bootale) & install boot loaderのチェックボックスのチェック印を外すのを忘れてはいけない。ものの3分ぐらいであっという間にインストールが終わる。気がつかないくらいの速さだ。日本語表示のためには、home/tcに.fpntsディレクトリを作成し、べつのlinuxデストリの/usr/share/fonts/TTFフォントなんかをコピーすればいい。fc-cache -fvでシステムに反映しておく。pale-moonを入れて、ネットサーフィンだ。ニュースもちゃんと日本語でみれた。やったね!さて、日本語入力は、どうするかだが、google入力ツール https://www.google.co.jp/intl/ja/inputtools/try/を使うという荒業が簡単でよいのかもしれない。この投稿も時間がかかってまどろっこしが、できたよ。

2020年4月10日金曜日

コロナ禍でのdeabian10インストール、sudo apt-get install uim uim-anthy

いつものことだが日本語入力がうまくいかない。なぜかわからない。そして、ほどなく、できるようになる。
今回は、これだ。sudo apt-get install uim uim-anthy
そして、いじる。あれっ、できてるじゃん。ちゃんちゃん。
いつまで、FMV-BIBLO NB50Sを使うの?液晶がもつ限り。

2020年3月21日土曜日

slackware 14.2のseamonkeyにpatchをあて、flashplayerプラグインを最新化する

 まず、slackware linuxの本家projectのpackage検索ページでseamonkeyと打ち、patchをみつける。20200321時点では、seamonkey-2.53.1-i686-2_slack14.2.txzだ。
 ところが、これだけ当てると、seamonkey がZlibがないと怒られるので、zlib-1.2.11-i586-1_slack14.2.txzも一緒にあてておく。
  そして、seamonkeyを立ち上げると、falshplayerが動かなっているので、adobeのサイトからflash_player_npapi_linux.i386.tar.gzを入手する。
 tar -zxvfコマンド で解凍すると、libfalshplayer.soができるので、これを例えばrootの.mozilla/pluginsへコピーしてあげればよい。cp libflashplayer.so /root/.mozilla/plugins

2020年3月15日日曜日

open-usp-tukubaiのNFつてNumber of Fieldだ

open-up-tukubaiにハマっている。

$ sm5  1 2 3 NF data6
0002 池袋店 166 134 135 74 87
0002 池袋店 166 134 135 74 87
0003 新宿店 184 172 93 45 142
0003 新宿店 184 172 93 45 142
0001 新橋店 219 98 51 165 85
0001 新橋店 219 98 51 165 85
0001 新橋店 219 98 51 165 85
0004 上野店 247 205 151 207 157
0004 上野店 247 205 151 207 157

@@@@ @@@@@@ 1851 1316 911 1147 1027
のNFは、Number of Field つまりフィールドの数(最大値)だ。
そして、最も重要なのは、「集計時の集約のキーとなる列(ここでは1ー2番目の列)が事前にソートされている必要がある」ということなのだ。
じゃないと、別ものとみなされて、集計されないのだ。つまり、集計のまえに
$ sort  -k 1,1 -k 2,2 data6

しておけということだ。これって、常識なの?

悩みの「るつぼ」のきたむら さとしさんのイラストは凄い

 2020年3月14日の朝日新聞の「悩みのるつぼ」は、夫に先立たれて何事も自分では決められず、自分に依存する母にどう対応するのが良いかを相談する娘に上野千鶴子さんは、自分のやりたいようにやればいいのよと「自立を促す」か、「(娘の)私の言う通りにすればいいのよ」と必殺!ワザの依存を続けるかの、2択をアドバイスされていた。その内容が痛快。
 そして、その記事とともに掲載されていた、きたむら さとしさんのイラストー女性の顔。目を閉じ、大きなイヤリングをして、髪をなびかせている。ーとても良かった。独特なタッチだ。

2020年3月10日火曜日

ワイパーの音がぺしゃこ・ぺしゃこ・ぺしゃこ

 村上春樹さんの「遠い太鼓」では、雨のオーストリアをイタリヤ車のランチア1600GTieで旅する場面で、ウィパーの音を「ぺしゃこ・ぺしゃこ・ぺしゃこ」という音でと表現していた。ギーコ・ギーコ・ギーコでもなく。何となく、面白い音なので、記しておく。

2020年3月4日水曜日

excelでたくさん行をdeleteしたらメモリ不足でコケた。どうする?並べ替えして消すのだ。

 excelでたくさん行を削除する。しかも飛び飛びの数千行だ。そしたら、メモリ不足でデキンとゆうて、excelが勝ってにコケやがった。そんなとき、あなたなら、どうする。
 実はバラバラの行だと、メモリを大量に消費してしまう。それが原因のようだ。
 だから、どこかの列で「並べ替え」(昇順でも降順でもどちらでもOK)を行い、なるべく、削除する行が飛び飛びにならないようにする。そして、削除すれば良い。なんじゃ、こりゃ!という感じである。
 そもそも、excel自身が自分でこれをやってくれればいいのだが、やらない(できない)ので、我々ユーザがやるしかないのである。さすが、マイクロソフト。大名商売でござる。そう、「バグ(欠陥)」ではなく、あくまでも「仕様」なのだ。

2020年2月25日火曜日

gentooでopen-usp-tukubaiを使う

gentooでopen-usp-tukubaiをインストールしてみた。
以下のコマンドで解凍する。
tar xf open-usp-tukubai-2014061402.tar.bz2
cd open-usp-tukubai-2014061402
make install

で、join0と打ったら、エラーがでた。
jagataro ~/Downloads/open-usp-tukubai-2014061402 # join0
  File "/usr/local/bin/join0", line 217
    print tline.getField(0)
              ^
 そうだ。open-usp-tukubaiのpythonは2じゃないとだめだった。
 だから、python2が動くようにする。
jagataro ~ # eselect python list
Available Python interpreters, in order of preference:
  [1]   python3.6
  [2]   python3.4
  [3]   python3.5 (fallback)
  [4]   python2.7 (fallback)
jagataro ~ # eselect python set 4
そして、
 jagataro ~/Downloads/open-usp-tukubai-2014061402 # join0
Usage   : join0 [+ng] key=
Version : Fri Oct 21 11:26:06 JST 2011
          Open usp Tukubai (LINUX+FREEBSD/PYTHON2.4/UTF-8)
で、つかえるようになった。




2020年2月24日月曜日

open-usp-tukubaiに出会う

 上田隆一さんの「シェルプログラミング実用テクニック」を図書館で偶然、手に取る。そして、その内容にうなり、思わず購入した。その後、「フルスクラッチから1日でCMSをつくるシェルスクリプト高速開発手法入門改訂2版」までも購入してしまった。そうしたものの、しばらく、積ん読していた。改めて、手にとり、open-usp-tukubaiをインストールし、その凄さに感動した。もっと早く、出会っていたら、よかった。仕事で活用できることが随分あるなぁと思った。「テキストで極める」という感じ。
 ところで、関西圏に引越して、はや1年。静岡県にあるインド料理「アラジン」の凄さを今更ですが、思い知る。あそこの「チキンジャイプリ」は絶品。ナンも美味い。ホントに辛いカレーなのだ。日本人向けに(砂糖か何かで)甘くしていないのだ。なぜ、多くのインド料理のお店の方々は日本人向けにカレーを甘くされるのだろうか?日本でも本国の味でお願いします。甘くしないてね。
 ドストエフスキーの「罪と罰」をどうにか読み終えた。登場人物の呟きや貧しい暮らしに圧倒された。そして、人は考えたとおりには行動できないし、しないものだなぁと改めて思った。名作ですな。私が読んだのは新潮文庫昭和57年6月10日64刷(訳者 米川正夫さん)。漢字が多く、こんな当て字があるんだなと感心した。


2020年2月10日月曜日

Gentoo Linuxで無線LANを切り替える

/etc/wpa_supplicant/にあるwpa_supplicant.confを書き換えればOKだ。 ctrl_interface=/var/run/wpa_supplicant ctrl_interface_group=wheel ap_scan=1 network={ ssid="new-SSID" psk="暗号化キー" } 知識は絶えず磨かれ、鍛えられ、そして、育まれなければならない。怠れば衰退あるのみ。(P.F.ドラッカー)

2020年1月3日金曜日

MAXIFSは重たいのでどうするか?VBAを組んでみた。

 MAXIFS(MAXIF)は、EXCEL2016+365以降のため、365なしの場合、MAXとIFに配列数式{}(Alt+Shift+Enter)で代替する訳だが、これが相手するデータ量が大量だともの凄く時間がかかり、とても実用には適さない。そこで、これはもう、VBAを組むしかなくなる。  つまり、IFの代替としてのフィルターAutofilterで条件(例えば、A列に*りんご*というKeywordが含まれる。*はワイルドカードで含まれるという条件を実現する)となる行を絞り、MAX関数の代替としてのworksheetFunction:=subtotal(4,Range(targetRow:tagetRow))でターゲットの列(例えばE列)の最大値を求めればよいだけだ。たとえば、Sheet2のCells(1,1)つまり、Rnage("A1")に結果を入れる。
With WorkSheet("sheet1")
    .Range("A1").AutoFilter _
         Field:=1,Criteria:="りんご"        ' --- 検索のkeywordはりんごで、A列即ち、Field:=1だ
 EndWith
WorkSheets("Sheet2").Cells(1,1).Value = WorksheetFunction.Subtotal(4,Worksheets("sheet1").Range(E:E))  '4 means MAX
 MAX+IFに対して、Autofilter+SubtotalのVBAコードは、1ケタぐらい所要時間が短縮できた。つまり、120分が10分ぐらいになった。