2014年8月13日水曜日

excel 仕事で使える小技 Qを抽出

A1セルにYYYYMMの形式でデータが入っている時に四半期のどれか(1Q、2Q、3Q、4Q)を抽出するには
  • =IF(QUOTIENT(RIGHT(A1,2)-1,3)=0,"4Q",QUOTIENT(RIGHT(A1,2)-1,3)&"Q"
ただし、日本式の4月始まりの年度でのQですよ。
頭にYYYYをつけて、YYYYnQ (ex 20141Q)にするには
  • =IF(QUOTIENT(RIGHT(A1,2)-1,3)=0,(LEFT(A1,4)-1)&"4Q",LEFT(A1,4)&QUOTIENT(RIGHT(A1,2)-1,3)&"Q")
地味ですね、本当に。もっと、サクッとできる方法があるといいんだけど・・・

Which quarters is the value of A1 cell in which data is stored like YYYYMM format?
ちなみに、1月始まりの年度の場合は、以下の式です。

  • =IF(QUOTIENT(RIGHT(A1,2)-1,3)=0,"1Q",QUOTIENT(RIGHT(A1,2)-1,3)+1&"Q")
  • =IF(QUOTIENT(RIGHT(A1,2)-1,3)=0,(LEFT(A1,4)-)&"1Q",LEFT(A1,4)&QUOTIENT(RIGHT(A1,2)-1,3)+1&"Q")



wolfgiurl
wolfgiril








ところでアマゾン(Amazon)のギフト券ですが、千円単位なので、余るときには、安いkindle本とかできっちり、千円単位にしてしまった方がよいですね。私はやられてしまった。余った金額をしぼりとられた。あちゃー。





2014年8月7日木曜日

EXCELで困ったときの小技 うまくCSV化できないなら、Rubyを使え

EXCELのシートをCSV化したい場合、EXCEL標準機能でファイル保存でCSV形式にするとセル内改行やカンマが邪魔して、思い通りのCSVファイルにならないことがある。
そんなときには、EXCELの機能を利用することは諦めて、rubyスクリプトを使おう!

rubyがインストールされていれば、以下の3つのステップで簡単にできるよ。
1)ADODBでEXCELファイルをオープン
2)SQLのSELECT文で1行ずつ、読み込む。
3)読み込んだ1行に大して、セル内改行とセル内カンマを除去する

ただし、最初の1行目をフィールド名として使う場合、そのステップが必要となる。














1)ADODBでEXCELファイルをオープン
require ''win32ole'
# Float() ends in no error or error
def Float_String?(str)
  Float(str)
  true
rescue ArgumentError
  false
end
cn = WIN32OLE.new("ADODB.connection")
cn.Provider = "Microsoft.Jet.OLEDB.4.0"
cn.ConnectionString = "Dtata Source=" +  ARGV[0] + ";Extended   Properties=Excel 8.0;"
cn.CursorLocation = 3
cn.Open
2)SQLのSELECT文で1行ずつ、読み込む
sql =  "SELECT + FROM  [" ARGV[1] + "$]"
rs.Open sql
# to get field  name
rec = []
rs.Fields.each do |col|
  text = col.Name
  rec,push(text)
end
puts rec. join(",")
3)読み込んだ1行に大して、セル内改行とセル内カンマを除去する
while !rs.EOF
  rec = []
  rs.Fields.each do |col|
    text = col.Value
    if text != nil and !(float_string?(text))
      text.gsub!(/(¥r¥n|¥r|¥n|,|)/,"")
    end
    rec.push(text)
  end
puts rec. join(",")
rs.MoveNext
end
rs.Close
cn.Close
10年くらい前にrubyを、5年くらい前にはSQLをほんの少しだけ、かじっていたんけど、いろんな「ひとかじり」がつながっていくことは嬉しい。実に、地味だけど。
そして、上記のコードの殆どは、インターネットでゲットできるんだけど、ポイントは、gsubによる「セル内改行とセル内カンマ」の除去。

2014年8月4日月曜日

EXCEL 仕事でつかえる小技 VBAで複数セル(文字列)の連結 EXCEL Tips at work-- VBA concatenating two cells

 覚えたいくつかの事柄の断片(スキル)が、ふとした瞬間につながることがある。
 EXCELでのセルの選択状態をVBAで読むFor Each in Selectionとコピペできるメッセージを出力できるInputBox
 小さな積み重ねだけど、できると案外、嬉しくなる。
One day, some pieces got at work connect each other and then become a tips.
"For Each in Selection" picks selected cells with the selected order and "InputBox" enables to copy and paste the message output by Inputbox.
Very tiny things but it make me happy when it come up as new idea.
 EXCELで選択している複数セル(文字列)を連結するVBA(マクロ)は、これ。
Here is the VBA which concatenates cells with the selected order.

Sub concatenate()
  For Each  r In Selection
    streach = r.Value
    If strselect = "" Then
      strselect = streach
    Else
      strselect = strselect & " " & streach
    EndIf
  Next
  InputBox Prompt:="Please Copy and Paste", Default:= strselect
End Sub
EXCELのSelectionを使うので、セルを選択した順番をキープして、連結が行われます。
規則性がない、離れたセルも連結できますよ。

Selection of EXCEL enables to pick up cells with the selected order for any cells. without any rules and even distant cells.

2014年8月3日日曜日

石の上に3年、泥縄なACCESS習得方法

  知識がゼロの状態から、仕事のために自力でACCESSを使いこなす(新たなテーブルを作り、リンク関係を定義できる)までの泥縄なノウハウ習得のストーリ。
◆入門編〜マ、やるしかないっスよ!
まず、前任者が作成したACCESSをそのまま引き継いだ。幸運なことに、ちゃんとした引継の期間とトレーニングがあり、1から10まで聞けた。最初は、専門用語や操作の仕方などわからないことばかり。でもみよう見真似でマネすれば、元データからACCESSのDBを作成し、クエリーを出して、データを検索し、加工&集計(これはEXECLを駆使)するまで、3ケ月ぐらいでできるようになった。コツは、教えてもらったことを 、とにかくマネして、使うこと。マネしてマネしてマネる。これに尽きる。失敗が多かったのですが、なんとかなるものです。

ところで、日本にはオープンサーバという不思議な英語があるって、ご存じですか?



英語ではオープンサーバ(open server)とは言わないようだ。UNIX server,Windows server, Linux serverとか、個々のサーバで表現するようだ。
日本語のオープンサーバとは、メインフレームに代表される
独自ハードかつ独自OSというプロプライアタリな技術で構成されるサーバに対し、
UNIXやLinuxなどオープンな技術で構成されるサーバのことを指す。ややこしいのは、多くの場合、Windowsもオープンサーバに分類されることだ。Windowsはマイクロソフトのプロプライアタリなサーバなので、クローズサーバ(Close)またはクローズドサーバ(Closed Server) でよいのではないか?
ちなみに、オープンサーバを英訳するとすれば、open technology based serverはどうだろうか?しかし、英語圏で通じるためには、やはり、個々のサーバでいうのがいいのかなぁ。


へんな英語を作り出す、不思議の国、日本ですわ。

How wonder Japan is !





2014年8月2日土曜日

仕事で使えるEXCEL小技 番外編 ブイルックアップVLOOKUP + ピボットPIVOT

 EXCELとの出会いは、会社の仕事でブイルックアップVLOOKUP。こんな便利なものがあったんだ!知らんかった。てっと。
 例えば、ある列の値(例ではA列)をすべての行について、判別し、特定の文字列(例では”くるみ”か”りんご”)であれば、○をつける。
=VLOOKUP(An,"○をつけるための表”,2,FALSE)
<○をつけるための表>・・・どこにあってもOK
AB
 1 くるみ ○ 
 2 りんご ○ 
これが使えようになったのは、職場にEXCELの師匠がいたおかげだ。本で勉強するよりも、最初は教えてもらった方が断然、習得速度が早い。

 仕事のEXCELの必須アイテム、次は、ピボット(PIVOT)だね。
このPIVOTこそ、職場にいるEXCELの師匠に聞いた方がよい。
PIVOTって何、どういう時に便利か。ひとことで言えば、横串集。いわゆる、クロス集計。





2014年7月30日水曜日

EXCELで困ったときの小技 CSV取り込みで文字列が指数(E+nn)になるを回避 unexpected exponetial E+NN in your TEXT field

EXCELの痒いところに、手が届いていないところの技をひとつ。

EXCELでCSVを取り込むとき、
  • CSVをいきなり、EXCELで開くとか
  • CSVを外部データの取り込みでインポートする
 と、思うように文字列が正しく、取り込まれず、E+NNみたいな指数チックになることがある。
これを回避するには、CSVの外部データ取り込みで、該当フィールドを"G(標準)"ではなく、"文字列"を指定して、取り込めば、OK(テキストになる)。

When Importing CSV data to EXCEL by
  • Open CSV file with EXCEL
  • Import CSV file from EXCEL function tab
specific characters may be unexpected E+NN like exponential.

A solution is to specify the field type "Characters(TEXT)" instead of "G(standard or default )" while you import CSV file from EXCEL function tab.
 


 

2014年7月28日月曜日

IE + VBAで仕事を効率化 Webシステムでページ移動、そのページを捕まえる。How to Move Web pages and Catch them

IEの右クリックで、VBAで操りたいWebシステムのページソースを見てくれ。
JavaScriptでページ移動しているなら、以下のコードをトライ。

On how to navigate pages. Check your web page's source code(html).
If your web system made by JavaScript, try this code. 
  • objIE.document.Scriript.setTimeout "JapaScript: your-systems-javascript",200

ページ移動で新しいウィンドウが開かれる場合、そのウィンドウのIE(例えば your-web-page-title-1というタイトルを持つページ)を捕まえないと
制御できない。そのIEを捕まえるコードが、以下。

The following codes enable you to get the control of the new IE window while a new window like "your-web-page-title-1" is open by JavaScript.  
Dim objIE As Object
Dim objShell As Object
Dim objWindow As Object
Set objIE = Nothing
Set objShell = CreateObject("Shell.Application")
For Each objWindow in objShell.Windows
  If TypeName(objWindow.document) = "HTMLDocument" Then
    Set objIE = objWindow
    Debug.Print objIE.Doucument.Title
    If objIE.document.Title = "your-web-page-title-1"  Then Exit For
  End If
Next 
    ページへ移動した後に、表示ボタンをクリックしたい場合、こんな感じ。

    If you want to click for details after you jumped the page, try this. 

    • objIE.socument.Frames("your-frame-name").document.forms("your-form-name").elements("your-bottun-name").Click