株式会社ジーワンシステムの代表取締役。 新しいものを生み出して世の中をあっといわせたい。イノベーションってやつ起こせたらいいな。

SQLセミナーの夏

»

 8月のお題は「勉強会の夏、カンファレンスの夏」です。

 というわけで、8月8、9日に大阪でSQLのセミナーを開催します。15、16日も開催するかもです。ってことは、わたしはいつ休むんだ~!!

 それはさておき(お題と関連するのはここと最後だけ)、わたしは小さい頃から技術者(研究者)になりたかった。貧乏だったので高校受験のときにすでに奨学金を受けるつもりでいた。「奨学金(育英会) = もらえるお金」と思っていたんだな……。
 
 中学3年生で高校行くのに育英会の申し込みを調べて(当時はインターネットもないし、調べるのは先生に聞いたりするしかなかった)それで、育英会でもらった(借りた)金は返さないといけないことを知って愕然とする。大学出て借金背負って就職するなんて考えられなかったので、その時点で、実は大学進学はあっさりとあきらめた。

 でも、思春期の僕ちゃんなので周りの目とか気にして、一応、合格してから行かないつもりだったけれど……高校時代はバブルの最高潮で浮かれていたし、やっぱり行かないつもりで嫌な勉強を真面目にするなどということはなかなかできないもので……。もちろん、見事に落ちた(笑)。

 この辺、甘いガキンチョです。

 で、大学で何がやりたかったかというと、

    物理学 > 薬学 > 化学 > 生物学 > 工学 > 情報工学

 まぁ、勉強は嫌いだったけど学問は修めたかった。やりたいことはいっぱいある落ち着きのないガキンチョでした。そんな状態で高校を卒業した後は、大学はいきたいけど行けないし、公務員は採用通知が来たけど行きたくないし、ウダウダとアルバイトを続けていた。今では公務員を蹴ってフリーターってあり得ないかも知れないけれど、バブル絶頂期でしたからね。

    フリーター >> 公務員

 だったのです。

 解説しておくと、当時、わたしの受けた大学で25倍(実質10倍くらいかな)の競争率だったかな。併願で受けた私学の高校ですら競争率が25倍とかだったし(おそらく、実質は2倍ぐらいだと思うけど)併願って滑り止めなのにどうなってるんじゃ~って感じでした。しかし、よく知らないけれど公務員試験の競争率は1.2~1.5倍ぐらいだったと思う。面接に遅刻していったのに合格したぐらいですから、誰も行きたいとは思わないものだったのです。

 「公務員なんて夢のないことができるか!」って思っていました。もちろん、今でもわたしには無理です(笑)。

 短大卒の同級生は最初のボーナス(まだ3カ月しか働いてないというか研修しか受けてないやろ!)が100万円を超えるという人もいた時代ですが、四大卒が入社するころはバブルが崩壊して天国から地獄というか、世代としてなかなか波乱万丈です(笑)。

 ともかく、そんな浮かれた時代に半年ほどいろいろとフリーターを続けていたころ、家電メーカの中央研究所で助手を募集していたのを見つけた。これは、やりたいことにかなり近く、バブル崩壊まで勤めることになります。

 そこで得たものは液晶関連の知識でした。主にTFT液晶についてのことでしたが、STN液晶(懐かしい~)から、強誘電液晶とか、低温ポリシリコンとかも係わらせてもらえた。その他、バブルが崩壊して世の中が暗くなっていく中、研究(研究所)から開発(事業部)へ移行していくところも見れた。

 狙い通り、大学へ行くよりもいろんな勉強ができたと思っている。

 そこで習得できた内容は化学と工学だったけれど、ついでにITの技術も多少、覚えたわけです。そのほんの少し得た技術で、どういうわけか余り望まなかったIT業界で生きている。

 それができているのは、IT業界では、新しい技術がどんどん出てくると言われ、実際に出てくるけれど、実は、IT系の技術は陳腐化しないからです。たとえば、わたしが最初にいじったプログラムは、HPのワークステーションでBASICやFORTRANだった。日本語のフォントも入ってないカナすら打てないものでしたが、その当時の考え方が陳腐化したかというと、今でもわたしの中でベースとして存在している。

 データはマルチプラン(エクセルの前にマイクロソフトが作っていた表計算ソフト)でまとめていましたが、如何に少ない工数で再利用しやすいシートを作るか考えたことは、今でも活きている。

 やりたかった化学や工学の部分で得たものは、離れてしまった今としては利用しようがないけれど、IT系の技術というのは「読み書きそろばん」と同じだから、陳腐化することはないのです。

 IT業界は新しい技術が出てきてすぐに陳腐化するという人は、おそらく、記憶でどうにかしようとするからじゃないかな。いったんリセットしてしまっているのでしょう。しかし、本来はベースになって積み重なっていくイメージです。

 というわけで、IT系の勉強は何から始めても同じなので、弊社では新人教育にはエクセルマクロから入ります。

 http://www.g1sys.co.jp/column/_de_excel_de_bubble_breaker.html

 こちらの更新が止まっているのは……反応もないし(苦笑)。新人にソースを解析させて、それを解説させるつもりだったのですが、今、そんなことをさせる新人がいないためです。

 さらに、こんなこともやっていました。

 http://www.g1sys.co.jp/cramschool/

 エクセルマクロをセンス良く作れる人は他の言語でも何でもできる。このセミナーの目標は以下ぐらいの関数を作るところまでなのですが、センスいい人を見つけられたらと思って始めたのに、数年間で受講者は3名です。なんだかな~。

 でも、陳腐化しないしプロにならなくても勉強しておけばいいと思う。わたしなど、下の関数と似たものをDOS版の頃に作ってたんだから、本当に長く使える技術ですよ(似たものと思うことが重要で、全然違うと思う人は考え方が固すぎる)。

 ちなみに、以下の関数をエクセルのVBAの標準モジュールに貼り付ければ、ワークシート関数として使えます(例によって全然テストしてないので、バグがあったら教えてちょうだい)。

 さらに、アクセスの標準モジュールに貼り付ければまったく同じソースコードで、フォームでも、レポートでも、SQLの中でも利用できます。つまり、SQLのスカラー関数ですね。

 ほら、つながったでしょう。エクセルでセンスよく作れている人は、SQLでも結構イケてるモノを作ります。

 余談ですが、事務処理をする会社ならエクセル用に1本作っておくと便利だと思うのですけれど、そういう使い方をしているところは見たことがないな……。

 本来は半角カナとか機種依存文字を使っているのですけれど、それは直してあります。

Option Explicit

Public Enum Mode
  Full = 0
  HiraKana
  KataKana
  HannkakuKana
  Short
  ShortHankaku
  Short1
  ShortKana
  Non
End Enum

Private Type typHoujinList
  strFull As String '株式会社
  strHiraKana As String 'かぶしきがいしゃ
  strKataKana As String 'カブシキガイシャ
  strHannkakuKana As String '半角カナで
  strShort As String '(株)
  strShortHankaku As String '(株)
  strShort1 As String '機種依存文字で
  strShortKana As String 'カ(括弧はロジックで)
End Type

Private arrList() As typHoujinList

Public Function 法人格(ex As String, intMode As Mode)

  Dim strRet As String
  
  'arrList が初期化されているかわかる方法がない。
  On Error GoTo ErrH
  strRet = ChangeHoujin(ex, intMode)
  
  法人格 = strRet
  Exit Function
  
ErrH:

   ' 起動時一回しか実行されない。
   Call GetHoujinList
   Resume

End Function

Private Sub GetHoujinList()
'本来は外部から、学校法人とか医療法人とか、あるだけ追加する

  ReDim arrList(0)
  With arrList(0)
    .strFull = "株式会社"
    .strHiraKana = "かぶしきがいしゃ"
    .strKataKana = "カブシキガイシャ"
    .strHannkakuKana = "カブシキガイシャ"
    .strShort = "(株)"
    .strShortHankaku = "(株)"
    .strShort1 = "(株)"
    .strShortKana = "カ"
  End With
  
  ReDim Preserve arrList(1)
  With arrList(1)
    .strFull = "有限会社"
    .strHiraKana = "ゆうげんがいしゃ"
    .strKataKana = "ユウゲンガイシャ"
    .strHannkakuKana = "ユウゲンガイシャ"
    .strShort = "(有)"
    .strShortHankaku = "(有)"
    .strShort1 = "(有)"
    .strShortKana = "ユ"
  End With
  
End Sub

Private Function ChangeHoujin( _
  ex As String _
  , intMode As Mode)

Dim i As Integer
Dim strReplace As String
Dim strRet As String

  strRet = ex

  For i = LBound(arrList) To UBound(arrList)
    '一旦、フル表示に揃えて
    strReplace = GetReplaceString(i, 0)
    'strRet = Replace(strRet, arrList(i).strFull, strReplace)
    strRet = Replace(strRet, arrList(i).strHiraKana, strReplace)
    strRet = Replace(strRet, arrList(i).strKataKana, strReplace)
    strRet = Replace(strRet, arrList(i).strHannkakuKana, strReplace)
    strRet = Replace(strRet, arrList(i).strShort, strReplace)
    strRet = Replace(strRet, arrList(i).strShortHankaku, strReplace)
    strRet = Replace(strRet, arrList(i).strShort1, strReplace)
    strRet = Replace(strRet, arrList(i).strShortKana & ")", strReplace)
    strRet = Replace(strRet, "(" & arrList(i).strShortKana, strReplace)
    
    '目的の表示に変換する
    strReplace = GetReplaceString(i, intMode)
    If intMode = ShortKana Then
      If InStr(1, strRet, arrList(i).strFull) = 1 Then
        strRet = Replace(strRet, arrList(i).strFull, strReplace & ")")
      Else
        strRet = Replace(strRet, arrList(i).strFull, "(" & strReplace)
      End If
    Else
      strRet = Replace(strRet, arrList(i).strFull, strReplace)
    End If
  Next
  
  ChangeHoujin = strRet

End Function

Private Function GetReplaceString( _
  intPosision As Integer _
  , intMode As Mode) As String
  
Dim strRet As String
  
  Select Case intMode
  Case Mode.Full
    strRet = arrList(intPosision).strFull
  Case Mode.HannkakuKana
    strRet = arrList(intPosision).strHannkakuKana
  Case Mode.HiraKana
    strRet = arrList(intPosision).strHiraKana
  Case Mode.KataKana
    strRet = arrList(intPosision).strKataKana
  Case Mode.Non
    strRet = ""
  Case Mode.Short
    strRet = arrList(intPosision).strShort
  Case Mode.Short1
    strRet = arrList(intPosision).strShort1
  Case Mode.ShortHankaku
    strRet = arrList(intPosision).strShortHankaku
  Case Mode.ShortKana
    strRet = arrList(intPosision).strShortKana
  End Select
  
  GetReplaceString = strRet

End Function

Comment(2)

コメント

kim

生島さん。

いつもお世話になっております。

今回のブログ内容、
そして本日の「ITエンジニア独立入門」拝見しましたところ、
私とほぼ同世代のお方なんだなと実感しました。

生島さんのチャレンジ精神と突破力、とても尊敬します。
辛いときも多々おありかと思いますが、
楽しく人生を送られている感じを受けました。

上記VBA早速、EXCELで動作させてみました。
「名寄せ処理」に使えそうですね。

エンドユーザーにとって「名寄せ処理」に対する考えは
2通りに分かれるますね。

・コンピュータになんか任せられない。経験と知恵で人間がやるべきだ。
・コンピュータなんだから100点満点の精度がほしい。

でも私の名寄せ処理の考えは、
今回の「法人格」関数で60点とれればいいじゃん。
あとの40点は人間がやればいい。
これでそこそこ効率化するし、精度も向上できると思うのです。

最近どこの会社も、「白黒思考(0と1思考)」が
強すぎる感じがして仕方ないのです。
それとも私の考え方が古いのかな・・・。

お体を壊さないように、たまにはお休みしてくださいね。

kimさん、どうも。

> 私とほぼ同世代のお方なんだなと実感しました。
>
> 生島さんのチャレンジ精神と突破力、とても尊敬します。
> 辛いときも多々おありかと思いますが、
> 楽しく人生を送られている感じを受けました。

同世代ですか。私は万博生まれのアラフォーです。
辛いことの方がはるかに多いし、ぜんぜん突破はできてないのですけどね(苦笑)

n-Gramのも公開しようかなと悩んでます。
どうせ売れないから、業界がわずかでも発展する方がよいかと……。

業務にもよりますが、法人格では名寄せは35%ぐらいかな。

http://el.jibun.atmarkit.co.jp/g1sys/2009/02/post-278e.html

さすがに年金は違うけど、名寄せは本来的には最終顧客にインセンティブを持たせてやる方が、メリットが高いと私は思っています。
それで寄らないモノは、ほとんど死にデータじゃないかな……。

どっかで一回書いたと思ったら、ここで書いてた(健忘症ですな)
http://el.jibun.atmarkit.co.jp/g1sys/2009/04/sql-8959.html#search_word=Option%20Explicit

ここに書いてあるとおり、MS Accessは2バイト文字の関数名を受け付けないかも、適当に直してください。

似てるけど違うというのは、何時間も掛からないから、毎回、書き下ろしているということで……。
再利用できてない(苦笑)

まぁ、弊社でExcelで法人格をいじるような案件はないわけで、許してください。

コメントを投稿する