[三流君] −−> [プログラマー業務の愚痴] −−> [バックナンバー一覧]
−−> No.011 Excel使いに負けた日...ワークシート関数TRIM編

Excel使いに負けた日...ワークシート関数TRIM編


本文(発行内容)


<Excel使いに負けた日...ワークシート関数TRIM編>
目次 
1.はじめの挨拶
2.それは、土曜出勤のことだった
3.「ExcelのTrim関数でできるよ」そんなバカな、、
4.飲み会でも、技術話?
5.おわりの挨拶
----------------------------------------------------------------------------
/*
 * 1.こんにちは
*/
こんにちは、今週も、始まりますね。(平和な一週間でありますように、、、)

今回は、先週土曜日、
Excel使いと戦って、負けた?ことを中心に書いていこうと思います。
*↑隣の部(データサービス)のやさしい部長さんです。
 負けたのに、飲み代も1000円だったしねぇ。

原因は、思い込みだったけど、、、う〜ん、くやしい。

前置きは、これくらいにして、そろそろ、始めます。

/*
 * 2.それは、土曜出勤のことだった
*/
先週、土曜日、出勤してました。
システム課のメンバー帰ったし、
一人になったので、メールチェックを行う。
*まったく、会社の設備を使って、、、とんでもないヤツだ。。。

おっ、メール来てるジャン。(チョット嬉しい)
なになに、がんばってください、、ハイ、ガンバリマスヨなんとか、
次は、
 >SP_CNV.MDBで姓と名の間に
 >半角スペースが複数存在(3個以上)する場合
 >全角スペースと半角スペースが混在する場合
 >全角スペースが複数存在(2個以上)する場合
 >はどう処理すれば良いでしょうか?
 >お知恵をお貸し下さい。
あっ、やられた、、、データの想定ミスだぁ。。。
確かに、半角スペースが3つだと、全角2つになってしまう。。
例)匿名   希望-->匿名□□希望
となってしまう。
ちぇ、またミスっちゃったなぁ。まぁいっかと思いつつ、帰る準備をする。

隣のデータサービス課(データパンチ関係の仕事してます)に
システム課帰りますと挨拶をしに行きました。2名まだ残ってました。

部長「あかしやき3人で食べに行かない?」と飲みの誘い。

何を思ったか、部長・スパーバイザーさんに、
「データ処理関係で、姓名間全角スペース一個とか指定って、よくあるんですか?」
と聞いたところ、
SP「よくあるよ、半角スペース2個じゃなくて、全角1つにしてとか」
と答えが返ってきました。
ここでやめときゃいいのに、
「半角の変換プログラムサンプルで作ったら、半角3つ入った時、処理できなくて」
と話を続けてしまった、、、

隣に座っていた、部長が一言、
「ExcelのTrim関数でできるよ」
と悪魔のささやき???(ほんとは、親切なので、天使の助言かな?)
これが、長い土曜日の始まりだった、、、







/*
 * 3.「ExcelのTrim関数でできるよ」そんなバカな、、
*/
心の中、で、できないでしょ、Trim関数じゃ、、、左右のスペース取るだけじゃないの?
と思い、「trimって、左右のスペース取るだけじゃないの?」と言葉の砲撃?
部長「じゃ、やってみよう」とパソコンの電源を入れる。
しばらくするとWin98のロゴ、
Excelを立ち上げて、データと関数を入れる。
   A列       B列
1 匿名   希望   =trim(a1)  --> 匿名 希望
2 匿名□□希望     =trim(a2)  --> 匿名□希望
あっ、なんで中のスペースが取れるの?と驚く。。。

心の中では、絶対できない、、、飲み代カケてもいいと思っていた。
(カケは勝って負けても嫌いなので、普段はやらないのですが、
 そんな私がカケけたくなるほど、自分の中では絶対の自信だった)

動揺しつつ、「半角3つを全角1つにしたいので」と言ってしまった。
Excel使いの部長には、なんでも無い攻撃で、
「=jis(trim(a1))でできる」
とあっさり、返された。

おみごと、、、でした。。。
Excel使いに負けた、、、と思いながら、飲みに行く。。。

枠外開設・グチ --- 思い込みとExcelワークシート関数

Excelワークシート関数とVBAの関数、
同名の関数でも動作が違うみたいです。
みなさんも、変な思い込みは無くして、相手の言葉を良く聞きましょう。
飲み代、カケなくてよかったなぁ、、、ほっとしてます。

だから、テメエは(思い込みの激しいKen3は)、
勝負ごと弱いんだよ。 
ハイ、了解。ゴメンネ。

ちなみに、VBAだと、真中のスペース取れません、安心?してください。
Sub Macro1()
    Dim a As String
    a = "匿名     希望"
    MsgBox Trim(a)
End Sub
だと、中のスペースはそのままで、表示されます。

Excelのテスト


VBAテストモジュール


テストのブックはここから
hosoku/011/index.html

/*
 *  4.飲み会でも、技術話?
*/
普通なら、3の敗戦で、マルマガ終わるんだけど、
飲み会でも技術話?の続きありました。

飲んでる時、やさしい部長より、
Excelで不思議な、質問、ありました。
IF(B5>"17:00","残業","")
だと、判断できないと、、、
って、飲んでる時、言われてもなぁ...
    B列    C列
5行 18:00 =IF(B5>"17:00","残業","")
6行 18:00 =IF(B6-"17:00">0,"残業","")
7行 18:00 =IF(B7>"17:00"+0,"残業","")
8行 18:00 =IF(B8>time(17,0,0),"残業","")

5行目の=IF(B5>"17:00","残業","")
ですんなり、できないみたいです。
なんか、あってる?ぽいけどなぁ。
で、
苦肉の策?で、
6行目の=IF(B6-"17:00">0,"残業","")
みたいに、17時を引いて、0以上だったら
に式を変更したらうまくいったらしいです。

また、7行目みたいに、+0(なんで0たすの?)
を入れると、思い通り、動作します。

その時、飲んでたので(言い訳?)
#17:00#と囲えば、=IF(B5>#17:00#,"残業","")
日付型になるからOKでは
と答えたのですが、本日、やってみたら、これは、ウソでした。
*#はVBAだけみたいです、、、ワークシート上はエラーになります。

お返しをしようと、#で囲うを教えたんだけど、、また、裏目でした。
だから、確認してから、答えようよ、、はいはい。。。

話は、戻って、
キレイ?に書くと、8行目のTime関数を使って、
時間(シリアル値)を返して、比較するのが良いみたいです。

"17:00"だけだと、時間と文字列を比較するので、ダメ。
b5(時間) - "17:00"(文字列)は、自動的に時間の引き算してくれるのでOK
"17:00"(文字列) + 0(数値)は、なぜか結果が時間になる?のでOK
お行儀よく書くなら、Time関数を使ってtime(時,分,秒)を使います
*VBAのタイム関数とは、動作が違うので、注意してください。

枠外解説・グチ -- Excel97...もう少し賢ければ、、
Excel2000だと、=IF(B5-"17:00">0,"残業","")で良いかもしれないので、
インストールしている人は、結果、教えてください。
ken3のExcel97では、ダメでした。

VBA 日付型 (Date) ヘルプから、引用
---
日付型 (Date) の変数は、IEEE 64 ビット (8 バイト) の浮動小数点数の変数です。西暦 
100 年 1 月 1 日〜西暦 9999 年 12 月 31 日の範囲の日付と、0:00:00 〜 23:59:59 の
範囲の時刻を表すことができます。日付型の変数には、日付リテラルとして認識可能な任
意の値を代入できます。日付リテラルの形式は、#1993 January 1# または 
#93 Jan 1 # のようにシャープ記号 (#) で囲む必要があります。

ワークシート関数 TIME のヘルプから、引用
----
指定された時刻に対応するシリアル値を返します。計算結果のシリアル値は、0 〜 0.
99999999 の範囲にある小数値で、0:00:00 (午前 0 時) から 23:59:59 (午後 11 時 
59 分 59 秒) までの時刻を表します。
書式
TIME(時, 分, 秒)
時   時を表す数値を 0 〜 23 の範囲で指定します。
分   分を表す数値を 0 〜 59 の範囲で指定します。
秒   秒を表す数値を 0 〜 59 の範囲で指定します。
使用例
ダブル クォーテーション (") は、戻り値が文字列であることを表します。
TIME(12,0,0) = 0.5 (正午に対応)
TIME(16,48,10) = 0.700115741 (午後 4 時 48 分 10 秒に対応)

/*
 * 5.おわりの挨拶
*/
長い?土曜日が終わって、日曜日、メルマガ書いてます。

ぜったいできる、、、と言って飲み代かけなくて、
よかったなぁ、、の結果レポートでした。
*何かの参考になれば、幸いです。。。

なんか、疲れが貯まったような。
まぁ、飲み代1000円で、いろいろな発見あったし、良かったかな?
でも、飲んでる時は、楽しい話をしましょうよ、、技術話じゃなくて。
やさしい部長に感謝の三流プログラマーKen3でした。。。

では、また。。。 次回は、Excel使いに勝った話をしたいですねぇ。
*今度は、今風・流行り言葉のリベンジだぁ〜、、、と変な気合を入れる。
  返討ちにあわないでね、、、はい。。。



ページフッター

ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、

リンクや広告など

項目別に本音?それとも建て前?的な記事をまとめました。

気になったジャンル↓を選択してください。
[ルーキー rookies]・・・ 新人さん達 初心者さんへ
[学ぶ study]・・・学習、技術の取得
[仕様書 doc]・・・仕様書・設計書関係の話
[共同作業 team]・・・チーム、グループ作業
[プログラムは心? spirit]・・・プログラマー 心・気質・魂

[掲示板デビューしようぜ bbs]・・・掲示板関係の話、質問者・回答者の気持ちほか
[昔はできた seo]・・・三流式の効果無しSEOとアフィリエイト
[仕事や作業、転職 job]・・・仕事や転職、評価、作業など
[その他 etc]・・・その他 分類外の記事

※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。
※※読んで、気分を悪くされたらスミマセン。

Blogとリンク:[三流君の作業日記]/ [愚痴(Bookmark)]/ [広告Blog(Bookmark)]



[三流君(TOP ken3.org へ戻る)] / [プログラマー業務の愚痴] / [バックナンバー 一覧]