• ベストアンサー

エクセル 入力規則 貼付しても規則が変わらないようにするには?

どなたかよろしくお願いします。 複数の営業所の売上を一つのエクセルシートに貼り付け、それを集計しています。 テンプレートでは入力規則で設定しているのですが、どうしても各人の入力方法がまちまちで、アルファベットを入力する列が全角・半角・太字になっていたり、数字の列が文字列になっていたりとバラバラなので、毎回直しています。なので貼り付けられても書式を統一出来ればと思います。 僕はあまり詳しくないのですが、入力規則でこの列は「半角英数字」と設定していても貼り付けたらそれになってしまうので、貼り付けられても書式が変わらないように、もしくはテンプレートの段階で書式を変更出来ないようにするにはVBAなどで設定すればそれは回避できるのでしょうか。 お手数ですが、よろしくお願い致します。

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

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.5

#4です >B列 半角数字 >C・H・K列 半角英字 B・C・H・K列を処理対象にしました 数値と英字の区別がありますが、考慮していません B列ですが、数字以外の入力があった場合にどうする? 条件が曖昧なので、対象列に半角に変換できる全角文字・数字が入力された場合は、半角に変換するのままです >共通:フォントサイズ 14 標準 文字黒・背景色なし これはExcelの機能の「スタイル」をマクロで適応しているだけなので 簡単な「スタイル」の設定方法のみにします [Alt]+[O](オーです) [ALT]+[S] スタイルの設定画面が開きます スタイル名を「コピペ」としてください (マクロの中でスタイル名「コピペ」を使用するように変更したため) 変更ボタンで各項目の設定をする 各項目の設定後、スタイルの設定画面で変更の必要の無いチェックボックスのチェックを外す (今回は、フォントとパターン以外のチェックを外す) 追加で追加し、OKで終了してください 下記のコードを#4のものと入れ替える Private Sub Worksheet_Change(ByVal Target As Range) '指定範囲外は処理を中止 If Intersect(Target, Range("b:b,c:c,h:h,k:k")) Is Nothing Then Exit Sub Application.EnableEvents = False Dim Rng As Range '複数セルを選択している場合に単一セルごとに処理 For Each Rng In Target '単一セルが処理対象なら処理開始 If Not Intersect(Rng, Range("b:b,c:c,h:h,k:k")) Is Nothing Then Rng.Style = "コピペ"  'スタイル名コピペを適用(書式) Rng = StrConv(Rng, vbNarrow)  '全角⇒半角変換 Rng.Value = Rng.Value  '文字数字⇒数値変換 End If Next Rng Application.EnableEvents = True End Sub 必ず、スタイルを設定し、スタイル名をコピペとすること

その他の回答 (4)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.4

直接入力やコピペをしても 全角英数⇒半角英数 文字列の数字⇒数値 以下は新規にBookを作成した時の「セルの書式」と同じ 表示形式、配置、フォント、罫線、パターン、保護 設定が戻ります 「セルの書式」で設定できるものであれば、変更も可能 シートモジュールに下のコードをコピペ (対象のシートタブを右クリック-コードの表示を選択すると、シートモジュールが表示されます) VBE画面を閉じる Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("a:a")) Is Nothing Then Exit Sub Application.EnableEvents = False Dim Rng As Range For Each Rng In Target If Not Intersect(Rng, Range("a:a")) Is Nothing Then Rng.Style = "Normal" Rng = StrConv(Rng, vbNarrow) Rng.Value = Rng.Value End If Next Rng Application.EnableEvents = True End Sub 詳細がないのでA列のみを対象にしています ためしに、A列以外に全角英数、セルに色づけ、フォントを太字、サイズを20などにした データを作成し、コピーしてA列に貼り付けてみて

hotrod7020
質問者

お礼

hige_082さん、有難うございます。 早速の情報提供有難うございます。こんなことが出来るのだと、感動しております。イメージ的にはまさにこんな感じです。 詳細を記入していませんでした。すいません。 今出来たらいいなと思うのは、 B列 半角数字 C・H・K列 半角英字 共通:フォントサイズ 14 標準 文字黒・背景色なし ※但し2行目に漢字で項目を入れています お手数かけますが、お答え頂ける範囲で構いませんので、 よろしくお願い致します。  

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

No1です。 ご質問の内容を、まったく勘違いしてしまってました。 最初の方法では一般の書式は維持されますが、No2様のおっしゃるように半角、全角などの変換はできません。 大変失礼しました。無視してください。

hotrod7020
質問者

お礼

ご意見有難うございます。当方無知なので、非常に参考になりました。

  • takesun
  • ベストアンサー率40% (22/54)
回答No.2

あとからのコピー&ペーストだけでは、 全角⇔半角の変換はできませんので難しいですよね。 お使いの環境(ファイル)がどうなっているか分かりませんけど VBAでそのシート自体コピー&ペーストを禁止するとかは どうでしょうか。 該当のシートタブを右クリックして、コードの表示で以下を貼り付け て見てください。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If (Application.CutCopyMode <> False) Then Application.CutCopyMode = False End If End Sub

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

入力する人が多数の人の場合、ルールを徹底するのはなかなか難しいですよね。 以下の方法で可能だと思いますが、その方法を全員に徹底するのは同じように無理でしょうから、とりあえず、今のまま受け取って、質問者様の修正手間を減らすという方向での回答ですが… 新しく書式設定済みのシートに、対象部分を全部コピーして移動します。 その際に、「貼り付け」-「形式を選択して貼り付け」で「値」を選んで張り付ければ、書式はコピーされません。 単純に1回のコピー、ペーストですが、量が多いとそれでも面倒かも知れません。 その場合は、↑の作業をマクロ化(VBA)しておくことで、さらに簡単になります。 範囲を選択して、1回分のコピー、ペースト分のマクロなので、マクロ事体はそれほど難しいものではないと思います。

hotrod7020
質問者

お礼

早速のご回答有難うございます。 多数いるとなかなかいうことを聞いてもらえないので、コチラがうまく出来る方法を取るしかないと考えました(笑)。 VBAにトライしてみます。