
TechNet コラムへようこそ。このコラムでは、よく寄せられるシステム管理スクリプトに関する質問に Scripting Guys がお答えします。システム管理スクリプトについて質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。
詳細情報
| • | |
| • | |
| • |
![]()
Scripting Guy さん、よろしくお願いします。Excel スプレッドシート内でテキストを並べ替える方法はありますか。
-- PD

PD さん、こんにちは。Excel スプレッドシート内のテキストの並べ替えについては、すぐにお話ししますが、その前に、皆さんの頭の中に浮かんでいる質問にお答えしましょう。このコラムを執筆している Scripting Guy はイタリアで休暇を満喫中だとすると、今日彼は何をするつもりなのか、という質問です。実はこの "皆さん" の中には、このコラムを執筆している Scripting Guy 自身も含まれるのです。彼自身も今日何をするかわかっていません (家族全員の意見を 1 つにまとめるのは、大変です)。
皆で朝から電車に乗ってポンペイの町に向かうのも悪くありません。ポンペイははるか昔、西暦 79 年 8 月に、ベスビオ火山の大噴火によって文字どおり地表から消えてなくなった都市です。皆さんもご存知のとおり、ポンペイの滅亡は、1556 年の中国 (明朝) の華県大地震、タイタニックの沈没 (1912)、Windows ME のリリース (1999) と並んで、世界の大惨事の 1 つとされています。
私たちの仲間であるマイクロソフト社員の皆さんへの注 : まあ皆さん、カリカリしないでください。ほんの冗談です。なんといっても、Windows ME は本当にすばらしいオペレーティング システムで、数多くの画期的な新機能をコンピュータの世界に提供しました。 たとえばどんな新機能があったかですって。ええと、たとえば・・・。すみません。もう行かなければなりません。電車に乗り遅れてしまうので。 |
何はともあれ、このコラムを執筆している Scripting Guy は今日何をするのかわかっていません。とりあえず、わかっているのは、彼を含めた家族が交わす今日の予定を決める議論を丸く収めることでしょうか。Scripting Guy 一家が今日やりたいことや今日やりたくないことを議論しているのに興味を持つ人がだれもいないという、めったにないチャンスに乗じて、Excel スプレッドシートの中のワークシートを検索し、(PD さんのご要望にお応えして) C:\Test\Image.jpg というファイル パスを C:\Backup\Image.jpg に置き換えるスクリプトを次に示します。Scripting Guy 一家の意見がまとまるまで、これで乗り切れるはずです。
待ってください。前言は取り消します。Scripting Guy 一家の意見がまとまらない確率はかなり高いと思います。それでも、とにかく Excel で検索と置換を行うスクリプトを次に示します。
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Set objWorkbook = objExcel.Workbooks.Open("C:\Scripts\Test.xls")
Set objWorksheet = objWorkbook.Worksheets(1)
Set objRange = objWorksheet.UsedRange
objRange.Replace "C:\Test\Image.jpg", "C:\Backup\Image.jpg"
このスクリプトのしくみが知りたい、ですって。奇遇ですね。私たちも同じです。1 行ずつ確認して、解読してみましょう。
ご覧のとおり、スクリプトの冒頭部分はとても単純です。Excel.Application オブジェクトのインスタンスを作成し、Visible プロパティを True に設定するだけです。言うまでもなく、これで画面上に表示される Microsoft Excel の実行インスタンスが作成されます。次に、Open メソッドを呼び出して C:\Scripts\Test.xls ファイルを開き、次のコード行を使用して、このファイルの最初のワークシートをバインドします。
Set objWorksheet = objWorkbook.Worksheets(1)
おお、本当に単純ですね。
驚いたことに、このスクリプトは残りの部分も同じくらい単純です。Excel で検索と置換の機能を実行する場合には、このタスクの実行対象となるワークシートの部分 (つまり、範囲) を指定する必要があります。今回はワークシート全体のテキストを置き換える必要があるので、範囲はワークシート全体です (つまり、ワークシート内のデータを含むセルはすべて対象となります)。正直なところ、かなり複雑な話になってきましたね。データが入力されているセルと入力されていないセルを特定する方法はあるのでしょうか。実は、その方法はわかりません。ただし幸運なことに、その方法を知る必要はありません。Excel の UsedRange プロパティを使って Range オブジェクトのインスタンスを作成すれば、そのインスタンスにはデータを含むセルがすべて含まれるからです。
Set objRange = objWorksheet.UsedRange
今日の行動予定を決めるのもこんなに簡単ならいいのですが。
範囲を定義したら Replace メソッドを呼び出して、このメソッドに 2 つのパラメータを渡します。1 つ目のパラメータは、検索するテキスト (C:\Test\Image.jpg) で、2 つ目のパラメータは置き換えるテキスト (C:\Backup\Image.jpg) です。これを行うのが次のコード行です。
objRange.Replace "C:\Test\Image.jpg", "C:\Backup\Image.jpg"
信じられないかもしれませんが、これで作業は完了です。
さて、これからもちろん今日の予定を考えます。皆さんが考えていることはわかっていますよ。「このコラムを執筆している Scripting Guy は、こんな問題が起こらないように注意深く休暇の予定を (しかも、予備の予定まで) 立てていたはずではないのか」と考えていますよね。当然そうしていました。ここで言っているのは、それでも問題が起こるのを未然に防ぐことはできなかったということです。こう言わせてください。休暇で家族旅行に出かけたことがあれば、入念にあれこれ予定を立てたところで、結局あまり意味はないことは、おわかりだと思います。
それでは、ci vediamo domani (「また明日」という挨拶のつもりです。このイタリア語が間違っていたとしても、また明日お目にかかりましょう)。