Excel関数を使って、和暦年月日をシリアル値変換

久しぶりにExcel関数を使用しました。日付の和暦⇒西暦変換には『昭和xx』『平成xx』などからの変換はよく記事を見ましたが、今回は『H20』『S45』などの和暦頭文字で表記されている場合の日付の妥当性について関数を作成したので記載します。

和暦文字列⇒年月日へ変換する
I2,J2,K2のセルがそれぞれ以下のように和暦年、月、日で入力されており、これらの年月日の妥当性をチェックしたい場合。
H20|02|11

=IF(I2&J2&K2=””,0,DATEVALUE(IFERROR(CHOOSE(CODE(ASC(MID(I2,1,1)))-82,”昭和”,”大正”),”平成”) & MID(I2,2,2) &”年”&J2&”月”&K2&”日”))

  • IF() 初めに空文字チェック
  • DATEVALUE() 日付をシリアル値に変換する。できない場合は#VALUEが表示される。

頭文字1文字(T,S,H)で和暦判断だけする関数

=IFERROR(CHOOSE(CODE(ASC(MID(L2,1,1)))-82,”昭和”,”大正”),”平成”)

  • ASC(MID(L2,1,1)) 1文字取得し、ASCII文字に変換(全角アルファベットを半角に)
  • CODE(),IFERROR() ASCIIの値、S(83),T(84)からインデックスを求め、和暦判断させる。当てはまらない場合(つまり’H’の時)はIFERRORにて判断しERRORの”平成”を表示させる。

 

NPO法人向けに『Google Apps for Nonprofits(無料グループウェア)』を導入してみる

先日教育機関へGoogleApps for Educationを導入すると言う事で、記事を書かせてもらいました。

今度は、NPO法人向けにある『GoogleApps for Nonprofits

Google Apps for Nonprofitsとは

非営利団体や公益法人へGoogle社がグループウェアやクラウドドライブサービスの提供をしてくれます。

以下、Google for Nonprofitsより抜粋

非営利団体向けプログラムでは、非営利団体向けに Google のツール(Gmail、Google カレンダー、Google ドライブ、Google Ad Grants、非営利団体向け YouTube など)を無料で提供しています。新しい資金提供者やボランティアを募ったり、作業の効率を高めたり、非営利団体の理念や活動内容を伝えたりするために、これらのツールを活用してください。

Google for Nonprofitsを利用するには、NPO法人の登記と実態の活動実績が必要です。それと以下団体への登録が前提となります。

  • Techsoup Japan (NPO・公益法人向けにMicrosoftやAdobeが支援してくれる団体)
  • NPO広場(Techsoupと連携してNPO法人の登録管理している団体)

Google for Nonprofits の利用資格として、TechsoupJapanで取得できる確認トークンが必要になります。

  1. TechsoupJapanへの登録手続きとして登記謄本が必要になります。
  2. TechsoupJapanに法人登録後は、過去の事業収入・支出を記入、窓口担当者・事務員数など組織の詳細構成や活動実績を記載していきます。
  3. その後、GoogleApps for Nonprofitsを利用申請できます。

先に独自ドメインでメール運用していないとスムーズにいかない

通常は上記3つの手順でうまくいくようです。今回は以下理由でスムーズに手順が進みませんでした。

  • メールが元々のISPからもらっているデフォルトのアドレス(xxxx@tikixx.ocn.ne.jp)しかなかった。
  • 独自ドメインによるWebはあるが、メールサーバは管理していない。(WebはAmebaOwndを利用していた)。

状態としては、GoogleApps for nonprofits申込み時はGmail(@gmail.com)による登録が必要でした。このアカウントがGoogleAppsの管理者となるようです。

次に、WebサイトのドメインでGoogleアカウントを作成する必要がありますが、上記記載の通りメールアカウント・サーバは管理していない為、Googleアカウント作成時のメールによる認証が出来ない状態でした。

『さて・・・どうしよう。』という事で、sakuraのメールサーバを一時的に利用することにしました。『一時的』と記載したのは、Appsへの設定が終わったらこのWebで使用しているドメインのMXレコードはGmailへ移行するので必要がなくなる為です。

さくらドメイン+AmebaOwndをさくらメールサーバ、さくらドメイン+AmebaOwndに変更する手順

いろいろ勉強になりましたが・・・。これはなかなかわからなかった。

次に、Webのドメイン設定についてですが、こちらはsakuraドメインにて管理しており、wwwをサブドメインとしてCNAMEにてエイリアスをAmebaOwndへ向けています。
さくらで取ったドメインで独自ドメインを利用する ← こちらを参考にすると「さくらドメイン+AmebaOwnd」の設定の解説が記載されています。)

続きを読む

ソフトバックロボット・Pepper(ペッパー)の開発環境構築実行とスマホから操作してみる

Pepperが愛媛県松山市の河原学園グループ・河原電子ビジネス専門学校に置いてあると言う事で、触らせてもらいに行きました。

まずは、そのままのPepper君をご覧ください。
会話になっているような、なっていないような。会話は話しかけるタイミングにコツが必要なようです。

続きを読む

さくらレンタルサーバのWordPressでユーザ情報更新時にInternalServerError(500)

WordPressのマルチサイトでユーザー追加時に500エラー』まさにこの症状がでたのですが、メール周りでもなさそうだったので、以下のように継続調査しました。

タイトルのように、『Internal Server Error 500』が表示されたときは、以下箇所を疑ってみます。

.htaccess の書き方の間違い

htaccess内のBasic認証やAccess denyなどの設定、Permanentなどの記述方法ミス、不要な全角スペースがある、などを疑います。

PHP のプログラムミス

プログラム記載ミスや処理の記述がないか疑います。

php.ini の記述ミス

さくらレンタルサーバの場合、php.ini はコントロールパネルから提供されています。この中に記載ミスがないか調査します。

それでも原因不明な時は・・・

コントロールパネルから提供されているエラーログを確認します。

今回、私の環境でエラーログには、『malformed header from script. Bad header=/home/hoge/dead.letter… S:』が表示されていました。

それと合わせて、php.iniのエラー表示もありphp.iniを見てみました。結果、原因はphp.iniの記載ミスでした。

 

BuddyPressをカスタマイズ

BuddyPressプロフィール一覧上部に、カスタム文章を表示する。さらに、表示・編集で切り替える。


add_action('bp_before_profile_field_content', 'account_details_display_howto' ); // 登録画面文章表示
add_action('bp_before_account_details_fields', 'account_details_display_howto' ); // 登録画面文章表示
// 新規アカウント登録時のタイトル設定
function zam_before_register_page() {
echo "<h2>" . get_the_title(6) . "</h2>";
return "";
}

登録メンバー一覧のサムネイルや、掲載情報を修正する場合は

/home/ippin-dou/www/test/wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/members/members-loop.php を直接修正するか、add_action(bp_directory_members_item, functionxxxx) を追加すればよい。

プロフィールの一覧上部に任意の文章を追記する

Buddypressでプロフィール表示画面の、一覧表となる上部にBuddyPressのプロフィール拡張プラグイン『Buddypress xProfile Rich Text Field』で追加・追記した文章を表示させます。
以下のコードでは、プロフィール項目A,B,Cの項目を表示させる処理です。add_action() でアクションフックに登録し、プロフィール情報をecho させるのみです。

$count_loop = FALSE; // 同一画面で複数回CallBackされたカウント
add_action( 'bp_before_profile_field_content', 'bp_before_profile_func');
function bp_before_profile_func(){
    global $count_loop;
    global $bp;
    
    // 初回のみ表示させる
    if($count_loop) return ;
    else $count_loop = TRUE;
    // echo bp_displayed_user_id();
    $profile_title="タイトル";
    $corp_name = xprofile_get_field_data('[プロフィール項目A]', bp_displayed_user_id());  
    $corp_picture = xprofile_get_field_data('プロフィール項目B', bp_displayed_user_id());  
    $catchecopy = xprofile_get_field_data('プロフィール項目C', bp_displayed_user_id());  
    if($catchecopy != "")  $profile_title = $catchecopy;

    $profile_descript= xprofile_get_field_data('プロフィール項目D' ,bp_get_member_user_id());
    $profile_text = nl2br($profile_descript);
    echo <<<_PROFILE_INF_
	<h2>{$corp_name}</h2>
	{$corp_picture}
        <strong id="bf_profile_title">{$profile_title}</strong>
        <p id="bf_profile_desc">{$profile_text}</p>
_PROFILE_INF_;
}