ラベル EXCEL の投稿を表示しています。 すべての投稿を表示
ラベル EXCEL の投稿を表示しています。 すべての投稿を表示

2014年9月15日月曜日

EXCEL:シート内のTextエリア、カーソル進行方向が逆になる

先にEXCELでおかしな動作があったことを書きました。ついでなので、2年ちょっと前にあった別のおかしな動作も書いときます。

これはMicrosoftのHPにはっきりOfficeのバグだと書いてありました。何が起きるかというと、EXCELのシート内にTextエリアを作り、それでWord代わりに書類を作る方が時々います。(こっちからすると、なんでそんな面倒くさいことやるのか、と思うんですが大抵の人は仕事で資料作るときに、覚えるツールは最低限にしたい!という欲求があるようです)
それで2003のExcelで作成したデータを、2007/2010で開いて編集しようとすると、時々Textエリア内にカーソルを持っていき、編集したいところへカーソルを持っていこうと、例えば右に方向のカーソル移動キーを押したとします。だけど実際のカーソルは左に動いてしまう!?という状況です。

必ず発生するわけではありません。条件ははっきりしませんが、そういうことが起きるらしいです。(最初、相談されて実物を見たときはびっくりしました。)おかしいのはカーソル移動だけで、編集は普通にできます。カーソルをなんとか移動させて、そこに日本語を挿入すると普通に右子方向に文字列は挿入できます。

それでは何が起きたかというと、はっきりとはHPに書いてはありませんでしたが、どうも文字列の属性として「アラビア語」のフラグがこっそりOnになってしまうようです。(アラビア語は、右から左へと、通常の世界の言語とは逆に書きますから。)そこで、この属性に関するフラグを設定し直せとあったんですが、それをするためにはEXCELの使用言語に「アラビア語」を追加してやらないと、文字列の書く方向を指定するコマンドを入力できるようにならないそうです。
それで、「オプション」→「言語」で通常は日本語と英語(米国)しかありませんが、何かアラビア語を追加してやります。(なんか10個くらいアラビア語の種類がありますが、違いがわかりません。まあおそらく英語と英語(米国)の違い程度で、スペルチェックなんかが微妙に違うんでしょうが、そもそもアラビア語なんて入力できないんで、何か追加すればいいと思います)

するとEXCELの「配置」のところに以下の様な新しいコマンドが表示されるようになります。
そう、これでカーソルの移動方向がおかしくなったTextエリアを選択したのち、カーソルの進行方向を設定し直してやればいいんです。

Officeが2003から2007に変わったときは、UIが新しい「リボンインターフェース」になり、かなり戸惑いましたが、M$も罪作りなことにかなりバグ(実装上もだけど、要求仕様上の矛盾も含めて)を作りこんでくれたようで困ったもんです。それでもこれで資料作らないと仕事にならないし...

EXCELの動作がおかしい

人からEXCELの動きがおかしい、と尋ねられて以下の様な画面を見せられました。

(本物はもっと違う数字ですが、例なので単純にしています)最後の合計のところが関数になっていません、あきらかに文字列になってます。セルの書式設定を「標準」にしてやるだけだろうと思い、設定を変えようとしてみると、以下の状態になってました。

あれ?ちゃんと「標準」になってるよ?これ実は「オプション」→「詳細設定」の中にある以下の設定によるものです。

デフォルトではこの「データ範囲の形式および数式を拡張する」がOnになっています。これ何のことかといいますと、直上の連続するセル(今回の例では黄色で示してあるセルがそれにあたります)3つ以上が同じ書式を持っている場合、それを自動的に引き継ぐ機能なんです。
種を明かすと、この黄色のセルは実は「文字列」にしてあります。そのため合計を求めようとSUM関数を入れたのですが、自動的に文字列の書式に設定されてしまいます。

でも2枚目のSSで「標準」になっていることを確認しましたよね。これはある操作を行うと、上記な様なおかしな状況になってしまうことを確認しました。(注:毎回必ずなるわけではないようです。もう少しトリッキーな操作が必要かもしれません。)

①デフォルトのままオートSUMを入れる。(EXCELがここで困ったことに文字列の数字でも、変に「気をきかして」数値として計算してくれるのが間違いの始まり)
②SUMが計算され、結果が文字列として表示される。(従ってこの時点ではおかしなことになっているのに気付かない)
③ここで詳細設定の、上記設定をオフにしてやる。
④合計を行うセルの内容をいったん消して、再度オートSUMを入力する。
⑤②のときにこのセルの書式が文字列になってしまっているので、最初のSSの状態になる。
⑥ここで③の操作を取消、「データ範囲の形式および数式を拡張する」をOnにする。
⑦オートSUMが文字列として表示されているままなので、書式を「標準」にしてやる。

おそらく、書式のフラグがユーザーが操作するものと「データ範囲の形式および数式を拡張する」と別個に内部で持っており、そこに矛盾が発生するようです。
また、できる限りユーザのために思ったような動きをしようと、以下の様な状態の時もあります。

オートSUMを入力したんですが、自動的に上のセルの書式が移ってしまい「文字列」なんですが、計算はしてくれて、結果出力の段階で「文字列」として表示しているようです。

明らかに複数の異なる要求仕様の間に矛盾が発生しているようです。

とりあえずこれを直そうと思ったら、一度「データ範囲の形式および数式を拡張する」をOffにして、当該セル、および直上のセル書式を数値にしてやり、再度「データ範囲の形式および数式を拡張する」をOnにしてやるのが早そうです。


PS
早速、直しに行ってきましたが、うまくいきません(;_;) オートSUMのセルの書式を見てみると、「数値」になっていました(@o@) なんだこりゃ?よくよくファイル名を見てみると(自分は拡張子を必ず表示にしてますが、普通の人は表示しないか、登録してあるものは表示しないになってますね)、「*.xls」になっており、どうも2003で最初は作成したもののご様子。うーん、2003のデータを2007/2010で操作すると色々問題が報告されているから、もっと奥が深いかも。結局、「数値だけ」と指定して内容を新しいファイルにコピーして、必要なオートSUMのところだけ手作業で同じ様なファイルを作り直してしまいました。

後から思い返すと、一回2007の形式に変換保存して、上記手順をやってみるという方法もあったな~と思います。おそらくこの機能、2007からだよね。

2012年10月27日土曜日

EXCELでタイムライン表示

計算結果のうち、複数のイベントが何秒に発生し、それらの関係をまとめるためによくタイムラインを作ります。それ用の表示プログラムもこれまで何種類も作ってきたんですが、OSが変わったり、windows manager、あるいはミドルウェアが変わったりで同じような機能のものを何回もつくってきた気がします。
ふと思いついたのが、最近のEXCELって機能が増えてきたから、グラフのうちの散布図を使えばできるんでないか?横軸を時間、縦軸はイベントの種類を適当につけてラベルを散布図のマークのところにつけれれば・・・ と思ってぐぐってみたら、結構みんなおんなじこと考えるんですね。いくつもヒットしましたが、microsoftの公式見解では「不可能」とのこと。Σ(゜д゜lll) ええ~~、そんなにはっきりいわれちゃうと、と思ったんですが他にヒットしてみたのを見ると、なんか頑張れば似たようなものができるというのがありました。いくつか調べてみて、何とか思い描くものができました。結構、手順は複雑ですが、一度作れれば後は各イベントの時間をペーストしてやれば、いろんな計算結果をきれいにレポートにまとめれます。
ちょっと長いですが、手順をまとめます。

①まずデータを用意します。下図に示したように、第1列にイベント名称(これをラベルとして散布図に表示したい)、第2列にそのイベントの発生時間、第3列が今回の肝として散布図を描くために各イベントの種類(シーケンスと定義しましたが特にイベントの順番というわけではありません)を定義します。散布図として描くのは図中で選択してあるセルです。


②これで選択してあるエリアで、散布図を描きます。
こんな感じになり、横軸が時間なのはいいですが、肝心のグラフ中のイベントのマークのところにラベルがつきません。ここに手作業で一つずつラベルを定義してやります。

③散布図中のイベントマークのところをマウスで左クリックしてやると、すべてのマークが選択され、各マーク(イベント)のところにシーケンスの値がラベルとして右側(デフォルト位置)に表示されます。
なんとなくイメージに近くなりました。ここで細工を加えます。

④ここでさらに右クリックする等して「データラベルの書式設定」を表示させます。デフォルトでは「ラベルの内容」はY値になっていますが、これを「系列名」にしてやります。


⑤やりたいことは、このラベルのところを第1列で定義した各イベントの名前にしたいのです。ここで一つのマークだけを選択するために、最初のマークをShiftキーを押しながら右クリックしてやります。すると一つだけ選択状態になります。
表示されている各マーク(イベント)の表示がシーケンスという表示に手順④でなっていますが、そのうちの一つだけが選択された状態になりました。

⑥さてここが重要です。この状態で、「=」キーを押してやります。表示上は何も変わりませんが、そこで当該マークのラベルにしたい名前が定義してあるセルを選択します。(下図の例では、「ABC」を選択した結果です)
みごと望みの表示になりました。これを各マークで繰り返し、グラフに表示したいイベント名のセルを定義していきます。ラベルの表示位置はここではデフォルトの「右側」のままですが、手順④のところの「データラベルの書式設定」で上にも下にもできます。

またここが重要なのですが、こういうタイムチャートを描いていると計算結果によってとなりあうイベントの時間が近くてラベルが重なりあって見難くなります。そういう時は各イベントで定義してある「シーケンス」の値を適当に調整して表示位置を上下に変えます。

これで一度できてしまえば、時間の列のところに任意の計算結果をペーストしてやればきれいなタイムチャートの完成です。この様なことをやってくれるadd-inを作ったよというHPもありましたが、ちょっと怖かったので今回は手作業で行いました。

2012年8月30日木曜日

ExcelのVBA(保存用ボタンを作る、その2)

前回、VBAで保存用マクロを作成したんですが、そのときファイル名指定を相対指定で行いました。てっきり*.xlsファイルがある場所がカレントだろうと思っていたんですが、試しているとどうも動きがおかしく、*.xlsファイルのある場所以外によくファイルが保存されます。
調べてみたら、VBAではカレントという概念があまりないようで、基本的に絶対パス指定か、ファイル指定用のダイアログを使ってファイル名を絶対パスでもらうのが本来の考え方のようです。その後、詳しく記載してあるページが見つかり*.xlsファイルのある場所はカレントにはならないことがわかりました。(OSやOfficeのバージョンによっても一概にはいえず、My DocumentsになったりProgram File内のOfficeがインストールされている場所が相対指定の場合カレントになってしまうようです)Excelを起動しておき、そこから「開く」を行って*.xlsファイルを指定してやると、*.xlsファイルのある場所(ダイアログによりファイルを指定しています)がカレントになるようです。

でもこれでは困ります。更に調べると、ありました*.xlsのある場所(パス)を指定する方法が。


    fnsave = ThisWorkbook.Path + "\Setting.txt"
    numff = FreeFile
    Open fnsave For Output As #numff


ThisWorkbook.Pathというのが、*xlsファイルのある場所(パス)示すそうです。これでうまくいきそうです。

2012年8月15日水曜日

ExcelのVBA(保存用ボタンを作る)

はっきりいって使い方として邪道だとは思うんですが、Excelのシートで各種プログラムの設定ファイルなんかを操作したくなります。(自分ならSakuraエディタでやるほうが好きなんですが、普通の人にはテキストエディタはちとハードルが高い)
それならばと日本人には使い慣れたEXCELでテキストファイルを保存するようにすればいいでしょうと、ちょっとVBAマクロを調べてみました。意外と簡単にできました。


Sub Save()
    fnsave = "MMM\Setting.txt"
    numff = FreeFile
    Open fnsave For Output As #numff
    For i = 1 To 2
        temp1 = Cells(i, 1)
        temp2 = Cells(i, 2)
        Print #numff, temp1, temp2
    Next i
    Close #numff
End Sub

Sub Save2()
    fnsave = "initialize.txt"
    numff = FreeFile
    Open fnsave For Output As #numff
    For i = 1 To 2
        temp1 = Cells(i, 1)
        temp2 = Cells(i, 2)
        Print #numff, temp1, temp2
    Next i
    Close #numff
End Sub

スクリプトが2個作ってありますが、それぞれのシートにボタンを張っておき、それぞれのスクリプトを設定するだけです。EXCELのBookの位置を基準にフォルダもかえて保存できちゃいます。これなら普通の人でもプログラムの設定を簡単にできるでしょう。(GUIつくるのがいいんだけど、社内ツールなんでそこまで金をかけちゃいられない)
ただOffice2010でやったんですが、マクロ作成の「開発」機能がデフォルトでオフになっていて、メニューの結構深いところにいってオンにしないとだめなんですね。ちょっとびっくりしました。