Skip to main content
Known Participant
April 21, 2025
Question

人名検索のつくり方

  • April 21, 2025
  • 5 replies
  • 1373 views

詳しい方に教えていただきたいです。

8,000人規模の名簿を作ろうとしています。

名簿は200ページで、前半が課名と役職、名前の並んだ名簿です。

後半60ページは人名検索になります。

お聞きしたいのは人名検索ページのつくり方です。

インデザインで各個人名が前半の名簿の何ページに載っているかを抽出することはできますか。

提供される元データはExcelなのでエクセルで作り込んでからインデザインに持っていく方がいいのかもと考えましたが、エクセルからインデザインに持っていったときにページ数がずれることもあるかもしれないので迷っています。

インデザインで抽出できる方法がありましたらご教示いただけますとありがたいです。

パソコンはwin10,インデザインはCs6(古いですが会社のものですのでどうにもなりません)

5名だけの印刷会社でほかに聞ける人もいません。

よろしくお願いいたします。

 

 

    5 replies

    Known Participant
    April 24, 2025

    みなさま、いろいろ親身になって知恵をくださりありがとうございました。

    こころから感謝しています。

    今回のアドバイスを試した結果です。

    まずajabon grinsmithさんが作ってくださったスクリプトで私にも作ることができました。ただ、そこからインデザインでは、あいうえお順にすることができませんでした。

    次にmonokanoさんに教えていただいた目次機能でも作ることができましたが、やはりあいうえお順の壁に当たりました。

    そしてUske_Sさんの索引機能のも試してみて、こちらならあいうえお順もなんとかなりそうでしたが作業が大変で断念しました。

     

    色々考えた結果以下のやり方でやってみようと思いました。

    名簿の1ページ当たりの人数を140人に決める

    提供されたエクセルを140人ごとに区切ってその横にページを入れていく

    1 山田太郎 

    1 小田花子

    1 山本次郎

    2 田中陽子 

    2 鈴木三郎

    2 佐藤一子 

    この状態であいうえお順に並べ直して、インデザインに流し込む 

    異体字は未知ですが校正で赤を入れてくださるそうなので、ひとつずつ字形パネルで修正していこうと思います。

     

    インデザインで人名検索を作るのは、私には難しいことがわかりました。

    並べ替えに気を取られあいうえお順にまで脳が追い付かずご迷惑をおかけしました。

    この方法で本当に大丈夫なのか、まだ不安ではありますが頑張ります。

     

    プロの方々に今後も生かせるアドバイスをたくさんいただきまして勉強になりました。

    お忙しい中、親身になって私に時間を使ってくださり、本当にありがとうございました。

    ajabon grinsmith
    Community Expert
    Community Expert
    April 24, 2025

    結果(経過?)のご報告ありがとうございます。

     

    ご勤務先には認識を改めてもらえるといいですね。

    ・外注の再検討(ただの頭数ではなく経験とスキルに対価を見出せること)

    ・Creative Cloud契約の検討(当フォーラムにもCS6が起動できなくなった方からの報告は続々ときています)

     

    (あと、Omachiさんにも何かあればぜひ伝えてください!)

    Uske_S
    Community Expert
    Community Expert
    April 22, 2025

    スクリプトは確かに費用対効果が高いですが、外注できない=何かしら自力でどうにかしないといけない、ということであれば、索引機能も検討してみてください。

     

    公式ヘルプ:https://helpx.adobe.com/jp/indesign/using/creating-index.html

    公式ヘルプは文字ばっかりなので、こちらとかも:https://design44.dtp.to/dtp/6602/

     

    手作業で索引を入力するのが手間かもしれませんが、ノンブルを確認しながら手入力よりは確実で早いはずです。

    Uske_S
    bizarre_n
    Community Expert
    Community Expert
    April 22, 2025

    Usuke_Sさん、まだ実際に手を動かしていないので予測の範囲内のトラブルなのですが、同姓同名の人はどうやって判別するといいでしょうか?役職こみで抽出するとかかなあ
    名簿の人名記載の詳細がわからないので何ともではあるのですが

    ajabon grinsmith
    Community Expert
    Community Expert
    April 21, 2025

    monokanoさんのいう目次機能もちらっと思ったんですが、

    勇み足でスクリプト書いてみました。

    条件が合わなければゴミなんですが…

    ・索引ページには人名だけを入れておく

    ・索引部分の先頭のテキストフレームを選択して実行

    すると、索引ページ内の人名でつぎつぎ検索して、索引開始ページより前にいるものだけページ名を拾って、索引ページ内の人名の後ろにタブ文字といっしょに入ります。

    // 索引部分の先頭テキストフレームを選択して実行する
    
    // 検索設定の元
    var findGrepPrefOrg = app.findGrepPreferences.properties;
    
    // 検索設定を初期化
    app.findGrepPreferences = NothingEnum.NOTHING;
    
    var doc = app.activeDocument;
    // 索引部分の先頭テキストフレーム
    var names = doc.selection[0].parentStory;
    // 索引開始ページのインデックス
    var indexPageTop = doc.selection[0].parentPage.documentOffset;
    
    // 人名の配列
    var namesAry = names.contents.split(/\r+/);
    
    // 検索して最後以外のページ番号拾って、最後の検索結果にくっつける
    for(var i = 0; i < namesAry.length; i++){
        // 人名で検索
        app.findGrepPreferences.findWhat = namesAry[i];
        var findAry = doc.findGrep();
        // 検索結果が(検索元を含め)2こ以上あるか
        if(findAry.length > 1){
            var pageNums = [], pagesString = "";
            for(var j = 0; j < findAry.length - 1; j++){
                // 見つかったページが索引開始ページより前ならページ名を拾う
                if(findAry[j].parentTextFrames[0].parentPage.documentOffset < indexPageTop){
                    var page = findAry[j].parentTextFrames[0].parentPage;
                    pageNums.push(page.appliedSection.sectionPrefix + page.name);
                }
            }
            if(pageNums.length){
                // ページ名配列をくっつける
                pagesString = pageNums.join(", ");
                // 末尾の検索結果の後ろにタブ文字とページ名群をくっつける
                findAry[findAry.length - 1].insertionPoints[-1].contents = "\t" + pagesString;
            }
        }
    }
    
    // 検索設定モドス
    app.findGrepPreferences.properties = findGrepPrefOrg; 
    
    // ファンファーレ
    alert("おわった");

     

    実行前(雑すぎるテストですまんって思ってます)

     

    実行後

    望むものとちがった場合、差分を書いてもらえれば誰かが続いてくれるかも。

    Omachi
    Legend
    April 21, 2025

    外からごちゃごちゃいうのも何ですが。

    「8000人規模」なのに同姓同名がいないっていう前提のスクリプトはどうかと思います。本当に同姓同名がいなければ使えるかもしれませんが。

     

    私も手伝ってあげたい気持ちはありますが、さくっと書けるほど生易しくはないよ、使用する文字の件も含めて原稿を見ないとなんとも言えない、ということで私の場合は有償です。

    ajabon grinsmith
    Community Expert
    Community Expert
    April 21, 2025

    そのへんは承知です。こちらもスクリプトだけでメシ食ってるわけではないですが稼ぎの2〜3割はスクリプトでまかなってますし。

    自分が怪我しないていどに書いたと思ってもらえればいいです。使うのは自己責任で。

    「する偽善」というわけでもないですが、これより行き届いたものは無償じゃ難しいですよ、の指標としてもいーじゃないですか?

    迷惑ですかね?

    monokano
    Community Expert
    Community Expert
    April 21, 2025

    > 各個人名が前半の名簿の何ページに載っているかを抽出

     

    メニュー「レイアウト > 目次...」は試してみましたか?

    特定の段落スタイルを指定して、「その段落スタイルが適用されている文字」と「ノンブル」を抽出する機能です。もしかするとこれでこと足りるかもしれません。

    Known Participant
    April 22, 2025

    monokano様

    回答ありがとうございます。

    回答いただいて初めて知りました。

    段落スタイルを適用すればできるのなら大変助かります。

    無知でお恥ずかしいですが、目次機能を少し調べて検証してみます。

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

     

     

    monokano
    Community Expert
    Community Expert
    April 22, 2025

    「人名漢字」は相当慎重に扱わないとすぐにクレームになる厄介案件です。

    緑271369948tdc さんの投稿を見て、InDesignにちょっと詳しい人たちは、みんなハラハラしています。めちゃくちゃ心配しています。

    「人名漢字」で発生するトラブルを防ぐために、有償でも外注した方が良いと私も思っています。

    Omachi
    Legend
    April 21, 2025

    Excel中のテキストから索引項目を作ることは可能です。昔作ったスクリプトで更新していないですが、最新環境でも動作すると思います。

    外部テキストから索引を作成する

     

    また、スクリプトを使用して「特定の書式のテキストを検索し、見つかったテキストのページ番号を取得する」ことも可能です。

     

    私が名簿を作成する際は、データベース上で「個人名ID」項目(正の整数値)を作成し、それを名簿本文に埋め込んでおく方法を取ります。これは、Excel上では別々に扱えないがInDesign上では別々に扱わないといけない文字(「辻」の1点しんにょうと2点しんにょうの違い、「葛󠄀」の下部分が「ヒ」になっているものと「人+└」のもの)や、InDesignでしか扱えないUnicodeにない文字(「榊」の示がネになっている字形など)があるため、人名で検索することが難しいことによります。

    「個人名ID」を本文中に埋め込む手段は、本文レイアウトにより最適なものが異なりますので一概には言えません。塗りが透明の極小文字を入れたり、条件テキストを使用して非表示にしたりする方法があります。

     

    以上のことを勘案しますと、単に今回の質問の答えを聞いただけでそれを実現できるか、というと甚だ疑問です。素直に外注するか、あるいは私のような専門家にそれなりの対価を払って指導を仰ぐ方が賢明だと思います。

     

    追記

    CS6でしたね。CS6で作業できる外注先はめったにないので、外注したらPDF受けにせざるを得ないと思います。

     

    訂正

    大人数の名簿の場合、同姓同名の方がいる可能性があるため、索引機能は基本的に使いません。使う場合は、その後手作業で同姓同名の部分を編集する必要があることを承知しておいてください。

    Known Participant
    April 21, 2025

    Omachi様

    早急なお返事ありがとうございます。

    かなり難しそうですね。

    外注したいです……でも会社がノーです。

    依頼先に聞いたところ昨年度請け負っていた会社は(先月倒産)エクセルで作業していたとのことでしたので

    Excelをもう少し探ってみようと思います。

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

    ajabon grinsmith
    Community Expert
    Community Expert
    April 21, 2025

    外注不可とのことで…

     

    体裁がわかりませんが、ページズレの心配がある場合は

    Excel→InDesign→PDF(などページ区切りのある形式)書き出し→Excelブックに変換

    などがよいかもしれないですね。

     

    InDesignで完結するならスクリプト書き起こしで(余裕をみて)3〜4時間かなあ。