2013年04月01日

Excelでセルを隠すと線が消えることの対処

 Microsoft Excelでは行や列を削除したり、グループ化機能などにより非表示にすることもできますが、罫線に隣接するセルに対して非表示や削除を行うと、罫線が思うように表示されないことがあります。

 たとえば次の画像はB2〜C4のセルを水色の線で囲んでいて、3行目から5行目がグループ化されています。これでグループを折りたたむと、下の罫線が消えてしまいます。
ExcelLine0a.png


ExcelLine0b.png

 これは、バグではないと思いますが、Excelの罫線データの実装方法に起因するものです。Excelでは隣り合うセルの間の罫線は、それぞれのセルで1つずつ別の罫線データを持っていて、どちらか片方が表示されるのです。たとえば上の図のB4とB5の場合、上のセルであるB4の下側の罫線と、下のセルであるB5の上側の罫線は別データです。B4の下側には水色の罫線が設定されているのに、B5の上側には罫線が設定されていなません。そのため、B4を非表示にすると、B4とB5の間の罫線は表示されなくなります。もちろんC4とC5も同じです。

 ここまで分かればほとんど解決です。B5の上側に罫線を設定すればいいのです。ただ、そもそもB4の下側とB5の上側の罫線が別データになっているという状況は分かりにくいので、両方同時に設定する方法をご紹介します。B4〜C5を選択、右クリックし、[セルの書式設定]を選択します。[罫線]タブに次のように表示される箇所があるので、中央の横線を設定します。これで、上のセルの下側罫線と、下のセルの上側罫線が同時に設定されます。

ExcelLine1.png

 最初の結果と違い、グループを折りたたんでも罫線が表示されるようになりました。
ExcelLine2.png
web拍手 by FC2
タグ:EXCEL 罫線
posted by 北条利彦 at 20:23 | Comment(0) | TrackBack(0) | MS Office | このブログの読者になる | 更新情報をチェックする

2013年03月05日

ウェブページの先頭にメモを追加

 Firefoxで、ウインドー左上にあるオレンジ色のFirefoxメニュー→[Web 開発]→[スクラッチパッド]に次のJavaScriptを入力して実行(Ctrl+R)すると、現在表示しているページの最上部にテキストを追加することができます。このテキストは印刷することができるので、紙に出力する際のメモ用途に使用することができます。ただし、ページを移動したり再読み込みを行うと消えてしまいます。
var div=document.createElement('div');
div.innerHTML="memo1<br />memo2";
document.body.insertBefore(div,document.body.childNodes[0]);

AddMemo.png

 Internet Explorer(IE)の場合は次のアドレスをアドレスバーに入力して下さい。Firefoxと同様に動作します。ただし、新しいバージョンのIEのアドレスバーに貼り付けた場合は先頭のjavascript:が消えてしまうので、その場合はjavascript:を、コロンも含めて自分で入力して下さい。

javascript: var div=document.createElement('div'); div.innerHTML="memo1<br />memo2"; document.body.insertBefore(div,document.body.childNodes[0]); void(0);
web拍手 by FC2
posted by 北条利彦 at 21:42 | Comment(0) | TrackBack(0) | ウェブブラウザー | このブログの読者になる | 更新情報をチェックする

2012年12月21日

Amazon.co.jpのURLを自分で短縮してみる

 Amazon.co.jpの商品ページURLは次のように非常に長くなっている物があります。

http://www.amazon.co.jp/%E3%83%AC%E3%83%99%E3%83%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%96-%E3%83%AC%E3%82%A4%E3%83%88%E3%83%B3%E6%95%99%E6%8E%88VS%E9%80%86%E8%BB%A2%E8%A3%81%E5%88%A4/dp/B004GTLUIC/ref=sr_1_1?ie=UTF8&qid=1356091105&sr=8-1

 何らかの理由でこのURLをどこかのサイトに貼り付けたいとき、これだけ長いものをそのまま貼るのは抵抗があるかもしれません。URL短縮サービスを使うというのも一法ですが、ここでは別の方法をとります。

 このURLを見てまず目につくのは%E3…の部分でしょう。ここが非常に長くなっています。この%と英数字の列は、日本語や一部の記号がURLに含まれている場合にこうなります。あくまでamazon.co.jpの場合に限りますが、実はこの部分、あってもなくてもアクセスできるのです。つまり、次のURLでも同じページが表示されます。

http://www.amazon.co.jp/dp/B004GTLUIC/ref=sr_1_1?ie=UTF8&qid=1356091105&sr=8-1

 ところで、商品の種類は当然ながら複数、それも大量にあります。URLを入力すると特定の商品のページにたどり着けるということは、URLのどこかに、商品を特定するための部分が含まれているはずなのです。

 商品は数え切れないほどの種類があるのでしょうから、桁の少ない数値では商品を特定できません。それを考慮すると、商品の特定に使っているのは B004GTLUIC か qid=1356091105 だろうという推測できます。どちらで商品を特定しているか、別の商品のURLを見れば一目瞭然です。

http://www.amazon.co.jp/dp/B0015WJARQ/ref=sr_1_2?ie=UTF8&qid=1356091105&sr=8-2

 先ほどの商品と比較してqid=1356091105の部分が一致しています。別の商品なのにqidが一致するということは、qidは商品を特定するための情報ではないといえます。

 それでは、qidの部分を削除してアクセスしたらどうなるでしょうか。

http://www.amazon.co.jp/dp/B0015WJARQ/ref=sr_1_2?ie=UTF8&sr=8-2

 実は、これでも商品のページにたどり着けます。商品を特定するための情報はB0015WJARQですから、余計なところをさらに削ってみましょう。

http://www.amazon.co.jp/dp/B0015WJARQ/

 なんとこれだけでも商品が表示されます。根拠は省略しますが、元々のURLに含まれていたのは「商品ページにたどり着くために、どのページを通ってきたのか」を表しているものと思われます。

 ちなみに、dpの部分も削除すると正しくアクセスできません。
web拍手 by FC2
posted by 北条利彦 at 21:14 | Comment(0) | TrackBack(0) | ウェブ | このブログの読者になる | 更新情報をチェックする

2012年08月11日

Internet Explorerでセッションクッキーの値を調べる

 パーシステントクッキーはブラウザーを閉じても有効で、ディスクに保存されるのでクッキーファイルを見ればクッキーの名前や値を確認することができます。一方、セッションクッキーはディスクに保存されません。セッションクッキーを見る方法はいくつかあるので今回はそれを紹介します。

クッキー発行時にダイアログを表示する方法

 クッキーが発行されていない段階で設定しておき、発行されたときに自動的にダイアログを表示する方法です。

 設定は、インターネットエクスプローラの[ツール]メニューや、コントロールパネルにある[インターネットオプション]にあります。
InternetOption.png
 [プライバシー]タブの[詳細設定]ボタンをクリックすると次のダイアログが表示されます。まず[自動Cookie処理を上書きする]のチェックを入れ、「ファーストパーティのCookie」と「サードパーティのCookie」の両方について[ダイアログを表示する]のチェックを入れます。[常にセッションCookieを許可する]のチェックは最初から外れていると思いますが、そのまま外しておきます。
Privacy.png
 このあと、開いたダイアログをすべて[OK]で閉じます。すると、クッキーが発行されたときに次のダイアログが表示されます。
Alert.png
web拍手 by FC2
posted by 北条利彦 at 12:36 | Comment(0) | TrackBack(0) | ウェブブラウザー | このブログの読者になる | 更新情報をチェックする

2012年06月06日

実録 詐欺メール

 どう見ても怪しいメールが届いていましたので紹介します。
SpamMail.png
画像をクリックした先のページでもう1回クリックすると原寸サイズで表示します。

 ここまで怪しいメールにだまされる人は少ないかと思いますが、参考までにパッと思い付くところで怪しいと思われる理由を書いてみます。
  1. 電子メールは送信者が本物かどうか確かめにくいのに、金融機関が大切なお知らせを送ってくるとは考えにくい。
  2. 金融機関でなくとも、何の挨拶も説明もなくただURLだけを貼り付けたメールを、まともな企業が送ってくるはずがない。
  3. 本文に記載されているURLが三菱東京UFJ銀行のアドレスではない。
 この中で一番重要な観点は1です。手口が巧妙な迷惑メールであれば、2や3の点はごまかそうとしてきます。

 ウェブ検索して調べてみると、少し古い情報でしたが、三菱東京UFJ銀行のウェブサイトに注意喚起のページが掲載されていました。このページに書かれているメールは、私に送られてきたものよりは手の込んだ迷惑メールだったようです。

「差出人が分からないメールは不用意に開かない」ということはよく言われますが、差出人が名の知れた金融機関でもメールを信頼しない方が良いです。メールの差出人の欄は詐称できるためです。基本的に「メールは差出人が分からない」ものだと認識しておくのがいいと思います。

参考:
URL偽装の手口(ブログ内リンク)
http://pcnetbeginners.seesaa.net/article/66355635.html
web拍手 by FC2
タグ:スパム
posted by 北条利彦 at 23:52 | Comment(0) | TrackBack(0) | 電子メール | このブログの読者になる | 更新情報をチェックする

2012年03月31日

ロケーションバーに入力するJavaScript

 少し古いウェブブラウザーは、アドレス入力欄にJavaScriptを入力することで、そのJavaScriptを実行できました。しかし、パソコンにあまり詳しくない人がだまされてJavaScriptを実行してしまうことが多いらしく、新しいバージョンのブラウザーはこの機能が制限されています。
人気ブログランキング

 たとえばInternet Explorer 9ではアドレスバーにJavaScriptを貼り付けると「javascript:」の部分が消えてしまい、実行できなくなりました。Firefoxでもロケーションバーに入力したJavaScriptに対してはdocumentオブジェクトが使用できないなど大幅な制限がつけられています。

 これを回避するためにブックマークレットを使用するという方法があります。これはアドレスバーやロケーションバーではなく、ブックマークのアドレス入力欄にJavaScriptを入力し、そのブックマークを実行することでJavaScriptを動かすというものです。

 しかし、いちいちブックマークを作成するのは手間になります。最初から完成しているJavaScriptを貼り付けるだけなら良いでしょうが、ユーザースクリプトを作成する際は、ちょっとずつ書いて実行して、その時点までは想定通りに作られていることを確認しながら書いていくものです。そのたびにブックマークとしていちいち保存するのは面倒です。

 この解決策として、Internet Explorer 9の場合、「javascript:」の部分が消えてしまうだけなので自分で書けば良いです。Firefoxの場合、Firefoxメニュー(左上のオレンジ色のメニュー) → [Web開発] → [スクラッチパッド] ならばJavaScriptを自由に入力・実行できます。
web拍手 by FC2
posted by 北条利彦 at 17:48 | Comment(0) | TrackBack(1) | ウェブブラウザー | このブログの読者になる | 更新情報をチェックする

2012年03月20日

[C#] ListViewの項目を自動でソートする

 ListViewは、その項目であるListViewItemを自動的に並び替えるためのメンバーを持っています。ListViewItem.ListViewItemSorterプロパティがそれですが、このプロパティのクラスはSystem.Collections.IComparerです。したがって、IComparerを実装クラスを用意して、その実体をListViewItemSorterプロパティに代入すればよいことになります。
人気ブログランキング

 しかし、比較が必要な場面が出てくるたびに1つずつクラスを作っていたのでは面倒なので、比較用メソッドを格納するだけのクラスを作ってしまいます。

// 比較用メソッドを格納しておくクラス
class DelegateComparison : System.Collections.IComparer
{
  // 比較用メソッドの型を表すデリゲート
  public delegate int CompareFunc(object a,object b);

  // 比較用メソッドを格納するフィールド
  CompareFunc func;

  // DelegateComparisonの構築子
  public DelegateComparison(CompareFunc func)
  {
    // 指定されたメソッドを格納するだけ。
    this.func=func;
  }

  // IComparerのCompareメソッドを実装
  public int Compare(object a,object b)
  {
    // 比較用メソッドを呼び出すだけ
    return this.func(a,b);
  }
}

 このクラスのCompareメソッドを呼び出すと、あらかじめ構築子の引数として渡しておいたメソッドを実行します。デリゲートになじみのない方は、「func」はメソッドを代入しておく変数だと思ってください。どんなメソッドでも代入できるわけではなく、返却値の型と、全ての引数の型が一致していなければなりません。

 ここまで実装できれば、あとはDelegateComparisonクラスのオブジェクトを作り、ListViewItem.ListViewItemSorterプロパティに代入するだけです。下記のソースでは、indexフィールドとdescendingフィールドで、ソートに使用する列とソート順(昇順、逆順)を指定しています。

public partial class Form1 : Form
{
  // 実際に比較するメソッド
  int ItemCompare(object a,object b)
  {
    // 単純に型変換
    ListViewItem itemA=(ListViewItem)a;
    ListViewItem itemB=(ListViewItem)b;
    
    // 比較したい列を取得
    string textA=itemA.SubItems[column].Text;
    string textB=itemB.SubItems[column].Text;

    // 比較
    int result=textA.CompareTo(textB);
    
    // 逆順ソートなら-1倍して返す。
    if(descending) return -result;
    else return result;
  }

  // ソートに使用する列
  int column;

  // trueなら逆順ソート
  bool descending;

  // フォームデザイナが生成した構築子
  public Form1()
  {
    InitializeComponent();

    this.column=1;
    this.descending=true;

    // 比較用メソッドを登録する。
    listView.ListViewItemSorter
      =new DelegateComparison(this.ItemCompare);
  }

}

// 比較用メソッドを格納しておくクラス
class DelegateComparison : System.Collections.IComparer
{
  // 比較用メソッドの型を表すデリゲート
  public delegate int CompareFunc(object a,object b);

  // 比較用メソッドを格納するフィールド
  CompareFunc func;

  // DelegateComparisonの構築子
  public DelegateComparison(CompareFunc func)
  {
    // 指定されたメソッドを格納するだけ。
    this.func=func;
  }

  // IComparerのCompareメソッドを実装
  public int Compare(object a,object b)
  {
    // 比較用メソッドを呼び出すだけ
    return this.func(a,b);
  }
}

 実行結果の例です。Column2が逆順にソートされています。
SortResult.png
web拍手 by FC2
posted by 北条利彦 at 16:49 | Comment(0) | TrackBack(0) | C# | このブログの読者になる | 更新情報をチェックする

2012年01月30日

[C#] foreachで列挙可能な返却値をもつメソッドを作る

 C#のforeach文で列挙できるオブジェクトは、次の3通りがあります。
  • 配列
  • IEnumerable型
  • IEnumerable<T>ジェネリック型
人気ブログランキング

 このため、メソッドの返却値(戻り値)の型をIEnumerable型やIEnumerable<T>型にすれば、その返却値を列挙することができます。また、自作したクラスのオブジェクトをforeachで列挙させたい場合は、そのクラスがIEnumerableまたはIEnumerable<T>インターフェースを実装すれば良いことになります。

 サンプルとして、1+3+5+7+9を計算するプログラムを掲載します。GetOddNumbersは、引数maxを超えない正の奇数を列挙するメソッドです。

using System;
using System.Collections.Generic;

class EnumSample
{
  static IEnumerable<int> GetOddNumbers(int max)
  {
    for(int k=1;k<=max;k+=2)
      yield return k;
  }

  static void Main(string[] args)
  {
    int sum=0;
    foreach(int n in GetOddNumbers(9))
      sum+=n;
    Console.WriteLine(sum);
  }
}


 実行すると、1+3+5+7+9の計算結果である「25」が表示されます。

web拍手 by FC2
タグ:IEnumerable C#
posted by 北条利彦 at 23:23 | Comment(0) | TrackBack(0) | C# | このブログの読者になる | 更新情報をチェックする

2012年01月13日

コンソールに三角形を2つ表示する

 大学などのプログラミング課題で、文字を使った図形を表示させる問題はよく出題されます。今回の内容もそのひとつで、アスタリスク(*)を使って三角形を2つ表示させます。完成すると、次の図形を出力します。
PS U:\Projects\Cpp\Cui> .\Test.exe
*
**
***
****
*****
*
**
***
****
*****
PS U:\Projects\Cpp\Cui>
人気ブログランキング

 このような図形表示の問題では「各行に何文字出力するか」を考えると問題が複雑になることが多くあります。出力する文字数自体はどの行も固定で、何も図形を表示したくない場所には半角空白を出力する方が簡単です。この場合、「それぞれの場所に出力すべき文字は空白か*か」を考えれば済むことになります。

 今回の課題では出力する行数は10行、桁数は5文字です。

 *と空白のどちらを出力するか判定するところは複雑なので、とりあえず三角形1個分だけを考えてプログラムを書いておき、一度動かしてから調整します。図形が複雑な場合、とりあえず同じような形の図形を出力するプログラムを作っておき、少しずつ修正していくことも大事です。

 それぞれ、y行x桁(y=0〜4, x=0〜4)に*と空白のどちらを出力するべきか考えるわけですが、下のように表にしてみました。*を出力する条件は、いずれもx<=yであることが分かります。
y*の出力条件
0行目(y=0)x<=0のとき
1行目(y=1)x<=1のとき
2行目(y=2)x<=2のとき
3行目(y=3)x<=3のとき
4行目(y=4)x<=4のとき

 まとめると次のようになります。
  • 10行出力する。
  • 各行に5文字ずつ出力する。
  • 出力する文字は、x<=yであれば*、それ以外は空白。

 ここまでの段階で、次のプログラムができます。
#include <stdio.h>

int main(void)
{
  int x,y;
  for(y=0; y<10; y++)
  {
    for(x=0; x<5; x++)
    {
      if(x<=y) printf("*");
      else printf(" ");
    }
    printf("\n");
  }
  return 0;
}

 これを実行した結果は次の通りです。
PS U:\Projects\Cpp\Cui> .\Test.exe
*
**
***
****
*****
*****
*****
*****
*****
*****
PS U:\Projects\Cpp\Cui>

 一見すると正しく出力されていないように見えますが、最初の三角形(先頭5行分)は問題なく出力されています。*を出力する条件はx<=yなので、この条件式のみで考えれば10×10サイズの大きな三角形になりますが、各行5文字しか出力しないので右半分が切り取られたような形になっています。

 さて、先ほどの表と同様にy=5〜9における*の出力条件を見てみます。
y*の出力条件
5行目(y=5)x<=0のとき
6行目(y=6)x<=1のとき
7行目(y=7)x<=2のとき
8行目(y=8)x<=3のとき
9行目(y=9)x<=4のとき

 これを見ると、y>=5ではx<=y-5のときに*を出力すれば良いことが分かります。ただし、ここでいきなり次のように書くのはあまり賢いやり方ではありません。
if(y<5 && x<=y || y>=5 && x<=y-5) printf("*");
else printf(" ");

 このように書くと、「次は三角形を3個表示しよう」とか「10個表示しよう」などとプログラムを拡張したくなったときに融通が利きません。それどころか、だんだん条件文が長くなってしまいます。

 ここは、もう少し考えて法則を見つけるのが賢明です。三角形3個目は次のような条件で出力します。
y*の出力条件
10行目(y=10)x<=0のとき
11行目(y=11)x<=1のとき
12行目(y=12)x<=2のとき
13行目(y=13)x<=3のとき
14行目(y=14)x<=4のとき

 表の右側の列を見てほしいのですが、1個目の三角形も、2個目の三角形も、3個目の三角形も、右側の列が変わっていません。この時点で気付いてほしいのですが、yが5の倍数のときはx<=0が*の出力条件になっています。同様に、yが5の倍数+1のときはx<=1、yが5の倍数+2のときはx<=2……です。
 要するに、

x<=(yを5で割った余り)

が*の出力条件なのです。余りを計算するのは%演算子ですから、*を出力する条件は

x<=y%5

です。これに従ってプログラムを書き換えてみましょう。さきほどのプログラムに「%5」の2文字を追加しただけです。

#include <stdio.h>

int main(void)
{
  int x,y;
  for(y=0; y<10; y++)
  {
    for(x=0; x<5; x++)
    {
      if(x<=y%5) printf("*");
      else printf(" ");
    }
    printf("\n");
  }
  return 0;
}


 実行結果は次の通りになります。
PS U:\Projects\Cpp\Cui> .\Test.exe
*
**
***
****
*****
*
**
***
****
*****
PS U:\Projects\Cpp\Cui>

 最初に作ろうとしていた図形が出力されました。

 今回のように、図形の問題で、しかも何かしらの繰り返しのパターンがある場合は % を使って割り算の余りを求めると、うまく解決できる場合が多いので覚えておくと良いかもしれません。
web拍手 by FC2
posted by 北条利彦 at 12:23 | Comment(0) | TrackBack(0) | C言語 | このブログの読者になる | 更新情報をチェックする

2011年10月22日

WindowsのUIはだんだん使いやすくなっている

 Windowsは新しいバージョンが変わるとUI(ユーザーインターフェース)ががらりと変わることが多いです。Windows 200や9xからXPに移行したとき、あるいは、XPからVistaに移行したときなどです。UI全体が変わらなくとも、たとえばスタートメニューが新しくなったとか、タスクバーが新しくなったとかいう変化があります。
人気ブログランキング
 そのたびに、新しいバージョンのWindowsより現行のバージョンの方が良いと主張する人が出てきます。たとえば、XPが出たばかりの頃は9xの方がいいじゃないかという意見が多数でてくるわけです。しかし、不思議なことに、そのような人たちもVistaが出てくると「XPの方が良いUIだ」と言いだすのです。

 どうしてこういう意見が多く出てくるのかというと、新しいものを毛嫌いする人が多いためです。UIが変化すると、それに慣れなければなりません。しかし、実際に慣れてくると確かに前のUIよりも使いやすいのです。だから、XPが出たばかりの頃は「Windows 9xが良かった」と言っていた人も、Vistaが出てくると「XPの方が良かった」という意見に変わっているのです。

 Windows 8では、スタートメニューにメトロUIが採用されると言われています(現行UIも使えるようですが)。そして、メトロは、タッチパネル用のUIではなく、タッチパネルでもマウス操作でも使いやすいものだとマイクロソフトは主張しているようです。デスクトップ用OSにメトロを採用するのは評判が悪いようですが、実際に使ってみると案外使いやすいのかも知れません。
web拍手 by FC2
タグ:metro
posted by 北条利彦 at 11:41 | Comment(0) | TrackBack(0) | Windows | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。