goo blog サービス終了のお知らせ 

I hate MICROSOFT

私が憎んでいるマイクロソフト社製品の便利小技集
悪い事は言わない、今すぐMS社製品をアンインストールしなさい

Becky! ユーザにも嫌がらせをする

2009-10-22 23:32:51 | I hate MS Excel
outlookユーザとBecky!ユーザに嫌がらせをする。

今日は次の三行をヘッダに足してみた。
Priority: 1
X-Priority: 1
X-MSMail-Priority: High

一方、AL-Mail、Thunderbird 共に、X-Priority はデフォルトでは実装していないので動作しない。AddIn扱いである。正しい実装だ。

====以下perlスクリプト
#!/usr/bin/perl

$from = "nitobi\@saigyo.org";
$to = "nitoba\@saigyo.org";
$subject = "zzzzzzzzzzzzzz";

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$mon += 1;
$dt = "$mday $mon $year 0:0 +9:0";

open(MAIL,"|/usr/bin/nkf -j | /usr/sbin/sendmail -t");

print MAIL "From: $from\n";
print MAIL "To: $to\n";
print MAIL "Subject: $subject\n";
print MAIL "Priority: 1\n";
print MAIL "X-Priority: 1\n";
print MAIL "X-MSMail-Priority: High\n";
print MAIL "Importance: high\n";
print MAIL "X-Message-Flag: =?iso-2022-jp?B?GyRCJDQ2KE5PJCo0aiQkJDckXiQ5GyhC?=\n";
print MAIL "Reply-By: $dt\n";
print MAIL "\n";

print MAIL "むふふ。\n\n";
print MAIL "------------------------------------------------- \n";
print MAIL " 嫌がらせじゃい。\n";
print MAIL "------------------------------------------------- \n\n";

close(MAIL);

ダブルクリックで

2006-06-08 13:53:12 | I hate MS Excel

デスクトップ上のxlsファイルをダブルクリックしても、
excelが立ち上がるだけで、データが出てこない。

「ツール」/「オプション」/「全般」の
「ほかのアプリケーションを無視する」のチェックをはずしましょう。

なぜここにチェックが入ったかが問題なんですが・・・。

向学心旺盛な方はこちらへ。
[XL2003]ダブルクリックでファイルを開くことができない

論理式

2006-05-19 11:19:40 | I hate MS Excel

もう既に散々使ってますが、Excelの関数で、
動作を期待しない条件判断は論理式をそのまま書けば良い。

どういう事かというと、

| |A| B |
| 1| 0|TRUE | <- =IF(A1=0, TRUE, FALSE)
| 2| 1|FALSE | <- =IF(A2=0, TRUE, FALSE)
| 3| 2|FALSE | <- =IF(A3=0, TRUE, FALSE)
| 4| 0|TRUE | <- =A4=0
| 5| 4|FALSE | <- =A5=0
| 6| 5|FALSE | <- =A6=0
| 7| 6|FALSE | <- =A7=0
| 8| |FALSE | <- =AND(B1:B7)


という具合に「真」か「偽」がわかりさえすればいいという場合、
=IF(A1=0, TRUE, FALSE) ではなく、
=A1=0          でよいという事だ。

B列は論理式なのでIF関数やAND関数やOR関数の条件式としてそのまま使える。
7行目はその例。B1からB7まで全て「真」ならば「真」となる。

代入文と混同しそうなところがさすがMSだ。

英文字・数字・数字・数字のデータだけ抽出したい。

2006-05-17 20:42:29 | I hate MS Excel

文字数4、英文字、数字、数字、数字で構成される商品コードを抽出したい。
どうしたらいいべ。

| |   A   |    B    |
| 1|商品コード  |品名       |
| 2|4902102055314 |Emblem Black   |
| 3|T800     |ターミネーター  |
| 4|MR-GU2A13BK  |Multi Card Reader |
| 5|GP03     |GALS Paradise   |
| 6|Z112     |カスタムレンズシート レッド |
| 7|Z12L     |エンブレムサイン     |

セル「C2」に関数
=AND(LEN(A2)=4,"A"<=LEFT(A2,1),LEFT(A2,1)<="Z",
"0"<=MID(A2,2,1),MID(A2,2,1)<="9",
"0"<=MID(A2,3,1),MID(A2,3,1)<="9",
"0"<=MID(A2,4,1),MID(A2,4,1)<="9")
を入れて「C7」までコピー。

| |   A   |    B    | C |
| 1|商品コード  |品名       |   |
| 2|4902102055314 |Emblem Black   |FALSE |
| 3|T800     |ターミネーター  |TRUE |
| 4|MR-GU2A13BK  |Multi Card Reader |FALSE |
| 5|GP03     |GALS Paradise   |FALSE |
| 6|Z112     |カスタムレンズシート レッド |TRUE |
| 7|Z12L     |エンブレムサイン     |FALSE |

正規表現が使えればいいのだがねぇ。
地道にやるしかないでしょう。

別解1
C2 : =LEN(A2)=4                 4文字か?
D2 : =AND("A"<=LEFT(A2,1),LEFT(A2,1)<="Z")   英文字か?
E2 : =AND("0"<=MID(A2,2,1),MID(A2,2,1)<="9")  数字か?
F2 : =AND("0"<=MID(A2,3,1),MID(A2,3,1)<="9")  数字か?
G2 : =AND("0"<=MID(A2,4,1),MID(A2,4,1)<="9")  数字か?
H2 : =AND(C2, D2, E2, F2, G2)          全てが「真」ならば「真」
「C2」から「H2」を
「C7」から「H7」までコピー

別解2
IF関数の入れ子。面倒だから書かない。
多分動かない。私の記憶が確かならば、
関数の入れ子は確か7階層までだから。

数字3文字の検査を
AND("000"<=MID(A2,2,3),MID(A2,2,3)<="999")
とやってはいけない。
7行目"12L"も引っかかって「TRUE」となってしまうぞ。

手を抜いてはいけない。

もっとエレガントな方法、募集中。
考えてみなさい。

追伸:
こんな事はExcelでは処理しない。
csvでsaveして、(たとえばtest.csv)

#!/usr/local/bin/ruby
require "jcode"
$KCODE = "S"

while gets
  if $_ =~ /^Dd{3},/
    print
  end
end

てなrubyスクリプトに通せば

$ ruby test.rb < test.csv
T800,ターミネーター
Z112,カスタムレンズシート レッド

$ ruby test.rb < test.csv > ans.csv
で抽出したans.csvが得られる。

65536行などというけちな上限もない。

それはそうと「キャバ嬢」のブログにトラックバックされた模様。
削除しようと思ったが、面白いので放っておこう。
おじさん好きらしい。「くそおやじ」に反応したか?

と思ったら一日もしないうちに消滅。
がんばって生きてね。

ウイリーを排除しろ再び

2006-05-17 19:02:23 | I hate MS Excel

こんなデータがある。重複しない人数を数えたい。
どうする?

| |  A   |
| 1|相武 紗季 |
| 2|ウィリー  |
| 3|桜井 幸子 |
| 4|麻生 久美子|
| 5|上戸 彩  |
| 6|ウィリー  |
| 7|山口 智子 |
| 8|ウィリー  |
| 9|ウィリー  |
|10|桃井 かおり|

セルB1に関数
=COUNTIF($A$1:A1,A1)

これをB2からB10までコピー

セルB11に関数
=SUMIF(B1:B10,1)

| |  A   |B|
| 1|相武 紗季 | 1| <-- =COUNTIF($A$1:A1,A1)
| 2|ウィリー  | 1| <-- =COUNTIF($A$1:A2,A2)
| 3|桜井 幸子 | 1| <-- =COUNTIF($A$1:A3,A3)
| 4|麻生 久美子| 1| <-- =COUNTIF($A$1:A4,A4)
| 5|上戸 彩  | 1| <-- =COUNTIF($A$1:A5,A5)
| 6|ウィリー  | 2| <-- =COUNTIF($A$1:A6,A6)
| 7|山口 智子 | 1| <-- =COUNTIF($A$1:A7,A7)
| 8|ウィリー  | 3| <-- =COUNTIF($A$1:A8,A8)
| 9|ウィリー  | 4| <-- =COUNTIF($A$1:A9,A9)
|10|桃井 かおり| 1| <-- =COUNTIF($A$1:A10,A10)
|11|      | 7| <-- =SUMIF(B1:B10,1)   ほらね

何でこうなるかは、各自考えるように。

味噌は
=COUNTIF($A$1:A1,A1)
の絶対指定($A$1)と相対指定(A1)の混合指定にあります。

これをコピーすると、絶対指定は変化せず、
相対指定はコピーした分変移してゆくのです。

因みに、関数の中で
相対指定A1を選択(青反転)して、「F4」キーを押すと、
A1 -> $A$1 -> A$1 -> $A1 と変化します。
私も知りませんでした。
会社の渡邉さんに教わりました。


丸めいろいろ Round関数

2006-05-02 12:22:49 | I hate MS Excel
どうよこれ。
って何が・・・って感じですよね。
マクロでVBAを使う人以外は関係ありませんが・・・。

| |A |B |C |
| 1|0.5| 1| 0|
| 2|1.5| 2| 2|
| 3|2.5| 3| 2|
| 4|3.5| 4| 4|
| 5|4.5| 5| 4|
| 6|5.5| 6| 6|
| 7|6.5| 7| 6|
| 8|7.5| 8| 8|
| 9|8.5| 9| 8|
|10|9.5|10|10|
|11| 50|55|50|<---=SUM(*1:*10)


A列は数値 B列はExcelのROUND関数の値 C列はVBAのROUND関数の値。
B列数式 : =ROUND(A*, 0)
C列数式 : =MyRound(A*, 0)

Function MyRound(n, d)
  MyRound = round(n, d)
End Function

計算結果が違うでしょう。

そう。プログラムによって関数の返す値が違うんですよ。

ExcelのROUND関数=算術丸め:皆さんが学校で習った奴。
VBAのROUND関数 =銀行丸め:結果が偶数になるように丸め処理。
MS-ACCESS等はVBAのROUND関数の様です。

この他にもランダム丸め、オルタネート丸め等が存在しますが
MSは実装していないのでここでは触れません。
それぞれ .5 の処理が違います。
境界値の処理の問題ですな。
残業代は算術丸めで計算すべきでしょう。あ、俺残業代ないわ。

せめてどれかに統一して欲しかったな。マイクロソフトさん。

これ以上詳しい事は各自学習するように。
もっと詳しく知りたい向学心旺盛な方はこちらへどうぞ。

[OFFXP]VBAのRound関数について

丸めを行うカスタム プロシージャを実装する方法

ババァには気をつけろ * と ? と ~ (ワイルドカードとそのエスケープキャラクタ)

2006-05-01 14:28:36 | I hate MS Excel
例によってこんなデータがある。

| |A|  B  |
|1|1|* 紗季 |
|2|2|* 幸子 |
|3|3|* 久美子|
|4|4|* 彩  |

あとで置換を使って「*」を「新渡戸」に変えようという魂胆だ。

ではでは。BをクリックしてB列を選択。
編集/置換 
「検索する文字列」を「*」とし
「置換後の文字列」を「新渡戸」とする。
「すべて置換」をポチッとな。

| |A| B  |
|1|1|新渡戸|
|2|2|新渡戸|
|3|3|新渡戸|
|4|4|新渡戸|

あん?何だこりゃ。
原因は「*」がワイルドカードとして機能しているかららしい。
「?」一文字ワイルドカードも同様の問題を抱えているらしい。

打開策は?・・・「~」チルダ・・・なんだそうな。
ワイルドカードをエスケープするんだそうな。
聞いた事ねぇ~。
どれどれ。BをクリックしてB列を選択。
編集/置換 
「検索する文字列」を「~*」とし
「置換後の文字列」を「新渡戸」とする。
「すべて置換」をポチッとな。

| |A|   B    |
|1|1|新渡戸 紗季 |
|2|2|新渡戸 幸子 |
|3|3|新渡戸 久美子|
|4|4|新渡戸 彩  |

お馬鹿だね。マイクロソフト。

縦の物を横に置く 行-列 入れ替え

2006-04-29 11:17:25 | I hate MS Excel
こんなデータがある。それぞれを列見出しにしたい。
どうする?

| |A|  B    |
|1|1|相武 紗季 |
|2|2|桜井 幸子 |
|3|3|麻生 久美子|
|4|4|上戸 彩  |

A1からB6を選択
編集/コピー(Ctrl+Cでも可)

配置したい場所にカーソルを移動 例えば D1

編集/形式を選択して貼り付け 
「形式を選択して貼り付け」ウィンドウが出てくるので
「行列を入れ替える」をチェック
「OK」ボタンをクリック
おりゃ。

| |  D  |  E  |  F   |  G  |
|1|     1|     2|      3|     4|
|2|相武 紗季|桜井 幸子|麻生 久美子|上戸 彩 |

y = -x + c シンメトリですな。

「形式を選択して貼り付け」は友達にしておくと心強いので
よく研究しておくように。

MSヘイターおやじの使うショートカット

2006-04-29 11:15:16 | I hate MS Excel
私はマイクロソフトが嫌いです。
MS社製品の使用は極力避けています。
従ってWindowsショートカットは知りません。

私が使うコンピュータは1台ではなく、
OSもWindowsとは限らないからです。

ただし、しょうがないけど便利なので

Ctrl+A 全て選択
Ctrl+Z 元に戻す
Ctrl+X 切り取り
Ctrl+C コピー
Ctrl+V 貼り付け

だけは使ってあげます。