- 締切済み
エクセルの置換について
エクセルの置換について エクセル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)が入力されたセルだけを指定して、別の日付に全て置換する方法はどうすれば良いですか? 宜しくお願いします。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- mu2011
- ベストアンサー率38% (1910/4994)
NO2です。 >マクロ記録させたいのですが、方法がちょっと分からなくて・・・ 操作前にツール→マクロ→新しいマクロの記録を選択→マクロの記録のダイアログでマクロ名(仮に日付更新)、ショートカットキー指定(任意ですが指定すればワンタッチで起動できる)→OK (1)更新日数を入力しているセル(マクロ記録操作前に設定しておいて下さい)を選択してコピー (2)日付対象セルを選択(セルが連続していない場合、CTRLキー押下しながら選択) (3)選択セル上で右クリック→形式を選択して貼り付け→加算を選択→OK→escキー押下→更新日数セルを選択 以上の操作完了後、ツール→マクロ→記録終了→ブックを上書き保存してファイルを閉じる 以降にファイルを立ち上げるとマクロ有効に「する」「しない」の確認ダイアログが表示されますので「する」を選択してファイルを開きます マクロの呼び出しは、ツール→マクロ→マクロでダイアログ上の「日付更新」を選択かショートカットキーを押下となります。 >4週間を1サイクルにして、更新はサイクル末に一回行います。 >どういうマクロ記録が良いんでしょうね?(笑) ⇒例えば、空きセルに更新日付を入力、別セルにIF関数で当日(=TODAY())と更新日付より28を超えていれば督促表示するとかで如何でしょうか? これを完全自動化にする場合はVBAを学習して下さい。
- kagakusuki
- ベストアンサー率51% (2610/5101)
例えば、10/1、10/2、10/3を置換する前に、10/10~10/31をそれぞれ、 新しい日付の月/a新しい日付の日 の形式に置換しておきます。(例えば10/12→10/1と置換したい場合には、10/12→10/a1と置換しておく) 次に、10/1、10/2、10/3を 新しい日付の月/a新しい日付の日 の形式に置換しておきます。 同様のやり方で、他の月の日付けに関しても、1日~3日を後回しにした上で、全ての日付の箇所を、 新しい日付の月/a新しい日付の日 の形式に置換しておきます。 最後に/aを/に置換して完了です。 別の方法として、同じ日付けが入力されているセル同士は、次の月も必ず互いに同じ日付けが入力される場合には、準備段階として、別のSheet(例えばSheet2)に表を設けて、例えば2010年11月1日の日付けを入力する全てのセルには、 =Sheet2!$B$1 と入力しておき、 Sheet2のB1セルには、 2010/11/1 と入力しておきます。 同様に他の日付けを入力するセルに対しても、同様の数式を入力し、Sheet2に対応するセルを設定します。 そして、日付けを表示させる全てのセルに対して、次の操作を行って、書式設定を 月/日 の形式にします。 日付けを表示させるセルを右クリック ↓ 現れた選択肢の中の[セルの書式設定]をクリック ↓ 現れた「セルの書式設定」ウィンドウの[表示形式]タグをクリック ↓ 「分類」欄の[日付]をクリック ↓ 「種類」欄の[3/14](月/日 の形式の箇所)をクリック ↓ [OK]ボタンをクリック ↓ 次のセルを選択 後は各日付けに対応するSheet2の内容を入力し直せば、元のSheetの表示も変わります。
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! すでに解決しているみたいですが・・・ 操作したいSheet見出し上で右クリック → コードの表示 を選択し、 ↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub test() Dim i, j As Long For i = 1 To ActiveSheet.UsedRange.Rows.Count For j = 1 To ActiveSheet.UsedRange.Columns.Count If Cells(i, j).NumberFormatLocal = "m/d;@" And Cells(i, j) <> "" Then Cells(i, j) = Cells(i, j) + 28 End If Next j Next i End Sub 単純に「セルの表示形式」が 日付 → 3/14 で表示形式を変えているセルが28日プラスされた日付になると思います。 (すべてのセルが対象になってしまいますので、変更したくないセルも日付が変わります) もし、セルの表示形式をユーザー定義から 「m/d」としているのであれば、コード内の 「m/d;@」の部分を「m/d」に変更してみてください。 尚、一旦マクロを実行すると元に戻せませんので、別Sheetにコピーしてマクロを試してみてください。 以上、参考になれば良いのですが・・・m(__)m
- KURUMITO
- ベストアンサー率42% (1835/4283)
連続した日付が入力されている場合はもちろんのこと、連続した日付が入力されていない場合でも、例えば3週間後の日付に変更するのでしたら21の数値を全く関係のないセルに入力して右クリックで「コピー」します。 その後にCtrlキーを押しながら変更したい日付の入ったセルをクリックまたはドラッグして選択します。右クリックをして「形式を選択して貼り付け」で表示される画面の中の[加算]にチェックを付けてOKします。 これで選択されたセル範囲のすべての日付が3週間後の日付に変わります。
- conanthe
- ベストアンサー率65% (114/175)
日付が連続している場合には、次の方法が役立つかもしれません。 (1)A1セルに「10/1」と入力 (2)A2セルに「=A1+1」と入力 (3)A2セルを、A3~A31にコピー これで、10月1日から10月31日までの日付がA列に入ります。ここでA1セルを 2010/10/1 → 2010/10/31 と書き換えてみてください。残りの日付もすべて変わるはずです。 連続していない場合でも、最初は面倒ですが起点になる日付以外を数式で表しておくと、起点になる日付だけ変えればいいのであとは楽です。 ちなみに、僕だったらまずシートをコピーして、コピーしたシートの日付を変え、元のシートは残しておきます(もうすでにおやりかもしれませんが)。
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 例えば、28(ご例示から想定した値)を空きセルに入力してコピー→対象日付セル範囲を選択→形式を選択して貼り付け→加算を選択→OK 又、この操作をマクロ記録させておくと後々の操作が簡略できますが如何でしょうか。
お礼
ありがとうございます! マクロ記録させたいのですが、方法がちょっと分からなくて・・・ 4週間を1サイクルにして、更新はサイクル末に一回行います。 どういうマクロ記録が良いんでしょうね?(笑)
- Executione
- ベストアンサー率43% (182/418)
多分、11/1で、“完全に同一なセルだけを検索する”にチェックではなく、 2010/11/1にすれば、できると思います。
お礼
出来ました。 西暦から入れればいいんですね! ありがとうございます!!
お礼
ありがとうございます! セルは連続していません。 起点になる日付以外を数式で表す方法がちょっと分からなくて・・・ イメージはあるんですけどね(笑)