cumaNo.08966
cuma さん 01/06/10 06:51
 
鶴亀でお世話になっています。
今回は秀丸メインの話題なのでこちらに質問させて下さい。

エクセルファイルで毎月住所データが送信されてくるのですが
毎月微妙に差分があって比較するのが大変です。

秀丸のマクロか比較機能でうまく処理できないでしょうか?

内容はこんな感じです


連番 氏名 住所 担当者

こんなエクセルファイルです。

毎月の差分は新たな人が追加されていたり削除されていたりします。

またひどい時は、追加と削除が同時に発生しています。
こうなると最後の行番号だけを見て、ああ先月と同じかな?なんて
かってに思うと大変です。

それからもっとひどいのは、目で比較していると、住所録の順番が
毎月微妙に変わるので単純に左右比較できないです。

並ぶ順番はおおよそ50音なのですが、微妙に上下してくるときは
法則が見えません。
たぶん作成する人が何らかのカット&ペーストしている内に元位置と
ずれただけだと想像します。
このように多少上下に行がずれるケースも毎月のようにあります。

そこで秀丸で先月のエクセルと今月のエクセルのCVSファイルなどで
新旧ファイルで比較したいのです。

・行位置のずれは、変更なしと出て欲しいような気がします。
・誰かの行位置がずれた影響で、その下の多くの人の行位置も
 ずれたとしても、それは変更無しとしたいです。
・追加や削除、行位置のずれなど沢山の編集がある場合は、
 比較結果を一覧ファイルとして、「追加」「削除」などと
 あるいは「行位置のずれだけ」などと状態も記入して出力
 出来ると助かります。

私はマクロ不慣れですが、難しいマクロになるでしょうか?

[ ]
RE:08966 cumaNo.08968
TAKA さん 01/06/10 13:20
 
TAKA です。

>秀丸のマクロか比較機能でうまく処理できないでしょうか?

秀丸では、「ウィンドウ→他の秀丸と内容比較」があります。

秀丸では単純な比較ですので、DOSプロンプト上で「FC」というコ
マンドを使用すると良いと思います。
使い方は「FC /?」でヘルプを見れます。

希望とまった一緒ではありませんが、一度使ってみて下さい。
多分満足できると思います。
比較内容をファイルに出力するときには、リダイレクト機能を使う
と出来ます。
FC c:\比較元1 c:\比較元2 > c:\差分
とすることで、「c:\差分」というファイルに出力出来ます。

FCのオプションには以下のものがあります。

>  /A     不一致部分の最初の行と最後の行だけを表示します.
>  /B     バイナリレベルで比較します.
>  /C     大文字/小文字の区別をしないで比較します.
>  /L     ASCII テキストファイルとして比較します.
>  /LBn   連続した不一致行の最大行数を指定します.        
>  /N     ASCII テキストファイルを比較する場合, 行番号をつけて不一致行を
>         表示します.
>  /T     タブをスペースに展開しないで比較します.
>  /W     連続した空白 (タブとスペース) を 1 つのスペースに圧縮して比較します.
>  /nnnn  不一致後に, 一致すべき連続行数を指定します.


マクロでやるなら、「FC」を直接呼び出すくらいになると思います。

[ ]
RE:08968 cumaNo.08969
cuma さん 01/06/10 13:50
 
TAKAさん こんにちは
早速の回答ありがとうございます。

>秀丸では単純な比較ですので、DOSプロンプト上で「FC」というコ
>マンドを使用すると良いと思います。

今見てみました。これってDOSの標準機能なのでしょうか。
今まで使った事ありませんでした。

>比較内容をファイルに出力するときには、リダイレクト機能を使う
>と出来ます。
>FC c:\比較元1 c:\比較元2 > c:\差分
>とすることで、「c:\差分」というファイルに出力出来ます。

了解しました。
ありがとうございます。



[ ]
RE:08969 cumaNo.08970
TAKA さん 01/06/10 14:08
 
TAKA です。

>>秀丸では単純な比較ですので、DOSプロンプト上で「FC」というコ
>>マンドを使用すると良いと思います。
>
>今見てみました。これってDOSの標準機能なのでしょうか。
>今まで使った事ありませんでした。

はい、標準機能です。
最近は、Windowsというありがたい時代になったので、過去の遺物
となりつつあるDosは忘れられつつあるようですね。
私も、最近Dosを使ったことがありません。


>>比較内容をファイルに出力するときには、リダイレクト機能を使う
>>と出来ます。
>>FC c:\比較元1 c:\比較元2 > c:\差分
>>とすることで、「c:\差分」というファイルに出力出来ます。
>
>了解しました。

あっ、待ってください。おそらく頻繁に使うと思うので、毎回入力
って厳しいですよね。
比較したい2つのファイルを秀丸で開き(アイコン化してはだめ)、
以下のマクロを実行することで、差分を、新規のファイルに出力し
ます。
最初の行の「$Opt」の設定は好みに合わせても良いと思います。
少しでも、楽になるのではないでしょうか?

// ファイル比較マクロ(ここから)
    $Opt = "/L /N";         // オプション指定
    if( hidemarucount != 2 )
    {
        message "比較元と比較先の2つだけを開いた状態にして下さい";
        goto LEND;
    }
    $FNm1 = filename2;      // 比較元1のファイル名
    if( $FNm1 == "" )
    {
        message "ファイル名取得不可";
        goto LEND;
    }
    if( updated )
    {
        message "ファイルを保存して下さい。";
        goto LEND;
    }
    setactivehidemaru 1;    // 比較元2のファイルをアクティブ
    $FNm2 = filename2;      // 比較元2のファイル名
    if( $FNm2 == "" )
    {
        message "ファイル名取得不可";
        goto LEND;
    }
    if( updated )
    {
        message "ファイルを保存して下さい。";
        goto LEND;
    }
    $Str = "fc " + $Opt + " \"" + $FNm1 + "\" \"" + $FNm2 + "\" > con";
    run $Str;               // 比較
LEND:
    endmacro;
// ファイル比較マクロ(ここまで)

[ ]
RE:08970 cumaNo.08972
cuma さん 01/06/10 17:44
 
TAKAさんありがとうございます。

>あっ、待ってください。おそらく頻繁に使うと思うので、毎回入力
>って厳しいですよね。

確かに面倒だと思います。
実用になるマクロ回答まで頂きましてありがとうございました。
やはり秀丸初心者としてはマクロを勉強して作るのは荷が重く
回答例を見ながら雰囲気に慣れてゆけるのが一番助かります。

どうもありがとうございました。



[ ]
RE:08970 cumaNo.08974
ひろ さん 01/06/10 23:51
 
 TAKA さん今日は、ひろです。
> 比較したい2つのファイルを秀丸で開き(アイコン化してはだめ)、
> 以下のマクロを実行することで、差分を、新規のファイルに出力し
にて秀丸で使いやすくするには、実行ファイルの「プロパティ」で「プログ
ラムの終了時にウィンドを閉じる」をチェックする必要はありませんか?

 更に折角ですから「hidesoft.2:08968」の内容と合わせて、FAQ に加えて
は如何でしょうか? 「比較」「差分」で検索しても見つかりませんでしたが、
既に含まれていたらご容赦下さい。

 P.S そういえば、sort 等との連携も書いていませんね。合わせて書こう
かなあ〜。

[ ]
RE:08974 cumaNo.08976
TAKA さん 01/06/11 00:16
 
TAKA です。

>> 比較したい2つのファイルを秀丸で開き(アイコン化してはだめ)、
>> 以下のマクロを実行することで、差分を、新規のファイルに出力し
>にて秀丸で使いやすくするには、実行ファイルの「プロパティ」で「プログ
>ラムの終了時にウィンドを閉じる」をチェックする必要はありませんか?

すみません。ちょっと意味が分かりませんでした。
ここで言う実行ファイルとは何になるのでしょうか?

差分は、新規の秀丸(ファイルという表現は間違っていましたね)
に出力して、そのままですが。


> 更に折角ですから「hidesoft.2:08968」の内容と合わせて、FAQ に加えて
>は如何でしょうか? 「比較」「差分」で検索しても見つかりませんでしたが、
>既に含まれていたらご容赦下さい。
>
> P.S そういえば、sort 等との連携も書いていませんね。合わせて書こう
>かなあ〜。

「Q&A集」には、まだ無かったような気がしますね。
リダイレクトの応用という項目を用意して、「sort」と今回の
「FC」などがあるとよさそうに思います。
通常のQ&Aからは、リンクを張っておくと、よさそうです。

「Q&A集」の方は、ひろさんにお願いしてよいでしょうか?

[ ]
RE:08966 cumaNo.08977
きいろいまふらあ さん 01/06/11 00:56
 
>私はマクロ不慣れですが、難しいマクロになるでしょうか?

Excel(のマクロ)で処理した方が簡単だと思いますが。
さすがにここにVBAのコード書くのは気が引けますが。(^^;

[ ]
RE:08976 cumaNo.08982
ひろ さん 01/06/11 12:57
 
 TAKA さん今日は、ひろです。
> >にて秀丸で使いやすくするには、実行ファイルの「プロパティ」で「プログ
> >ラムの終了時にウィンドを閉じる」をチェックする必要はありませんか?
>
> すみません。ちょっと意味が分かりませんでした。
> ここで言う実行ファイルとは何になるのでしょうか?
 fc.exe です。

> 「Q&A集」の方は、ひろさんにお願いしてよいでしょうか?
 暇を探して書きます。

[ ]
RE:08982 cumaNo.08988
TAKA さん 01/06/11 18:49
 
TAKA です。

>> >にて秀丸で使いやすくするには、実行ファイルの「プロパティ」で「プログ
>> >ラムの終了時にウィンドを閉じる」をチェックする必要はありませんか?
>>
>> すみません。ちょっと意味が分かりませんでした。
>> ここで言う実行ファイルとは何になるのでしょうか?
> fc.exe です。

「fc.exe」のプロパティですか。うーん、どうなんでしょう。
私の所では、何もしなくても、ウィンドウが残ったりすることはな
いのですが。(Windows ME)
Windows 2000では、チェックする項目がないようでした。

もし、環境によってはウィンドウが残ったりするなら、チェックし
た方がよいかもしれませんね。


>> 「Q&A集」の方は、ひろさんにお願いしてよいでしょうか?
> 暇を探して書きます。

お手数をおかけします。

[ ]
RE:08988 CUI アプリケーションの利用No.08989
ひろ さん 01/06/11 19:36
 
 TAKA さん今日は、ひろです。
> 「fc.exe」のプロパティですか。うーん、どうなんでしょう。
> 私の所では、何もしなくても、ウィンドウが残ったりすることはな
> いのですが。(Windows ME)
> Windows 2000では、チェックする項目がないようでした。
 私の環境は、Windows98 ですが、OS によって違うようですね。

> >> 「Q&A集」の方は、ひろさんにお願いしてよいでしょうか?
> > 暇を探して書きます。
>
> お手数をおかけします。
 杉浦さんのように、WEB サイトを立ち上げていないので、どういった形で
草稿を公開しようか迷っていますが、上記のことも含めて何らかの形で Q&A
製作参加者に見てもらえるようにします。

[ ]