• ベストアンサー

Excelでの置換

Excelで家計簿を作ってますが、来年度の出費予定を本年の内容を参考に作ってます。つまり、本年のワークシートをコピーして最低限の削除・挿入で作ってます。問題は、その際日付の「平成12年x月x日」→「平成13年x月x日」を一括して変換できないかと思って「検索・置換」でTryしてみましたが、一部上手く置換してくれましたが、ほとんどは置換してくれませんでした。原因として、思 い当たるのは、日付部分を所々コピー&ペーストを使用している事かと思います。 とりあえず、該当するワークシート1枚分の置換が出来ればよいのですが・・・? ご教示の程宜しくお願いします。

noname#211914
noname#211914

質問者が選んだベストアンサー

  • ベストアンサー
  • 10n
  • ベストアンサー率100% (2/2)
回答No.3

私も原因は「全角・半角」か「表示形式」のどちらかだと思います。 nanalyさんの解決策を施してもまだ変換されずにいるセルがありましたら、そのセルをひとつ選択してみてください。仮にそのセルが「平成12年5月5日」と表示していたとして、もし画面上部の数式バーに「2001.5.5」という値が表示されている場合は、そのセルに入力されている値は文字列ではなく数値です。数値を入力されているセルが、表示形式によって「平成12年5月5日」と表示しているということです。 Excelの検索はあくまでも入力されている値に対して行われるものですから「平成12年」という文字列が入力されていないセルを置換することはできません。 ではどうすれば「平成12年5月5日」は「平成13年5月5日」になるのでしょか。 つまり「平成12年5月5日」に相当する数値をどうすれば「平成13年5月5日」相当の数値に変換できるかということです。 365を足せばOKです。 <1>「平成12年5月5日」と入力されているセルを任意のセルにコピーしてください。(コピー元を仮にB4、コピー先をC4とします) <2>C4に「=B4+365」という数式を入力してください。 以上の作業によりC4には「平成13年5月5日」と表示されるはずです。 MiJunさんは家計簿を加工されているとのことですが、きっと「日付」という一つの列に上から下まで並んでいる日付を一括変換したいということだと思います。先ほどの作業を応用する場合は <1>日付が入力されている列をコピーしてください。(この列を仮にB列とします) <2>C列を選択し「コピーしたセルの挿入」を行ってください。 <3>C1に「=B1+365」という数式を入力してください。 <4>C1をコピーしてください。 <5>C列を選択し「貼り付け」てください。 以上の作業によりB列に表示されている日付の一年後の日付がC列に表示されているはずです。 しかしこのままの状態でB列を削除するとC列全体が「#REF!」となってしまいます。したがって <6>C列をコピーしてください。 <7>そのままC列に「形式を選択して貼り付け→値」を行ってください。 以上の作業により、お求めの結果は得られるはずかと思いますがいかがでしょうか。

noname#211914
質問者

補足

大変丁寧な説明ありがとうございます。 ほぼ解決しました。 ただ、行によっては「明治33年」との表示が出てきました。この原因は「形式を選択して貼り付け→値」にチェックを入れなければなる場合と、入れてもなる場合があります。特に、後者の場合の原因・解決策をご教示下さい。 (もちろん、コピー&ペーストで一応解決はしてますが・・・)

その他の回答 (7)

  • 10n
  • ベストアンサー率100% (2/2)
回答No.8

そうですよね。列全体に「貼り付け」る必要はないですね。「必要範囲の先頭から末尾を選択」→「貼り付け」でしたね。 そうそう「0」が「明治33年」か「明治37年」かは私も気になっていたところです。 ウィンドウズ版では「ツール→オプション」で現れるダイアログの マッキントッシュ版では「ツール→初期設定」で現れるダイアログの 「計算方法」の「ブックオプション」の欄の「1904年から計算する」を チェックすると「0」が「明治37年」(1904年)、 チェックしないと「0」が「明治33年」(1900年)となります。 なぜたった4年のシフトのためにこのチェックボックスは用意されたのでしょう。 ご存じのかたがいらっしゃいましたら 教えて! あと日付に関連して本編から外れた駄談をしてしまって恐縮ですが 2001年になってから日付入力のキーストロークが増えてしまいましたね。 2000年の頃は 入力年の日付は「5/5」→「2000/5/5」。一年前は「99/5/5」→「1999/5/5」 2001年になってから 入力年の日付は「5/5」→「2001/5/5」。一年前は「2000/5/5」→「2000/5/5」となってしまいました。 「00/5/5」→「2000/5/5」となるようなパッチはないのですかねぇ(単なるボヤキです)。

noname#211914
質問者

お礼

お礼が大変遅くなり申し訳ありません。 何度も回答して頂いてありがとうございました。 今後ともよろしくお願いします。

  • 10n
  • ベストアンサー率100% (2/2)
回答No.7

表示形式の設定により日付として表示されている数値を日付の文字列に変換する場合は「TEXT」関数を用いると便利です。 仮にB列に日付が上から下まで入力されていたとします。 <1>C列を選択します。 <2>「列の挿入」を行います。 <3>「C1」に「=TEXT(B1,"ggge年m月d日")」を入力します。 <4>C列全体を選択する。 <5>選択範囲(C列全体)に「貼り付け」を行う。 <6>C列全体を選択し「コピー」する。 <7>そのまま選択範囲(C列全体)に「形式を選択して貼り付け→値」を行う。 以上の作業により日付が文字列として入力されます。

noname#211914
質問者

補足

10nさん、いろいろと勉強になり、ありがとうございます。 前回の補足同様に、 「<5>選択範囲(C列全体)に「貼り付け」を行う。」では、 B列の選択範囲を「貼り付け」した方が良いのでしょうか? いずれにしても、お恥ずかしい限りですが「文字列」・「数式」等の基本的な事のおさえが甘かったようです。

noname#420
noname#420
回答No.6

日付の表示形式ですと今後の置換も大変ですので、 一度現状態を文字列に置き換えたほうが良いと思います。 そのVBAを下記に示します。 Sub Macro() Dim c As Range '現選択中シート内のセル指定範囲において For Each c In ActiveSheet.Range("A1:A368") 'セル書式設定が日付型「平成 年 月 日」ならば、 If c.NumberFormatLocal = "ggge""年""m""月""d""日""" Then 'A_単なる文字列へ変換 '←「ココ」 c.Value = Format(c.Value, "ggge""年""m""月""d""日""")'←「ココ」 End If Next End Sub Range("A1:A368")ではA1からA368のセル範囲を指定して日付を文字列へ変換しています。ご自身でここは書き換えて使用してください。 現状を文字列に置換後、標準機能の文字列置換で平成13年にすればよいと思いますが、その際、平成12年2月29日にご注意ください。 ちなみに1年加算して文字列へ置き換えるのは上記 [←「ココ」]行を下記Bの行と置き換えます。(365を足しても良いですが、その場合閏年の判定等わずらわしくなります。) 'B 1年加算して文字列へ c.Value = Format(DateAdd("yyyy", 1, c.Value), "ggge""年""m""月""d""日""") また、1年加算して日付のままにしておくのは下記Cの行と置き換えます。 'C 1年加算して日付へ c.Value = DateAdd("yyyy", 1, c.Value) マクロの実行方法等はヘルプ等をみて勉強なさって下さい

noname#211914
質問者

お礼

お礼が遅くなり申し訳ありません。 VBAの丁寧な解説有難うございました。 もう少し勉強してからあらためて質問致しますので、今後ともよろしくお願いします。

  • 10n
  • ベストアンサー率100% (2/2)
回答No.5

---1つめのケース--- 「(連続した)複数行の修正が必要なので、例えばC1をC2からC5に各々コピーし、C1からC5を一括コピーしてC6にペーストする。これを繰り返していく・・・」 この作業の必然性が分かりません。 <1>C1を選択し「コピー」を行う。 <2>C列全体を選択する。 <3>選択範囲(C列全体)に「貼り付け」を行う。 という方法ではまずいのでしょうか。 まぁそれはさておき このケースにおいてはC列のセルにはすべて「=B?+365」という数式が入力されているはずです。これらのセルが「明治」を表示してしまうケースは1つだけ考えられます。 それは、参照元の「B?」のセルに何も値が入力されていない。つまり空欄のセルであった場合です。 このケースにおいて現れた「明治」セル(仮にC21)には「=B21+365」という数式が格納されているはずです。その「B21」のセルに何も値が入力されていない、つまり空欄のセルであった場合は「=B21+365」という数式が入力されているセル「C21」は「明治」の日付を表示します。 ここでExcelの「日付」について説明します。 例えば「平成12年5月5日」と表示されているセルにはどのような値が格納されているのでしょうか。じつはこのセルには「35189」という数値が格納されています。 ではこのセルに「0」を入力するとどうなるでしょうか。「明治37年1月1日」と表示されます。 つまり「0」を「明治37年1月1日」として「1」が「明治37年1月2日」、「366」が「明治38年1月1日」、「3132」が「明治45年7月29日」、「3133」が「大正1年7月30日」となっています。 つまり「B21」が「0」もしくは空欄であった場合は「=B21+365」は実質的には「365」となるため「明治37年12月31日」の日付を表示してしまうわけです。 ================================================== ---2つめのケース--- このケースにおいても、「明治」セルにはどのような数値が格納されたのかという視点から考えてみます。 この「形式を選択して貼り付け」により「明治」セルが現れてしまうケース、つまりセルに「3132」以下の数値が格納されるケースは1つだけ考えられます。 それは、「形式を選択して貼り付け」るときに「演算」の欄で「しない」以外の項目にチェックを入れてしまった場合です。 「形式を選択して貼り付け」ダイアログの中ほどには「演算」という欄があります。 この欄の「減算」という項目をチェックした場合、「貼り付け」前にそのセルに格納されていた値を「コピー」されている値で減算した値が「貼り付け」られます。 同様に「演算」の欄に「除算」という項目があります。これも「貼り付け」前の値を「コピー」されている値で割った値を「貼り付け」ます。 つまり「平成12年5月5日」と表示している「B4」を参照する「=B4+365」という数式が「C4」に入力されていた場合、「C4」は「平成13年5月5日」と表示します。このとき「C4」の値は実質的には「35554」です。 この「C4」をコピーして、「C4」に「形式を選択して貼り付け→値・減算」を行った場合は (C4の値)-(C4の値)ということで結果、値は「0」となり「明治37年1月1日」となるはずです。 同様に「形式を選択して貼り付け→値・除算」を行った場合は (C4の値)/(C4の値)ということで結果、値は「1」となり「明治37年1月2日」となるはずです。 ================================================== ---まとめ--- 「明治」セルが現れてしまったときには <1>そのセルの参照元が「0」もしくは空欄ではないか。 <2>「形式を選択して貼り付け」るときに「演算」の欄が「しない」であったかどうか。 を確認すればよいと思いますがいかがでしょうか。

noname#211914
質問者

補足

10nさん、何度もありがとうございます。 「この作業の必然性が分かりません。 <1>C1を選択し「コピー」を行う。 <2>C列全体を選択する。 <3>選択範囲(C列全体)に「貼り付け」を行う。 という方法ではまずいのでしょうか。」 まず大変申し訳ないのですが、当方は「Lotus1-2,3,2000」と「Excel2000」の両方をインストールしてます。それで、この質問は本来こちらのミスで「Lotus1-2-3 」とすべきところを「Excel」としてしました。失礼しました。自信はありませんが、恐らく「Lotus」では上記のような方法でないと・・・(?) ---------------------------- 「つまり「0」を「明治37年1月1日」」に関しては説明頂き、良く理解できました。 その後、「Excel2000」で確認しました。 2点確認したい事があります。 1.前回の回答で、「<5>C列を選択し、貼り付け・・・。」に関して、 C列全体を選択すると、余分な部分(範囲外)もコピーされ てしましますね? →これを回避するにはB列の必要範囲をコピーする・・・? 2.細かい点ですが。「明治33年」ではないでしょうか(1900年は)? 宜しくお願いします。

  • 10n
  • ベストアンサー率100% (2/2)
回答No.4

「明治」の日付を表示するセルが出現してしまうことの原因としては 「=??-365」の参照元のセルが空欄であることが考えられます。 「明治」セルは作業のどの段階で現れるのでしょうか。

noname#211914
質問者

補足

2つのケースがあるようです?? 1.<3>C1に「=B1+365」という数式を入力してください。 <4>C1をコピーしてください。 ------------------------- (連続した)複数行の修正が必要なので、例えばC1をC2からC5に各々コピーし、C1からC5を一括コピーしてC6にペーストする。これを繰り返していく最中にある行で「明治」となる。 ============================ 2. <7>そのままC列に「形式を選択して貼り付け→値」を行ってください。 ----------------------------- この貼り付けを行ったある行で「明治」となる。 以上の2つのケースがあるようです。 ご教示の程宜しくお願いします。

noname#420
noname#420
回答No.2

原因として考えられるのは、2つあると思います。 1つめは、先に回答された方のもの(全角・半角混在)と 2つめはセルの書式設定が[日付]の表示形式となっているものです。 1つめは先に回答された方のいうとおり解決できるとおもいますが、2つめのものについては1セルづつ修正していくかVBAを使用して一括修正するしかないと思います。

noname#211914
質問者

補足

ありがとうございます。 原因は2のようです。 「VBA」に関しては以前より興味を持ってましたが、なかなか勉強する機会がありませんでした。少し、この件に関して説明して頂ければ幸いです。

  • nanaly
  • ベストアンサー率37% (3/8)
回答No.1

「平成12年x月x日」の文字列に半角や全角が混在しているのではないでしょうか?   「置換」ダイアログボックスで「全角と半角を区別する」がチェックされていたならば、そのチェックを外してから「すべて置換」ボタンをクリックすれば一括置換できると思います。

noname#211914
質問者

お礼

ありがとうございます。 「全角・半角」は質問前に気がつきまして、一部は上手くいきましたがこれだけでは解決しませんでした。

関連するQ&A

  • エクセルでの置換について

    エクセルでの置換について教えてください。 あるセルの中に「昭和20年4月10日」というように書かれているものを「平成20年4月10日」と直したいのですが置換では出来ませんでした。 なにか、やりかたが違うのでしょうか?

  • エクセルの置換について

    エクセルの置換について エクセル2000を使っています。 1シート内に日付(10/1、10/2・・・)が複数セルに入力されています。 このシート内のセルを毎月更新(10/3→10/31、10/4→11/1、10/5→11/2と一定周期で変更)するのですが、ひとつずつのセルに直接入力変換していくと時間が掛かる為、現状は(これも面倒ですが)置換機能で1日ずつ“すべて置換”で更新しています。 ですが、例えば11/1→11/29という置換をすると、先に打ち込んだ11/1を含むセル(11/11、11/13など)全てが置換されてしまうため、“完全に同一なセルだけを検索する”にチェックし、すべて置換をするのですが、『置換対象となる一致するデータが見つかりません。検索範囲にそのデータがないか、または条件に一致するレコードがありません。』というエラーメッセージが出てしまい、置換ができません。 11/1のように(/1)が入力されたセルだけを指定して、別の日付に全て置換する方法はどうすれば良いですか? 宜しくお願いします。

  • エクセルのシート名の参照

    エクセルでブック1とブック2があり、それぞれ日付別に1~31のシートがあります。 ブック1は日報のような内容となっており、ブック2でブック1のデータを参照して、計算をしております。 ブック2の計算式が月ごとに変わるのですが、ブック2のシート1に数式を入力し2~31にコピー&ペーストし、置換を使用して参照シート名を1から2~31へと置換しているのですが、間違いや変更のたびにやりなおしとなり、かなり手間となっています。 何か良い方法は無いでしょうか? 分かりにくくてすいません。

  • Excelの日付をコピーし、貼り付けると1日ずれます

    Excelに入っている日付データをコピーし、別のファイル、又は別のシートのセルに貼り付けると、不思議なことに、日付が1日ずれた形でコピーされてしまいます。 例えば 2005.9.22 10:00:00 と入っているセルをコピーし、貼り付けると 2005.9.23 10:00:00 と貼り付けられてしまうのです。 但し、これが同じシート内の場合は同じ日付でペーストされます。 どうやっても1日ずれてしまうので、困っています。 どうすれば同じ日付が貼り付けられるでしょうか?

  • エクセルの操作

    エクセルで日付を入力する方法(連続で) 1シート1日の日付を 2つ目のシートに翌日の日付を続けて入力したいのですが。(たとえば1つ目のシート平成20年4月1日 2つ目のシート平成20年4月2日と・・・)365日分作りたいので1日1日入力するのはかなり面倒くさいのでなにかよい方法はないでしょうか。 1シート内だと日付を入力してセルをドラッグすると連続した日付が入力されるのはわかるのですがシートにまたがってやる方法がわかりません。教えてください。 ちなみに日報を作っています。

  • エクセルで日毎のデータの蓄積

    シートBにその日のデータを入力し、そのデータをシートAに蓄積していきたいです。 手作業ならば、 1.入力されたシートBのその日のデータをコピー 2.シートAの同じ日付の行を探し、値のみペースト とするのでしょうが、これを自動化したいです。 セル参照だと、毎日、同じ行にデータが上書きされていくため 無理っぽいし、マクロを使わないとできませんか? コピーとペーストはできそうですけど、「同じ日付の行を探し」というところが難しそうだなぁと思いました。。。 すみませんが、よろしくお願いします。 シートA(データ蓄積用) 日付   データ 12/1   データ1 12/2 ・ ・ 12/31 シートB(データ入力用) 日付   データ 12/2   データ2 ↑日付が変われば、同じ行にデータを上書き

  • エクセル置換機能について

    いつもお世話になっております。 さっそく質問ですが、EXCEL 2003にて例えば「.9/7」と入力されているセルを「9/7」と一括で置換するにはどうしたら良いでしょうか? 因みに、「.9/7」とは9月7日と言う意味の日付が入力されている訳ですがその日付が入力されたセルは例えば「.9/3」、「.9/11」などたくさんあります。それら日付の前に入力されている.(ピリオド)を一括で取り除きたいのです。 説明の仕方が下手で申し訳ありませんが、何卒よろしくお願い致します。

  • エクセルシートで週間予定表を作っているのですが・・・

    最初に基本となるひとつのシートがあるのですが・・・ そのシートの右上にNo.1の表示 適当なところに、 自・平成○年○月○日の記入欄 至・平成△年△月△日の記入欄 自の日付を読み取って別箇所に日にちと曜日が飛んでいくようになっております。 そのシートを「移動またはコピー」で新しいシート(基本のシートの横に2番目のシート)を作りたいのです。 その際に、コピーしたシートの右上がNo.2になり、日付も次の週のものに自動に変わるようにしたいのです。 同様に、3枚目4枚めと増やして行きたいのです。 どうぞやり方を教えて頂きたくお願い致します。 (XP・オフィス2002です)

  • エクセルで各シートに日付・曜日一括表示するには

    (1)エクセルで7月31日分のシートをつくり、今年のカレンダーどおりの日付・曜日を(各シートのA1セルに、いちいち入力するのではなく)一括で各シートのA1セルに表示できる方法があれば、教えて下さい。 (2)エクセルで昨年7月の平日の数だけシートがあるファイルがあります。各シートのA1セルには、「平成19年7月○日(○曜日)」と入力されています。 このファイルを、今年の7月の平日カレンダーに一括置換するには、どうすればいいでしょうか? 昨年と今年は平日の日付はもちろん、同じ日でも曜日が違いますので、各シートを開き、いちいち日付・曜日を直さなければいけないのでしょうか。教えて下さい。宜しくお願いします。

  • Excelにて日付と曜日を自動的に表示できるように…

    ひと月につきひとつのファイル(Excel)で、 その中に1日1枚記入するワークシートが1か月分…つまり1から31まであります。 その1枚ずつに日付と曜日を入れるセルがそれぞれあります。 毎月、前月のファイルをコピーして使用するのですが、 そのため入力する度に日付と曜日を変えています。 これを自動的に表示させる方法はないでしょうか? 例えば10月のファイルなら、 12という名前のワークシートは日付が2005/10/12で曜日が(水)と表示されるような… もし何か名案があればよろしくお願いします。

専門家に質問してみよう