西川さんは指定の席に居るかどうかを割り出します。E1に「=A1=”西川”」を入れます。G5まで引っ張ります。できるものは右の図に示されたようなものです。全部FALSEで、一個だけがTRUEになります。このTRUEは西川さんの居る場所です。お分かりかもしれませんが、このTRUEは行と列に関係なく、TRUEです。このTRUEを以って行と列の番号をそれぞれ取得できます。TRUEの場合のみ行と列の番号を出してもらいたいです。その他の場合は0にします。なれば、行か列の最大値として西川さんの位置が分かります。I1に「=IF(E1,ROW(),0)」を入れます。K5までセルの式を引きます。ROW()関数は所在セルの行番号を返します。結果としては、E1:K5は全部0で、一個だけが4になります。この4は西川さんの行番号になります。同様にM1に「=IF(E1,COLUMN()-COLUMN(J1),0)」を入れて、O5まで引きます。COLUMN()関数は所在セルの列番号を返します。ここで注目すべきのは式をM1に入れるので、COLUMN()関数はMの列番号を返します。C列の番号では有りません。C列の番号が欲しいので、「-COLUMN(J1)」を使用しています。COLUMN()関数にセルを記載した場合は、そのセルの列番号を返してきます。J列は相対的原点の位置なので、J1を使いました。(J列のセルであればどれでもいいです。)ここまでは、西川さんの行と列の座標を行列の形で表しました。7行目は各列の最大値を取っています。I7に「=MAX(I1:I5)」を入れています。最後に、I7:K7とM7:O7に対して、それぞれ最大値を取って、「C4」のようなセル名を作ります。これはADDRESSと言う関数を使用します。この関数は行の番号と列の番号をとって、説明を返します。三番目の引数を使用すれば、出力の形式を指定できます。例として、Q1に「=ADDRESS(MAX(I7:K7),MAX(M7:O7),4)」を入れます。Q1の表示内容は「C4」になります。エクセルで自動に行選び(空き行を取り除く)場合によってエクセルで一定のデータを集めたいです。右のような表が有ります。この表の一列目が埋まっている行を集めたいとします。単純にコピペーで一回だけで行を集めるので有れば、結構にいい教材が有ります。時に動的に自動に更新して欲しいです。E10に「Michael」を入れたとします。希望としては、行を集めた結果に自動に「Michael」の行を追加されます。フィルターのように行を表示しないではなく、本当に連続の行でデータだけ集めたいです。この記事はこういう方法をご紹介します。エクセルは計算表です。言い換えれば、計算データの変換表です。今回の行集めの根拠はEの列なので、当面の目的としては、E列の埋まっている行の番号を洗い出します。この番号一覧さえ分かれば、元の各行からデータをとればいい話しになります。最終的に下記のAF7:AJ17のテーブルにしたいです。以下はステップ分けて説明します。初めは、E列にどのセルが埋まっているかを得たいです。ISBLANK関数を使用します。=IF(ISBLANK(E7),0,1)1=IF(ISBLANK(E7),0,1)この数式をT7に埋め込み、T17に引っ張ります。Eの列に埋まっている/埋まってないは1/0で表示されます。Uの列をこの行まで一番近い埋まっている行はどの行かに設定します。9行目は埋まっているので、U9を9にします。10行目は埋まってないので、一番近くて埋まっている行は9行目ので、U10を9にします。7行前は一行もないので、U7を0にします。数式的に考えますと、同行のT列のセルが1の場合は、現在行のU列のセルを現在行の番号にし、そうでないと、上の行のU切のセルの値を取ります。数式で実装すれば、U7は下記のものになります。=IF(T7=1,ROW(),U6)1=IF(T7=1,ROW(),U6)その他のセルは同様に引っ張って作ります。U列の番号を結果表の何行目に表示させるべきかを決めたいです。U列を観察してみれば、前行と現在行の数字が相違していれば、結果表の行数は増えます、そうでなければ、増えません。V7は下記の数式になります。変換は後半になります。このステップではU列の重複値を取り除きます。ここはVLOOKUP関数を活用します。VLOOKUP関数は、一定の範囲内で縦で指定の値を検索し、相応の値を右の列から取り出すことはできます。相応の値を左から取り出すことはできないようです。V列は1,2,3...になっていて、V列から順番を検索して、U列から相応の値を取り出したいです。VLOOKUPを使いたいので、U列とV列の位置を反転させてもいいですが、説明しやすさのため、U列の内容を「=U7」のようにW列で引用します。Uで上り順の順番を検索したいので、X列で重複しない上り順の数字を用意します。Y7を次のような数式にします。=VLOOKUP(X7,V7:W17,2,FALSE)1=VLOOKUP(X7,V7:W17,2,FALSE)Y行の他の列は引っ張ってできます。所要の列番号は集まりました。必要なセル位置を割り出すことは簡単になります。Z7を下記のような数式にします。=IF(ISNA($Y7),"",ADDRESS($Y7,CELL("COL",E7),4))1=IF(ISNA($Y7),"",ADDRESS($Y7,CELL("COL",E7),4))Z7:AD17は引っ張ってできます。この範囲のすべての列はY列を参照するため、Yの前に$をつけてから引っ張ります。Z7:AD17のセルを値を変換します。ここに二個の落とし穴を注意する必要が有ります。「=A1」の場合、A1に何もかかれていなければ、「=A1」の値は0になります。空きを空きのままに維持したいので、判断を入れます。一個の落とし穴はISBLANKは使えません。ISBLANKは数式を検知した場合は、空きだと認識できません。このため、比較演算子を使用します。AF7に下記の数式を入れます。=IF(INDIRECT(Z7)<>"",INDIRECT(Z7),"")1=IF(INDIRECT(Z7)<>"",INDIRECT(Z7),"")AF7:AJ17に他のセルはAF7を引っ張って作ります。この技術はかなりパワーを発揮する場合が有ります。一年中の営業日の日付を集めたい場合は使えます。スケジュール管理の効率向上にかなり役立ちます。実際の例としては、「簡単ガント図」の記事を参考してください。Programmingサーバー間のAPI認証問題を考えてみました。サーバー間のAPI認証問題を考えてみました。仮に、サーバーと複数のクライアントが有るとします。サーバー上でAPIのパッケージを実行したいとします。このAPIは複数のクライアントに使用される場合が有ります。誰でも使えるわけではなく、認証されたクライアントのみに使用できます。この場合はどのように認証をするかを考えてみました。簡素な方法の一つとしては、IP制限になります。Spoofingに遭遇しましたら、一溜まりも有りません。クライアントのサーバーを同一のLANに制限することは非現実的なので、IP制限を避けたほうがいいと思います。一点は、IP制限はサーバー移行やIP変更の時に結構漏れやすいです。動的IPのクライアントさんには全く通用しません。有名な非対称キーは多分RSAでと思います。PKCS#1としてネットの一つの標準になっています。クライアントがサーバーの認証を求めたい場合は、サーバーの公開キーを使って、IDとパスワードを送信します。サーバーは秘密キーを使って暗号化のパスワードを解読して、IDとパスワードをチェックします。有効なIDとパスワードだと確認できた場合は、一時アクセスキーを発行します。その後の一定期間において、この一時アクセスキーを利用して、個々のコールの認証を行います。RSAで暗号化できる文字列の長さは限られますから、一時アクセスキーを発行せざるを得ません。このパタンに一つ致命的な問題が有ります。毎回送信される暗号文は同じです。この暗号文され取られれば、認証は撃破されます。一つ簡単な改善策はIDとパスワード以外に、今の時間を一緒に送ります。IDとパスワードと時間を一つの組として暗号化されます。すれば、時間の経過とともに、認証用の暗号文は失効します。再利用はできなくなります。安全性は多少上がります。これもやはり甘いです。ネットではデータ転送のスピードはある程度不可知です。発信の時刻と着信の時刻はどのくらいの差が有るか、明確ではありません。このため、時間により有効性チェックは全部有る程度の含みを残します。この含みは落とし穴になります。ハッキングはリアルタイムで進行しますから、暗号文を取られてから即時にハッキングに使用されます。なれば、時間のチェックを通過できるようになります。不当に認証される異になります。上記の考えで、この方式も却下されました。どんな認証方式であっても、サーバーとクライアントの間に共通の秘密を保持する必要が有ります。「非対称キー」の問題はその秘密を直接に送信している点に有ります。この問題は毎回変わらないから、不正のアクセスに利用されやすいです。このため、毎回送信の内容をランダムに変化させます。一回送信の内容は一回しか使用できません。ハッカーは一回の認証用暗号文を取得できたとしても、再利用はできず、元のパスワードを推測する事もほぼ不可能です。この方式にも問題点が有ります。一回のみ有効のものはサーバーとクライアントは共有していないため、クライアントがサーバーに請求して、もらってくる必要が有ります。一回多くAPIをコールする必要が有ります。具体に、一回目のコールにサーバーからランダムの問題文を発行します。二回目のコールでクライアントはパスワードを使って問題文を処理した結果を回答をサーバーに送信します。サーバーは回答を確認して、一時アクセスキーを発行します。一時アクセスキーはただ往復に送信されては、前の同様な問題が発生します。このため、コールに一定のシリアル番号又はその暗号を保持したほうがいいかもしれません。同一サーバーから複数の平行コールを許したい場合は、この方式はできなくなります。APIコールは一般にHTTPSを介するので、認証後の情報漏洩する場合は少ないかもしれません。最初の認証ステップはパスワードを特に厳重に守るものです。実際は一時アクセスキーも一回だけネットを介したほうがいいです。必要であれば、一時アクセスキーをクライアントの公開キーで暗号化して送信します。運用上、クライアントに非対称キーを発行させることはあまり考えられません。毎回一時アクセスキーを送ることを避けたいのであれば、一時アクセスキーを使って、APIのパラメータのメッセージダイジェストを算出して、このダイジェストを一緒に送信すればサーバーは個々のコールに検証できるようになります。エクセルで工程表を作成していませんか?エクセルで作成される工程表は幅広い分野で活躍しております。このページでご提供している簡単ガント図をお使いになれば、開始日と日数を指定するだけで休日を自動に飛ばしてくれます。休日を飛ばして、日程を埋め込みます。一回目は平坦にできますが、その後の日程変更大変になります。日の配分をやり直すことになります。