著者アーカイブ 村上

村上 著者:村上

【Excel】今更聞けない参照セルの絶対参照と複合参照について

業務でエクセルでグラフを作ったり表を作ったりするので、私にとっては今更なエクセルネタなのですが…今回は「絶対参照」と「複合参照」についてご紹介。
基礎中の基礎ではありますが、確かにこれを覚えるとかなり作業効率が上がるので、覚えておいて損はないです。

 

そもそも「絶対参照」と「複合参照」とは何か?についてですが、エクセルでセルをコピーしたとき、参照しているセルの位置を変えたくない時に使う「$」のことです。

例えば、「=A1+B1」と入力したセルを下方向にコピーしたときに、「=A2+B2」「=A3+B3」…というように下にコピーした分だけ、参照しているセルが下にズレるかと思います。
これを禁止して、どれだけ下にコピーしても、必ず「=A1+B1」となるようにするときに使います。
指定方法はいたって簡単で、「=$A$1+$B$1」というように、行と列の頭に「$」を付けて使います。

絶対参照は、何かの集計でパーセントを出すときに、母数が入ったセルを絶対参照で固定して、あとはセルをコピーするだけで全部の項目のパーセントを算出できるので、入力の手間が省けます。

 

次に「複合参照」ですが、こちらは行と列のどちらか片方だけを固定することを指します。
例えば、行は固定だけど列はコピーする方向に従って横に移動してほしいとか、それとは逆に列は固定で、行は移動してほしいというときに使います。

「=$A1+$B1」
「=A$1+B$1」

こんな感じですね。
上の「=$A1+$B1」ですと、が固定になるので、右方向にセルをコピーしたとき、参照しているセルはAとBの列から動かないようにできます。
しかし、下方向にコピーすると「=$A2+$B2」「=$A3+$B3」…というように、コピーした分だけ下に移動します。

「=A$1+B$1」は上記の逆で、が固定されます。
下方向にコピーしても、参照している行は移動しませんが、右方向にコピーすると、「=$B1+$C1」「=$C1+$D1」…というように横に移動していきます。

とりあえず、エクセルの見出しの部分を見ながら、固定したい方に「$」を付ければOK!とでも覚えておけば問題ありません。

 

ちなみに、セルを絶対参照にする場合は、直接「$」を入力する以外にも、ショートカットキーとしてF4を押しても良いとのこと。
参照したいセルを選択した状態でF4を押すと、「A1」→「$A$1」→「A$1」→「$A1」→「A1」という風に変化してくれます。
…これは私も知りませんでしたが、便利ですね!
今後は多用していきたいと思います。

村上 著者:村上

【気になるニュース】Android版のGoogleマップに乗り過ごし防止機能が追加!

気になるニュースを見つけたのでご紹介。
私はAndroidのスマホを愛用しているのですが、12月14日にGoogleがAndroid版のGoogleマップに乗り過ごし防止の機能を追加したとのことです。

ニュースの記事はこちらから。

Android版「Googleマップ」に乗り過ごし防止機能
http://www.itmedia.co.jp/mobile/articles/1712/18/news060.html

私は実家に帰省する際に、バスと電車を利用するのですが、特に電車は乗車時間が約1時間ほどと、そこそこ移動時間がかかります。
そのため、座れた時などは良く文庫本を読んでいるのですが、心配性なので、毎回駅に留まるたびに顔を上げて現在地点を確認して、と…これが少し面倒くさい。
夢中になると周りの音が聞こえなくなるタチなので、逆にあまり集中しすぎずに済むので良いのですが、せめて30分くらいは集中して読みたいところ。

 

その点、今回追加された機能を使えば、こまめに現在地を確認する必要もなくなって便利そう。

使い方は簡単で、まずGoogleマップで目的地を設定し、交通手段を選択。

複数のルートが表示される場合は、任意のルートを選択し、最後に右下の「開始」ボタンをタップします。

こうしておくと、目的の駅に着く数十秒前プッシュ通知が送信されてくるとのこと。
設定をすれば、端末の振動もするそうなので、もしも本に夢中になったとしてもきちんと気づいて下車できそうですね。

ずっとナビを起動しておくので、バッテリー消費が激しそうですが、一度試してみたいですね。
特に、一度眠りかけて乗り過ごしそうになったバスで使ってみたいです。

村上 著者:村上

【アプリ】遠鉄バス公式アプリ「遠鉄バスどこ!?」で乗車予定のバスの位置がわかる

日頃 遠鉄バスを使う方におすすめのアプリ。
その名も「遠鉄バスどこ!?」です。

アプリのインストールはこちらから。

【スマートフォン向け】バス現在地表示アプリ「遠鉄バスどこ!?」のご案内
http://entetsubus.lekumo.biz/news/2017/07/post-8894.html

Android、iOS の両方が用意されているので、どちらかを選んでインストールしてください。

 

実際の画面はこんな感じ。

上記では、浜松駅から富塚のバス停までの区間と、富塚中学校から浜松駅までの区間が表示されるように設定しています。
区間は自由に登録できるので、よく使う路線を登録しておけば、アプリを起動してすぐに、バスの運行状況を確認できます。

区間をタップすると、次のように詳細が表示されます。

詳細ページでは、具体的にバスがどのあたりを走行中なのかがわかります。
あとどのくらいの時間で最寄りのバス停に到着するのかの目安になるので、外出時に便利です。

 

あまりバスには乗らないので、最寄りのバス停でさえ時刻表が頭に入っていないのですが、こちらのアプリを確認すれば、リアルタイムにバスの位置がわかって便利です。
距離にもよりますが、最寄りのバス停の大体3~5つ前くらいにバスが来ているときに家を出ればちょうど良さそうですね。

個人的には、そこまでバスの利用頻度が高くない方におすすめのアプリかな、と思います。
遠州地域にお住まいの方は、是非インストールしてみてはいかがでしょうか。

村上 著者:村上

【Excel】セルに入力した数値を1千円単位で表示する方法

先日、社内で質問されて調べたので、覚え書きのメモとしてまとめ。

エクセルで、金額を表示するときに、1千円単位で表示されているのを見たことがあると思いますが、それをどうやっているのかについてです。
実際の数値を変えるわけにはいかないので、表示形式を修正します。

 

作業手順ですが、まず、1千円単位で表示したいセルを選択し、エクセル上部のホームのメニューから「表示形式」をクリックします。
実際の画面では、赤枠で囲ったエリアの、プルダウンメニューです。

「数値」とか「会計」などが選択肢として表示されますが、ここでは一番下の「その他の表示形式」を選択します。

こちらを選択すると、下記のようなダイアログが表示されるので、左メニューの「ユーザー定義」を選択し、「種類」の入力欄に、「#,##0,」と入力し、OKを押します。


作業としてはこれだけです。
一見すると、3桁ごとにカンマを入れるときの指定方法と同じに見えますが、末尾にカンマが入るのがポイントです。

なお、100万円単位で表示したいときは、「#,##0,,」というように、末尾にカンマを2つ追加すればOKです。

 

ちょっとした小ネタではありますが、知っていると便利ですね。
桁数の多い金額を扱うときには、是非ご活用ください。

村上 著者:村上

【Android】setVisibilityを使ってボタンを表示・非表示にする方法

ちょっとボタンの表示・非表示を使うことがあったのでメモとして。

なお、今回ボタンはこのように定義しています。

// ボタンの定義
Button btn;
btn= (Button) findViewById(R.id.button);


で、ボタンを非表示にする場合、setVisibility() メソッドを利用します。

// ボタンを非表示にする
btn.setVisibility(View.INVISIBLE);
btn.setVisibility(View.GONE);

引数は、View.INVISIBLEView.GONE のどちらかを指定します。

 

そして今回迷ったのが、こちらの引数でどちらを使うのか、です。
どちらも非表示には変わりないのですが、微妙に挙動が違います。

まず、View.INVISIBLE
こちらは、単に見えなくなるだけで、ボタンの領域は確保されたままです。
CSSでいうところの、visibility:hidden の挙動と同じですね。

次に、View.GONE
こちらは、ボタンの領域を確保せず、非表示にしたボタンのエリアを詰めて表示します。
View.INVISIBLEが「隠す」というイメージに対して、View.GONE は「削除」というイメージですね。
CSSでは、display:none の挙動に近いです。

ちなみに、今回は View.INVISIBLE を使いました。

 

なお、ボタンを表示する場合はこちら。

// ボタンを表示する
btn.setVisibility(View.VISIBLE);

引数に View.VISIBLE を指定します。

 

こういう違いって、いざ使おうとするとどちらがどちらの挙動だったかをすぐ忘れてしまいます。
もしくは、引数をどう指定するかとかも忘れやすいので、今回、備忘録としてまとめてみました。
結構よく使うメソッドなので、少しでも参考になれば。

村上 著者:村上

【CSS】意外と使える背景画像のサイズを変更する方法

大した技術ではないのですが、個人的に使えると思ったのでご紹介。
タイトルにある通り、CSS の background-image で指定した画像のサイズを変更する方法です。

コードはこちら。

// 背景画像を 30px × 30pxに指定
background-image:url("背景画像のパス");
background-size:30px;

そのものずばり、background-size というプロパティを使います。
上記のコードを追加すると、背景に指定した画像のサイズが縦横30pxで表示されます。

また、上記のようにサイズをじかに指定する以外にも、パーセント指定や、containcover といった値も使用できます。
パーセントの場合は、背景画像が指定された範囲に対する画像の幅と高さをパーセンテージで指定できます。
containは、画像の縦横の比率は保持して、背景の範囲に収まる最大サイズになるように画像を拡大縮小してくれます。
coverは、画像の縦横の比率を保持するところまでは、contain と同じですが、こちらは背景の範囲を完全に覆う最小サイズになるように画像を拡大縮小してくれます。
用途によって使い分けてください。

なお、画像のサイズを、縦20px 横 40pxなど、正方形でないサイズで指定したいときは、下記のように指定します。

// 背景画像を 縦20px 横 40pxに指定
background-image:url("背景画像のパス");
background-size:40px 20px;

横のサイズ 縦のサイズ、の順番で記載します。

 

今回は、グラフのマス目を背景画像を指定して表現するというときに、このプロパティを利用しました。
background-size を使えば、マス目の大きさを変えたいときに、元画像自体を編集することなく、CSSのみで調整することができます。
ちょっとしたことですが、意外と汎用性が高そうです。

村上 著者:村上

【CSS】要素に指定した position: fixed が効かない時の対処法

そこまで長時間悩んだわけではないのですが、ちょっぴりハマったのでご紹介。

とある要素に、下記のようにCSSを指定していたのですが、スクロールした際に、親要素の下部にくっついて動くような挙動になってしまいました。

position: fixed;
bottom: 0;
left: 0;

本来は画面の下部にくっついて動かないでいてほしかったのですが、気が付けばページ自体に追従する形になっており、そこそこ慌てました。
が、親要素を確認しても、特に変な記述は見つからず…。

 

で、色々調べてみたところ、bodyに指定した下記のCSSが原因でした。

transform: translateZ(0);

親要素ばかりみていたので、これは盲点でした。

どうやら、子要素に position: fixed を指定した時、親要素に transform が指定されていると、position: fixed が希望した通りの挙動をしてくれなくなるみたいでした。

対処法としては、body に指定した transform を削除するか、下記のように !important を用いて無理矢理上書きするかですね。

// transform: translateZ(0);
// transform を解除

transform: none !important;
// !important を使って none で強制的に上書き

力業感が否めませんが…正常に動くようになったので、今回はこれで問題なしということにしておきます。

position を指定した要素の挙動がおかしくなった場合は、親要素もしくは body に transform が指定されていないか確認してみてください。

村上 著者:村上

【未解決】Xcode 9.1 で ‘Cordova/CDVViewController.h’ file not found というエラーが発生

Cordova で開発中のアプリをビルドしようとしたところ、下記のようなエラーが発生しました。

MainViewController.h:28:9: ‘Cordova/CDVViewController.h’ file not found

エラー内容は書いてある通りで、MainViewController.h というファイルで、Cordova/CDVViewController.h が見つからないというものでした。
MainViewController.h を確認してみると、確かに #import <Cordova/CDVViewController.h> の行でエラーとなっていました。

 

解決方法を調べたところ、下記の画像のように、Build SettingsHeader Search Path の値に下記のような記述があるので、

"$(OBJROOT)/UninstalledProducts/include"

こちらを、

"$(OBJROOT)/UninstalledProducts/$(PLATFORM_NAME)/include"

上記に変更すれば、実行できますとの書き込みを見つけたので、早速試してみました。

が、今回のエラーはこちらでは解決できませんでした…!
以前も全く同じエラーに遭遇したことがあり、その時はこのやり方で解決できたのですが、今回は何故かダメでした。
他にも、iOSのプラットフォームを一度削除した後、再度追加するとビルドできるとの記載もあったのですが、こちらも効果なし…。
それ以外の解決方法も検索してはいるのですが、ほぼ Build Settings > Header Search Path の値を修正するという解決策しかヒットしないので、正直手詰まりです。

もし、上記以外の解決策をご存知の方は、是非ともご教授くださいませ。
どうぞよろしくお願い致します。

村上 著者:村上

【解決済】FuelPHPでストアドプロシージャを実行する方法

以前に投稿した、FuelPHPでストアドプロシージャを実行する方法について、解決したので改めて記事にまとめてみます。
詳しくは、先日の記事をご覧ください。

【未解決】FuelPHPでストアドプロシージャを実行してデータを取得したい
https://cpoint-lab.co.jp/【未解決】fuelphpでストアドプロシージャを実行して/

今回実行するストアドプロシージャはこちら。
年と月を指定して、この期間に該当するデータを取得します。

1> EXEC dbo.user_month_report @year =2017, @month =12;
2> go

こちらは、直接ターミナルで実行すると、データが取得できるので、プロシージャには問題なし。

そして、前回のコードは下記の通り。

// 修正前
$result = DB::query("EXEC dbo.user_month_report @year =2017, @month =12;");
$result->execute();

こちらを実行すると、結果で bool(true) が返ってきてしまい、理由がわからず頭を抱えていましたが、実行の方法が間違っていました。

修正後の正しいコードはこちら。

// 修正後
$tmp = DB::query("EXEC dbo.user_month_report @year =2017, @month =12;", DB::SELECT);
$result = $tmp->execute()->as_array();

修正前のコードでは、execute() で実行したものをそのまま出力しようとしていたのですが、そうではなく、一旦変数に代入してから出力したところ、無事にデータが取得できているのを確認できました。
また、DB::query()の第二引数の$typeに SQL クエリタイプとして「DB::SELECT」を指定して、データを取得するプロシージャであることを明記しました。
これも必須の指定のようでした。

更に、取得できたデータに対して as_array() を使うと、データを配列に格納できて、扱いやすくなります。
execute() と as_array() はセットで覚えるのがおすすめですね。

以上、FuelPHPでストアドプロシージャを実行する方法でした。
ちょっとしたミスでしたが、私はこういう些細なミス程ハマりやすいので、今後もこまめに備忘録として投稿していきたいと思います。

村上 著者:村上

【PHP】PHPExcelを使うときにセルの書式設定を変更する方法

今回はPHPでのエクセルファイルの作成についてです。
ライブラリは、PHPExcelを使用しています。

 

まずは事前準備から。
ライブラリ導入は、Githubからダウンロードしてきて、requre_once で読み込むだけでOKです。
URLはこちらから。

PHPOffice/PHPExcel
https://github.com/PHPOffice/PHPExcel.git

//ライブラリ読み込み
require_once APPPATH.'../packages/excel/Classes/PHPExcel.php';
require_once APPPATH.'../packages/excel/Classes/PHPExcel/IOFactory.php';

パスは任意の場所に修正してください。

そしてエクセルファイルの作成から、編集するシートの設定までは下記の通り。

// PHPExcelオブジェクトを生成する
$book = new PHPExcel();
// テンプレート読み込み
$phpexcel = \PHPExcel_IOFactory::load('./tmp/template.xlsx');
$phpexcel->setActiveSheetIndex(0);
// カレントシート選択
$sheet = $phpexcel->getActiveSheet();
// シート名変更
$sheet->setTitle('データ');

今回はテンプレートを読み込んでいますが、もちろん新規のファイルを作成して、それを編集することも可能です。

セルに文字列や数値を入れる時は setCellValue()setCellValueExplicit() メソッドを使います。

// 数値
$sheet->setCellValue('A2', 0123);
// 文字列
$sheet->setCellValueExplicit('A1', "あいうえお", \PHPExcel_Cell_DataType::TYPE_STRING);

このあたりは分かりやすいですね。

 

本題はここから。
セルの書式設定を変える方法は下記のとおりです。

// 数値表示(小数点第2位まで)
$sheet->setCellValue('B1', 12.345);
$sheet->getStyle('B1')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_00);
// 12.35

// 数値表示(小数点第2位まで & 3桁でカンマ区切り)
$sheet->setCellValue('B2', 8765.4321);
$sheet->getStyle('B2')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1);
// 8,765.43

// パーセント表示(小数点第2位まで)
$sheet->setCellValue('B3', 0.56789);
$sheet->getStyle('B3')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00);
// 56.79%

上記のように表示形式の定数が設定されており、それを指定して使用することができます。
他にもありましたが、使用頻度が高そうなのはこのあたりかな。

なお、下記のように自分で指定することもできます。

// 数値表示(3桁でカンマ区切り)
$sheet->setCellValue('C1', 12345);
$sheet->getStyle('C1')->getNumberFormat()->setFormatCode('#,##0');
// 12,345

指定方法は、エクセルのセルの書式設定の時と同じですね。

 

こちらの方法を使えば、小数値をパーセントに直すときに、100をかけて、% を後ろにつけて…なんて作業をやらずに済みますね。
というか、最初表示形式の指定方法を知らなくて、上のように文字列でパーセント表示をさせようとしてしまいました。
当たり前ですが、こちらの方が遥かに楽です。

また、エクセルを開いたときに時折見かける、「数値が文字列として保存されています」という警告も防げます。
個人的には、これが一番嬉しいですね。

ということで、PHPExcelの知っているとちょっと便利なメソッドでした。