2008年11月04日

平地での初雪です。
たぶん、日中には溶けてしまうだろうなあ~~~。
でも、予報はユキ。
こうなると、みなさん一斉にタイヤ交換を始める。
今日は、ガソリンスタンドが混雑するだろうなあ~~~。
Posted at 2008/11/04 07:57:00 | |
トラックバック(0) |
クルマ | 日記
2008年11月03日

前回、2006年に富士フォトサロン札幌で開催した写真展に展示した作品を、公開しました。今回は、2007年東川町文化ギャラリーで開催した写真展に展示した作品を、公開しました。
今回もポジからではなくプリントからのスキャンですので、解像度はそれなりです。実際のクリスタルプリントの解像度には及びませんが、雰囲気だけ楽しんでください。
Love.Japanese crane Photo Gallery
2008年からは、仲間と2006年に結成(そんなに大げさではありませんが)したグループ写真展を開催しています。全員の作品データが手元にありませんので、公開できるのは、個人で開催した写真展の作品だけです。
Posted at 2008/11/03 12:49:16 | |
トラックバック(0) |
写真 | 趣味
2008年11月02日
撮影に行きたかったが、旭川は大雨。
釧路方面は、そでもないですがちょっと気が進まず、家でうじうじしています。
((((((;_ _)ノはう
コンピューターソフトのプログラミングなんて覚えることも無かったのですが、必要に迫られて10年ほど前にちょっとね。
始めはMS-OFFICEのEXCEL内包のVBA(Visual Basic for Application's)程度でしたが、何故かC/C++まで手を出してしまった。でも、すべて習得したのでなく、自分に必要な箇所しか分からないよ。
ゴルフなど、同じメンバーのシーズン通しての成績をEXCELで集計する場合には、次の方法で集計するのが便利ですね。
アルゴリズムとしては、
集計対象の行(または列)番号を取得する。
その行(または列)番号を、指定数で除す。
その剰余を取得する。
同じ剰余のときだけ足していく。
これを実現するため、ワークシートへの式の入力は、配列式にする。
つまり、単純に「Enter」を押すのでなく、「Ctrl+Shift+Ectar」と入力する。
例えば、4行おきに集計する場合の実際の式。
{=SUM(IF(MOD(ROW(R[-10]C:R[-1]C),4)=0,R[-10]C:R[-1]C))}
{=SUM(IF(MOD(ROW(R[-11]C:R[-2]C),4)=1,R[-11]C:R[-2]C))}
{=SUM(IF(MOD(ROW(R[-12]C:R[-3]C),4)=2,R[-12]C:R[-3]C))}
{=SUM(IF(MOD(ROW(R[-13]C:R[-4]C),4)=3,R[-13]C:R[-4]C))}
{}は入力する必要がありません。「Ctrl+Shift+Enter」と入力すると、自動的に入ります。
行番号を4で除し、余りが「0」ならば合計。
行番号を4で除し、余りが「1」ならば合計。
行番号を4で除し、余りが「2」ならば合計。
行番号を4で除し、余りが「3」ならば合計。
20年前のEXCELがVersion2.1の頃。WindowsがOSでなく、まだMS-DOSのユーティリティーでFDでも動作していたVersion2.11の頃に考えたものです。その頃の表計算ソフトは、MS-DOS版では、MSのマルチプランからLOTUS1-2-3になっていましたね。もともとEXCELはMAC用にMSが開発したアプリケーションですからね。
セル参照方法は、EXCEL Var2ではそれしかなかったR1C1形式で慣れているので、Ver3.1からLOTUS1-2-3を倒すために導入したA1形式(マルチプランはA1形式でしたが)は使っていません。
10年前にVBAを勉強しているときに、同じアルゴリズムをVBAで実現させたのが、次のマクロ(この場合は、ユーザー定義関数)です。
EXCELで「Alt+F11」でVBE(Visual Basic Editor)を起動して、標準モジュールに次のマクロを書きます。
'変数宣言を強制
Option Explicit
'複数行おきの合計
'target:セル選択範囲
'a:指定行
'b:剰余(あまり)
Public Function skipsum(ByVal target As excel.Range, ByVal a As Integer, ByVal b As Integer) _As Double
Dim x As Variant
Dim y As Double
Dim i As Long
i = 1
For Each x In target
If i Mod a = b Then y = y + CDbl(x)
i = i + 1
Next
skipsum = y
End Function
使い方は、次の通り。
=skipsum(R[-10]C:R[-1]C,4,0)
=skipsum(R[-11]C:R[-2]C,4,1)
=skipsum(R[-12]C:R[-3]C,4,2)
=skipsum(R[-13]C:R[-4]C,4,3)
試しに、1列目の1行目から10行目に「1」から「10」の数値を入力して計算結果を試してみましょう。
計算結果は、
12
15
18
10
となって、合計すると「55」になりましたね。
上記のユーザー定義関数を、EXCEL起動時に自動的に読み込むように設定しておくと、いつでも使えますよ。
C/C++で書く場合は、ポインタを上手く活用するとよいですね。無理にポインタを使わなくても、できますが...
ъ( ゜ー^)ニコッ
EXCELも、当時は高かったなあ~~~。
2DDのFDが7枚で、98,000円したもんなあ~~~。
あらら、このBLOGを書いている間に、雨が上がった。
((((((;_ _)ノはう
Posted at 2008/11/02 11:51:12 | |
トラックバック(0) |
一般 | パソコン/インターネット
2008年11月01日

腰が...
((((((;_ _)ノはう
Posted at 2008/11/01 13:57:42 | |
トラックバック(0) |
クルマ | 日記