空談録

世界で5人くらいに役立ちたい

Office InsiderじゃないバージョンでOfficeを黒くすることはできるか

できません(おしまい)

…っておい! って言われそうなのでちゃんと書きます(長く書かないけど)
16.0.6568.xで黒テーマが追加されましたが16.0.6001.xとかで黒くできないんです?って聞かれたので試してみました

やり方というかその辺は 
artfulplace.hatenablog.com
で予想してください。レジストリいじるしそんなね、懇切丁寧に説明する必要もないよね

実験対象は16.0.6001.1054と16.0.6001.1061です

追記2(2016/02/23):お呼ばれじゃないけどこんな記事を見たので
ayano.hateblo.jp

とりあえず試してみた結果「同じアカウントで黒テーマにすると古いほうはDark Grayになる」っていうのを確認しました。
ついでにこの状態でごにょごにょするとDark Grayのまま維持されることも把握しました(特に白にされることもない)
どうして?って聞かれても知ったこっちゃないですしOffice Insiderのフォーラムへどうぞと思いますが、おそらくバージョンが低い時はBlackからDark Grayにして送り返してるんじゃないでしょうか。
向こうのサーバーか何かの実装とか知りません。 オフラインにしてやってみようぜ? PCたくさん持ってる人に言ってください…


追記(2016/02/18):頭が悪いので間違えてました。昨日の内容は忘れてください。1行目に誤りはないです。

とりあえず比較してみましょう。まずこれがBlackテーマ
f:id:fantasticswallow:20160218092027p:plain

次にこれがDark Grayテーマ
f:id:fantasticswallow:20160218092047p:plain

で、次がごにょって出した1061でのスクリーンショット
f:id:fantasticswallow:20160218092117p:plain

どう見てもDark Grayです本当にありがとうございました
というかなんだよこれ見分けつくわけないだろ


以下元の文

16.0.6001.1054の時点で黒く起動するのは確認できるのですが、すぐに白テーマに戻されてしまいます
16.0.6001.1061についても同様です。起動した後にごにょると値の書き換えは起こらないのですが起動するたびに戻されるので意味なし

一瞬だけ黒を楽しみたい方はぜひやってみましょう。何が起きても一切保証しません


というわけで気になるならさっさとOffice Insiderに登録しましょう
https://products.office.com/ja-jp/office-insider

登録方法は私のところの記事か 
artfulplace.hatenablog.com

@kazuakix さんのところの記事で頑張ってください
blog.kazuakix.jp

PowerPointのConvert to Shapeがとても便利でよい感じですという最近の感想
もうちょっと認識精度上がってほしい気もするけどまあ運用でカバーできる範囲

この辺で

Office UI Themeをレジストリで観察してはいけない

さすがOffice、我々には到底できないことを平然とやってくれる

おっふぃーすのUIテーマを変えるとCustomTaskPaneのホストも変えてくれます。しかしWPFとかでコントロールを作るとコントロールは変わらなくて若干残念な気分になります
単純に言うとBlackテーマにしたらオレオレアドインもBlackテーマにしたいってだけです

しかしUIテーマはVBAなりで拾える気がしません。どうしたらいいのか

それレジストリでできるよ!

TLで嘆いていたら@miru_rhさんが見つけたようです

さすがですね、私みたいな雑魚とは経験値が違う…

とまあさておき、レジストリで見ると見つかるとのことなので探してみます
Office 2016だとこんな感じの位置です
"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Common\UI Theme"
Commonの中にREG_DWORDで入ってます。下のフォルダではないです

2013の場合は15.0にすればOKですね

ですがここで問題が起こります。数字しか入ってないので対応がわかりません
Theme Configuration Group Policy support for Office 2013 – Anything about IT を見ると2013については
0 = White, 1 = Light Grey, 2 = Dark Grey 
となっています。では2016は?ということで検証してみます

結果はこれ
・Office 2016 (ver 16.0.6568.2016)
1 = Colorful
3 = Dark Grey
4 = Black
5 = White

…ぜひとも滅んでほしい感じですね
2がないあたりもよくわかりませんしWhiteが5に飛んでるのもわけわかりません

ですがここで終わりではないわけです。先ほどのはOffice Insider向けにBlackテーマが追加されているバージョンです。ではそれ以前はどうなっていたのでしょうか
結果を見てみましょう
・Office 2016 (ver 16.0.6001.1054)
0 = Colorful
3 = Dark Grey
5 = White

Oh! ミラクルファッキンナンバー!

すごいですね、16.0なら大丈夫とかそんなことはなかったわけですね
そもそもこんな簡単にずれる時点で参照とかしてらんないですね

結論

RenderTargetBitmapを使えばいいんじゃないかな


というわけでただ怒りに任せて書いたみたいな状態です
もし参照したいとか思ってもレジストリだけはやめましょう。ビルド番号まで決められたバージョンでしか使わないというなら止めませんが…

この辺で

ver16.0.6568.2016でExcelに追加されたワークシート関数について

怪奇!いつ追加されたのかわからないワークシート関数!

というわけで追加されたという新しい6個のワークシート関数について調べていきたいと思います
解説は知らないので公式のドキュメントとかを待つとよいかと

追加されたのは
IFS
SWITCH
MAXIFS
MINIFS
CONCAT
TEXTJOIN
ですね。とりあえず一つずつ見ていきます

インクとかの他の情報については昨日の記事でどうぞ
artfulplace.hatenablog.com

追記(2/24):Office Blogで関数についての記事が書かれてたのでそっちをどうぞ
blogs.office.com

IFS関数

プログラミング的に考えるとIf, ElseIf, ElseIf... って感じ。Elseはないです
定義としてはこんな感じ

IFS(logical_test1, value_if_true1 [, logical_test2, value_if_true2] ...)

logical_test* (*には数字が入る)は真偽値を返す式、値を入力します。
value_if_test* は対応する数字のlogical_test*がtrueの場合に返す値を入力します

IFSが返す値は最初に条件を満たした logical_test* に対応する value_if_test* です。これ以降に条件を満たす logical_test* があったとしても無視されます。
すべての logical_test* が false を返す場合 #N/A が返されます

例として書くとこんな感じ。
J7 = 3, J8 = 4, J9 = 10 とします

IFS(J7 = 1,"a",J7 = 2,"b",J7 = 3,"c",J7 = 4,"d",J7 = 5,"e") // = "c"
IFS(J8 = 1,"a",J8 = 2,"b",J8 = 3,"c",J8 = 4,"d",J8 = 5,"e",J8 = 4,"f") // = "d"
IFS(J9 = 1,"a",J9 = 2,"b",J9 = 3,"c",J9 = 4,"d",J9 = 5,"e",J9 = 4,"f") // = #N/A

Else取れないの案外面倒くさい…

SWITCH関数

CのswitchよりもVBのSelect Caseに近いというかVBAのInteraction.Switchというそのものな名前の関数がいる
定義はこんな感じ

SWITCH(expression, value1, result1 [, value2, result2] ...)

expressionには基となる値を入れます
value*, result* は expression が value* と等しい時に SWITCH 関数が返す値 result* をそれぞれ入力します
日本語難しい

SWITCHもIFS同様に最初に等しい値だった value* に対応する result* を返します。これ以降に等しい値となる value* が存在しても無視されます
expression と等しい value* が存在しない場合は #N/A を返します

例を書くとこんな感じ
J7 = 3, J8 = 4, J9 = 10 とします

SWITCH(J7, 1, "a", 2, "b", 3, "c", 4, "d", 5, "e") // = "c"
SWITCH(J8, 1, "a", 2, "b", 3, "c", 4, "d", 5, "e", 4, "f") // = "d"
SWITCH(J9, 1, "a", 2, "b", 3, "c", 4, "d", 5, "e", 4, "f") // = #N/A

追記(2/24):SWITCHのほうは既定値が設定できるようです
IFSと同じかと思っていた…

J9 = 10とするとこんな感じ
SWITCH(J9, 1, "a", 2, "b", 3, "c", 4, "d", 5, "e", 4, "f", "x") // = "x"

MINIFS, MAXIFS関数

どっちも似たようなものだし(何とか)IFSがわかれば簡単ですし…
定義はこんな感じ

MINIFS(min_range, criteria_range1, criteria1 [, criteria_range2, criteria2] ...)
MAXIFS(max_range, criteria_range1, criteria1 [, criteria_range2, criteria2] ...)

MINIFSはすべてのcriteria*を満たしているmin_range内の値の中で最も小さい値を返します
MAXIFSはすべてのcriteria*を満たしているmax_range内の値の中で最も大きい値を返します
やったね!コピペがはかどるよ!!

正直SUMIFSとかAVERAGEIFSで使い方見たほうが早いんじゃないですかねこれ…

すべてのcriteria*の判定終了後にmax_range, min_rangeに値が一つもない場合0を返します

例を書くとこんな感じなのかなぁ。SUMIFSでググったほうが絶対にわかると思う
A1:A5にはそれぞれ1,2,3,4,5が入っていることとします

MINIFS(A1:A5, A1:A5, ">3") // = 4
MAXIFS(A1:A5, A1:A5, ">3") // = 5

MINIFS(A1:A5, A1:A5, ">6") // = 0
MAXIFS(A1:A5, A1:A5, ">6") // = 0

TEXTJOIN, CONCAT関数

CONCATENATE?あいつは死んだんだ…

定義はこんな感じ
CONCAT(text1, [,text2] ...)
TEXTJOIN(delimiter, ignore_empty, text1 [, text2] ...)

CONCATは引数に指定したテキストをすべてそのまま結合して返します
TEXTJOINは指定した text* を delimiter で区切りを入れながら結合します。このとき空のセルが含まれる場合は無視することもできます

これは例を見たほうが早いですね
A1 = "aaa", A2 = "bbb", A3 = "ccc", A4 = "" として、A1 ~ A4を結合してみます

CONCAT(A1,A2,A3,A4) // = "aaabbbccc"
TEXTJOIN(",", FALSE, A1,A2,A3,A4) // = "aaa,bbb,ccc,"
TEXTJOIN(",", TRUE, A1,A2,A3,A4) // = "aaa,bbb,ccc"

こんな感じでとりあえずくっつけるならCONCATを、区切り文字も指定したい場合はTEXTJOINを使う形で行くとよいです。

ん? 君は…CONCATENATEじゃないか!どうしたんだ! なに? 俺が付いてるだろって?

CONCATENATE(A1,A2,A3,A4) // = "aaabbbccc"

そうだな、確かにCONCATと同じ値が返ってくるな

残念ながら君の役目は終わったのだよ

CONCAT(A1:A4) // = "aaabbbccc"
TEXTJOIN(",", FALSE, A1:A4) // = "aaa,bbb,ccc,"
TEXTJOIN(",", TRUE, A1:A4) // = "aaa,bbb,ccc"

CONCATENATE(A1:A4) // = #VALUE!

というわけでレガシーーーExcelと何かするでもなければCONCATENATEではなくCONCATを使いましょう


とりあえず追加分は全部書いたはず

ちなみにIFSとSWITCHはWorksheetFunctionに追加されていません。どこから湧いてきたんだ
って思ったけどこんなんVBAで処理できない気がするんだよな…

この辺で

Office 2016 ver 16.0.6568.2016がOffice Insiderに来ました

ただしメインのインクがおかしい模様…

というわけでOffice Insiderに前回のインク機能のアップデートが降ってきました
11時になってから気づいたのでもうだめです。このブログ記事は300文字後くらいに終わりが

http://answers.microsoft.com/en-us/office/forum/office_insider-office_install/announcing-insider-build-16065682016-for-office/4d740c46-db7d-4d52-a50a-ab61de23ae40
フォーラムのリリースについての記事

support.office.com
いつものやつでJanuary 2016が追加されてます

なんか既知のバグがあるけどちゃんと出す前に直すよって書いてあります。一応読むといいと思います

新機能について雑に書いときます。明日になったら書き直すでしょうたぶん

追記(2/5):Instant Inkingについて書きました。ワークシート関数は別の記事にしました

What's Newが増えた

アップデート後、初めて起動するとこんなダイアログが出迎えてくれます

f:id:fantasticswallow:20160204233528p:plain

これはPowerPointですが、Insider後の新機能についてこんなん増えたよ!ってアピールしてくれてますね。これは便利です
でもこれ大規模アップデートみたいなのあったら大変なことになるんじゃ

Drawタブの追加

というわけで前回書いた通りDrawタブが追加されました
Instant Inkingが試せないのでいまいち嬉しさがないですね

追記:Instant Inkingうちでも試せました。CTH-460を持っていて本当によかった
てっきりSurface Pro3とか専用の機能かと思ってたんですよ
そしたらどうもIntuosで動かしてるって文字が見えたので過去に買ったわこむタブレットを拾ってきてやってみたらできたという

Instant InkingはペンでWord, Excel, PowerPointに入力するとインクとして直接書き込める機能です
??どういう意味? って感じですがペンを近づけると自動的にペンに変わって、ペンを離すと元のモードに戻るってイメージでよいかと

Instant Inkingの場合ポインターで書くのと違い、ペン操作への切り替えをスムーズに行えるためかなり便利です
ポインターではいちいちペンを選択→描く→ポインターに戻すの作業が必要ですが、Instant Inkingでは(ペンを選ぶ→)描くで済むので
ちなみにInstant Inkingでは最後に選んだペンが使用されます

以上Instant Inkingについての追記です。以下元の文


Word, Excel, PowerPointに追加された気がします
インク選択してゴリゴリ描けるのは便利かもしれないです。とはいえいちいちインクに変えたりポインターに戻したり~っていうのは不便かなぁとも思いつつ
Shape RecognitionはPowerPointだけでした。とりあえず今回でかいのはこれだと思うので試してみましょう

PowerPointのDrawタブで"Convert to Shapes"がトグルボタンなのでオンにします
この状態でインクで図形を描けばOKです

例えばこんな感じに四角もどきを描いてみると
f:id:fantasticswallow:20160204232745p:plain

f:id:fantasticswallow:20160204232756p:plain

この通りです。Rectangleの図形になっていますね

一筆書きだけなのかーっていうとそういうわけでもなく、一辺ずつ書いても認識します
なのでこんな感じに

f:id:fantasticswallow:20160204232905p:plain

f:id:fantasticswallow:20160204232917p:plain

矢印を書いても矢印の図形として認識してくれます。これはいい…いいぞ…

ただしあんまり雑に書くと認識してくれません。辺の端が別の辺の端と離れすぎると認識率が一気に落ちるのでつながりのところに気を配りましょう
直線かどうかは全然気にしなくていいので辺の途中は適当で大丈夫です

追記(2/14):図形認識ですが、ペンの種類が"Highlighter"(蛍光ペン?みたいなの)だと変換されません。太さは関係ないのですがそれだけうまくいかないもよう

ちなみにマルチスクリーン環境でプライマリディスプレイとほかのディスプレイの解像度が違う場合Word,Excelにおいて解像度が違うモニター上で表示時にインク処理がおかしくなる気がします。うちだけですかね…
うちは今2560x1440と1920x1080のデュアルスクリーンなんですけどセカンダリのほうにExcelとか持ってくとマウスポインタから遠く離れた位置にインクが描画されることに…ぐぬぬ

写真撮ってみるとこんな感じ。左側にいるサバがマウスポインタ。赤線が今引いてる線
f:id:fantasticswallow:20160205000428j:plain

Blackテーマの追加

やばい、Enterprise向けOfficeみたいな感じやばい。もともとEnterprise向けだった

ハイコントラストで使ってるユーザー向け?に黒のテーマが追加されたようです
変更するとこんな感じ

f:id:fantasticswallow:20160204231515p:plain

かっこいいですね。このまま使うか…

Funnelグラフの追加

値の大きさを長方形の幅で表すFunnelというグラフの種類が追加されたようです。適当にやるとこんな感じ

f:id:fantasticswallow:20160204234134j:plain

ワークシート関数の追加

明日調べる
"IFS, MAXIFS, MINIFS, SWITCH, CONCAT, and TEXTJOIN" が追加されたそうです。詳細がわからない
文字列関係が増えてるようですが

追記:増えた関数についての記事。増えたのは条件判定と文字列関係ですね
artfulplace.hatenablog.com

なんかほかいろいろ

よくわかりません。比較すべき前バージョンの知識もないし…


細かいところは明日のふぁぼツバメが頑張ってくれるでしょう
とりあえず速報的なのの役割は果たせているはずだ…

今はでぶかっしょんで始めた謎プロジェクトを進めてるのですが進捗状況がよくないのでこちらもぐぬぬ
3体ぐらいに分裂したい

この辺で

OfficeのJanuary 2016アップデートについてのメモ

すごい素朴な質問なんですけど普通のユーザーの現行バージョンっていくつなんですかね…? 6366.2056?

とりあえず4日くらい前にJanuaryアップデートについての記事がOfficeブログに出てましたね。今日気が付きました
New to Office 365 in January—new inking tools, collaboration improvements, Office Insider builds now available for Mac and more - Office Blogs
言ってることはまあわかりやすいのですがなんとなく読みづらいので自分用に書いときます

ちゃんと調査しないで誤った記事を書く…ウッ!頭が…

Mac向けのOffice Insiderが始まるよ + 電話とかの話

MacでもOffice Insiderが始まったようです。Mac持ってないのでよくわかりません

追記:Office 365に詳しいかずあきさんがすでに書いてました
blog.kazuakix.jp

またDesktopとWindows 10 Mobileでは対応していたMorph, DesignerがiPhone, iPadでも対応したようです。案外早い
Android上でのInsider Previewでは次のビルドで使えるようになるとかなんとか

インク機能の強化

iPad ProのApple Pencilでめっちゃ描けるぜ!って書いてあるけどそれは置いときましょう。私持ってないし
気になる方はブログで見ましょう

私みたいにWindowsでしかおっひーすを使ってない人達は2枚だけあるWindows版Officeのスクリーンショットに注目しましょう。するとあることに気が付きます。"Draw"タブの存在です。
おそらくOffice Insider向けに今後OneNoteにあるようなインク機能がWord, Excel, PowerPointに来ることが予想されます。Publisher…? 聞こえませんね…

なんでそんなんわかるかというと、見た目上存在しませんがリボンのカスタマイズ画面において"Draw"のタブが存在しているためです。(6366.2062時点。前からある?さすがに前のバージョンに戻すとか無理…)
f:id:fantasticswallow:20160125223122p:plain

とりあえずWordのリボンのカスタマイズ画面と実際のリボン。リボンにはDrawがありませんが設定画面上では存在していることがわかります。
Pen, Color, Thicknessということでまあ普通のペン入力は揃えてる感じ。Select Objectはおそらく普通のモードだと思われます? Eraserはストローク単位かなと

興味深いのはConvertグループです
WordではOneNoteでも存在する「インクを数式に変換する」が用意されています。しかしExcelではConvertグループ自体存在しません。
さらにPowerPointでは"Convert to Shapes"(インクを図形に変換)が用意されています。これこそがおそらく"Shape Recognition"と呼ばれている機能だと思われます
Shape Recognitionはインク入力から近い図形を生成する機能となります。適当にペンで丸を書いたら丸の図形を生成する機能ですね
PowerPointOneNote?にくるのかなと。Shape RecognitionがあればPowerPointで図を作るのも楽になるのではないかなと思ったりします

Instant Inkingはたぶんペン置いたら直接かける的な何かでしょうしうちにはペンがない…


というわけで1月のアップデート(あと6日で1月終わるけど)はインク機能のようです
Shape Recognitionは試してみたいなぁ

Slackの何かを始めましたがまあ当分書くこともない感じ

この辺で

TumblrLikesSaving ver1.25

魔のKUSO CODEが襲い掛かる!

とりあえず1.25になりました。ダウンロードは https://dl.dropboxusercontent.com/u/12260653/TumblrLikeSaving.zip とかで
変更はほとんど進んでいません。モチベーションが吸われた形です

変更点は
pngのみで保存するオプションが正しく動作しないのを修正
・キャプションのURLを画像のソースとして利用する対象にした
・pixiv.netのURLを解析して重複判定を行うようにした
・UserAgentの上書きをIE11のものに変更した
となります

pngのみの保存がおそらくまともに行われなくなっていたのでコードを修正しました
たぶんうごくはずです、たぶん

今までSourceURLとLinkURLしか見てなかったんですけど、どうもTumblr界ではCaptionにだけURLを貼る感じの何かが存在することを把握したのでCaptionからも拾うようにしてみました
一応動いてるので大丈夫なはず

pixivはすくれなんとか対象として面倒なのと今のコードじゃ対応できないので基本放置なのですが、同一ソースの判定としてURLを利用するのはできるようにしてみました
仕様としては
・mode=bigの場合画像が1枚で固定なので同illust_idを持つ画像は重複とする
・mode=mangaの場合は画像が複数存在する可能性があるのですべて許可する
・mode=mediumとかそのほかの場合は同illust_idがすでに保存されている場合通知のみ行い、画像はそのまま保存する(mangaの場合を考慮)
となります。若干判定が怪しいかもしれないですが保存自体はほとんどの場合許可されるのでたぶんいけるはず

IE10がお亡くなりになったらしいのでUserAgentをIE11のものにしときました。これで安心ですね


というわけで若干面倒だったことを解決するためのアップデートでした
いい加減進めないと…しかしWoTがいそがs

この辺で

Twitter APIのstatuses/unretweetって何?

新年初の記事ですね!(違う)
だって書くことないし…

Twitter APIにstatuses/unretweetとかいうのが追加されてたみたいですね
これですね
dev.twitter.com

ひとまず読んだ限り「ツイートをRTしたのを削除する」って意味かなーと思うのですがよくわかりません
そもそもみなさんご存知の通り"statuses/destroy"君で今までも同じようなことができたはずです。とはいえ同じ機能なら今更新参者を呼ぶ意味が分かりませんね
残念なことに私は英語がまともに読めなかったので実験してみました

statuses/destroyと比較してみよう

というわけでこちらで勝手に実験してその結果をご報告だけしましょう。TLに複数回流していたのは申し訳ないです

(以下の文はTwitter API触ってる人という前提です)

まず基となるツイートを"A"とします
次にユーザーxがAをRTしたツイートを"B"とします
さらに別のユーザーyがAをRTしたツイートを"C"とします

ここでA,B,CそれぞれのステータスIDを{A},{B},{C}と表現することにします

さてユーザーxがBを消すためには従来の"statuses/destroy"であれば次のようにする必要がありました
・POST statuses/destroy/{B}.json -> 200 OK

当然ですがこのとき次のリクエストはForbiddenとなります
・POST statuses/destroy/{A}.json -> 403 Forbidden
・POST statuses/destroy/{C}.json -> 403 Forbidden

ここまでは従来の話です。続いてstatuses/unretweetを使いましょう
statuses/unretweetはstatuses/destroyと違って「元のツイートのID、またはそのツイートのRTのいかなるID」であっても自分のRTを消すことができます
つまり
・POST statuses/unretweet/{B}.json -> 200 OK
・POST statuses/unretweet/{A}.json -> 200 OK
・POST statuses/unretweet/{C}.json -> 200 OK
となります。今回であればユーザーxがBを消すのにA,B,CどのIDを使っても消すことができます。

当然これはそれ以降のRTとしてD,Eが存在しても同様です。なので「自分の行ったRTのツイートを探して消すのが面倒くさい」みたいなのは解消しますね

どうでもいいメモ

もし指定したIDのツイートをRTしていない場合どうなるかというと200が帰ってきます。なぞだ
中身はその指定したIDのツイートのjsonです
新しいstatuses/showの形か!?!?!?


以上です。ちゃんと試してません。違ったら申し訳なく

もうちょっとブログを書く機会を増やしたい…ネタがない…

この辺で