『データ消去すれば書式まで消去』(けん) Exelのデーターベースという本を参考に「入力シート」に入力し「データシート」に蓄 積する表を作っていますが「入力シート」から「データシート」に転記し消去していま すがデータを消去すると書式まで消去されます。書式を消去しないようにするにはどう すればいいんでしょうか?よろしくお願いします。 Sub 新規レコード転記() Dim motoSht As Worksheet, sakiSht As Worksheet, sakiRng As Range, i As Long Dim motoHani() Set motoSht = Sheets("入力") Set sakiSht = Sheets("データシート") motoHani = Array("D5", "B5", "B7", "B9", "G7", "I7", "L7", "B11", "E11", "H11", "B13", "D13", "F13", "H13", _ "B15", "D15", "F15", "G17", "L17", "I17", "F19", "F21", "J19") Set sakiRng = sakiSht.Range("B" & Rows.Count).End(xlUp).Offset(1) For i = 0 To UBound(motoHani) sakiRng.Offset(0, i).Value = motoSht.Range(motoHani(i)).Value motoSht.Range(motoHani(i)).MergeArea.ClearContents Next MsgBox "入力を完了しました。" End Sub ---- >書式を消去しないようにするにはどうすればいいんでしょうか? 書式は残っているような気がしますが。。。 違うことを言ってるのかな〜? (キリキ)(〃⌒o⌒)b ---- 残念ながら日付関数・ふりがな関数・郵便番号変換関数等全ての書式が消去されます。 ---- :書式: メニューの書式>セル で表示されるダイアログで設定できる書式設定 :関数: メニューの挿入>関数 で表示されるダイアログでセルに書き込むことのできる関数 残念ながらClearContentsだと、motoHaniで取得されているセルへ入力された中身が 消えてしまいますね。 motoSht.Range(motoHani(i)).MergeArea.ClearContents この行をコメントアウトするか削除すれば関数は残りますが、計算結果も残ります。 motoHaniのなかのいくつかのセルだけをクリアしたいと言うことでしょうか? (みやほりん) ---- ↑表現がうまくなかったナ、motoHaniによって取得しているセル範囲には 「関数」が入力されているのだと思いますが、「関数」はそのまま残して、 関数の計算の元になっている入力データのみ消去したい、と言うことですか? (みやほりん) ---- おっと衝突☆! 入力シートの motohani に指定してあるセルのデータを、データシートに 転記しながら元のデータをクリアしているのだと思いますが、 その時、motohani の書式までクリアされてしまうということでしょうか? こちらの検証では書式は残りましたが、、、。( ClearContents だから当然?) みやほりんさんと違って、motohani には数式は無いと想定してます。 (純丸)(o^-')b ---- >・・・日付関数・ふりがな関数・郵便番号変換関数等全ての書式が消去されます。 ~~~~ ~~~~ ~~~~ ~~~~~~ 用語の混同があるように思えます。(みやほりん) ---- キリキさん・みやほりんさん・純丸さん有難うございます。どうも書式・関数の言葉を よく理解していないみたいですね。ごめんなさい。motoshtの中に関数が複数ありす。 純丸さんの通り 入力シートの motohani に指定してあるセルのデータを、データシー トに転記しながら元のデータをクリアしています。その時、motohani の関数までクリ アされてしまいます。私の知識ではClearContentsとはデータのみを消去すると解釈し ていますが??? (けん) ---- Helpより。 //////////////////////////////////////////////////////////////////////////// ClearContents メソッド 選択範囲から数式と文字をクリアします。また、グラフからグラフの書式を残したままデータ (系列) をクリアします。 //////////////////////////////////////////////////////////////////////////// つまり、このメソッドを適用するとセルの入力内容は全て消えます。                         ~~~~ (みやほりん) ---- みやほりんさんいろいろありがとうございます。 ---- もう一度質問をします。入力シートに複数の関数が入っています。データ入力後データ シートに転記し入力シートのデータを消去し関数は消去しないように出来ないでしょうか? ---- >入力シートに複数の関数が入っています。データ入力後データ シートに転記し入力シートのデータを消去し関数は消去しないように出来ないでしょうか? 数式の入ったセルをそのままにして、入力されたセルをクリアすれば良いのでは? (seiya) ---- ありゃ衝突☆ seiyaさんと同じことですが、 motoSht.Range(motoHani(i)).MergeArea.ClearContents をやめて、 MsgBox の後で、Range("D5, B5, B7, B9, G7, I7, L7").ClearContents としたら どうでしょう。    ^^^^^^^^^^^^^^^^^^^^^^^^^^ (純丸)(o^-')b          ↑ 数式以外でクリアが必要なセル範囲 ---- seiyaさん有難うございます 純丸さんの通り変更したのですが結合されたセルがあり 「実行時エラー 1004 結合されたセルの一部を変更することは出来ません」のエラー が出ます。 ---- motoHani は数式の入っているセルですよね? その数式の結果を構成するセル(参照先)をクリアにしないと、数式の結果はそのままです。 (seiya) motohaniはデータシートに転記するセルでその中の複数のセルに関数があります。転記 された後にエラーが発生します。入力シートのデータは消去されません。 ---- For i = 0 To UBound(motoHani) sakiRng.Offset(0, i).Value = motoSht.Range(motoHani(i)).Value if not motoSht.Range(motoHani(i)).hasformula then _ motoSht.Range(motoHani(i)).MergeArea.ClearContents Next でなんとかなりますか? (seiya) 追伸:specialscellsが使えるかな? 私は今日は落ちます。明日は忙しいので(多分)他の方よろしくお願いします。 seiyaさん有難うございます。ゆっくりと何とかやってみます。 ---- 結合セルは Range("D5, B5, B7, B9:C10, G7, I7:I8, L7").ClearContents みたいに記述。         ^^^^^^ ^^^^^ マクロの記録をしてみるのが早いかも。 (純丸)(o^-')b ----  キリキさん・みやほりんさん・純丸さんseiyaさんいろいろ有難うございました。  解らないながら次のように作りました。 Sub 新規レコード転記() Dim motoSht As Worksheet, sakiSht As Worksheet, sakiRng As Range, i As Long Dim motoHani() Set motoSht = Sheets("入力") Set sakiSht = Sheets("データシート") motoHani = Array ("D5", "B5", "B7", "B9", "G7", "I7", "L7", "B11", "E11", "H11", "B13", "D13", "F13", "H13", _ "B15", "D15", "F15", "G17", "I17", "F19", "F21", "J19") Set sakiRng = sakiSht.Range("B" & Rows.Count).End(xlUp).Offset(1) For i = 0 To UBound(motoHani) sakiRng.Offset(0, i).Value = motoSht.Range(motoHani(i)).Value Next MsgBox "入力を完了しました。" Range("D5,B7:D7,H7,B11,D11:E11,G11,B13,D13,F13,L13,J13,B15,D15,F15,H17,F19:G19,J19,F21:G21").Select Selection.ClearContents Range("B16").Select End Sub これで入力シートでデータを入力しデータシートに転記し入力シートのデータを消去で きました。入力シートのナンバーをデータ消去した後次のデータを入力する時連番にす る方法はないでしょうか? ---- >次のデータを入力する時連番にする方法はないでしょうか? 連番とは何でしょう? 例えばこんなこと? 標準モジュールへ '----------------------- Sub test() Dim x As Variant Dim i As Long For Each x In Range("D5,B7:D7,H7,B11,D11:E11,G11,B13,D13,F13,L13,J13,B15,D15,F15,H17,F19:G19,J19,F21:G21") Range(x.Address) = "=" & Range("N1").Offset(i, 0).Address '※ i = i + 1 Next x End Sub ※Range("N1")の部分は、邪魔にならない列に変更してください。 このようにすれば、上記で言えば N列に数字を入力すれば入力シートに反映しますが。。。 外したかな? (キリキ)(〃⌒o⌒)b ---- 説明不足ですみません。入力シートのD5にナンバーがあります。データ入力し転記す るとD5も消去されます(別に消去しなくてもいいのですが)次のデータを入力する ときに前データの次の番号を自動表示したいのですが(けん) ---- クリアをする >Selection.ClearContents の範囲から、"D5" を外し Range("D5") = Range("D5") + 1 にするって事でしょうか? (キリキ)(〃⌒o⌒)b ---- もう少し詳しく説明します。入力シートにデータ入力しそのデータをデータシート (SHeet2)に転記します。次のデータを入力するために入力シートのデータを消去しま す。転記されたデータシートの番号が100とします。次のデータを入力時に番号を自動 的に101にしたいのです。うまく説明できずすみません。(けん) ---- スペルが間違ってたので修正しましたが、そのようなことになりませんでしょうか? >Range("B7:D7,H7,B11,D11:E11,G11,B13,D13,F13,L13,J13,B15,D15,F15,H17,F19:G19,J19,F21:G21").Select > Selection.ClearContents > Range("D5") = Range("D5") + 1 (キリキ)(〃⌒o⌒)b キリキさん出来ました。本当にいつも有難うございます。このエクセルの学校で大変勉 強になります。 (けん)