- ベストアンサー
エクセル2003の入力について
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 できなかったら仕方がありませんが、同一の質問の中で、新規の条件によるリクエストは、増やさないでください。そういう場合は、新たな質問にしてください。 '------------------------------------------- '書式をコピーするモード Dim FrstCell As Range Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.MergeCells = False And Target.Count > 1 Then Exit Sub On Error Resume Next If Target.Column = 2 Then 'B列 Copyされる側 Set FrstCell = Target.Cells(1) Else If Target.Column <> 5 Then Exit Sub 'E列 データ元 Target.Copy FrstCell.MergeArea FrstCell.MergeArea.NumberFormat = Target.NumberFormat FrstCell.MergeArea.Font.Color = Target.Font.Color End If On Error GoTo 0 End Sub '------------------------------------------- '結合セルを使わずに、二つをコピーする 'ただし、コピー先はひとつで、データ元をひとつずつクリックする、とコピー先は、その下にコピーされる。 Dim FrstCell As Range Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.MergeCells = False And Target.Count > 1 Then Exit Sub On Error Resume Next If Target.Column = 2 Then 'B列 Copyされる側 Set FrstCell = Target.Cells(1) Else If Target.Column <> 5 Then Exit Sub 'E列 データ元 If FrstCell.Value = "" Then Target.Copy FrstCell Else If Target.Value <> FrstCell.Value Then '同じ値はコピーしない Target.Copy FrstCell.Offset(1) End If End If End If On Error GoTo 0 End Sub
その他の回答 (6)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 返事を付けるのが遅くなりました。補足のコードの列ごとの分岐としての意味は分かりますが、コピー元側とコピーされる側の組み合わせを作らなくてはなりません。コードは書きませんが、アドバイスとしては、モジュール・レベル変数を二つ用意しなければならないような気がします。簡単な変更というわけにはいかないように思います。 ただ、今の時点では、実現可能か分かりません。 新規な質問として、固定の回答者よりも、多くの人のアイデアを募ったほうがよいと思います。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 最初に画面を付けていただいたほうが早かったですね。 >コピーされる側のセルが結合している場合、 #3は、誰でもできますが、ここまで来ると、意外に難しいです。 '------------------------------------------- Dim FrstCell As Range Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.MergeCells = False And Target.Count > 1 Then Exit Sub On Error Resume Next '想定しないエラーを無視する If Target.Cells(1) = "" Then If Target.Column <> 2 Then Exit Sub 'B列 Copyされる側 Set FrstCell = Target.Cells(1) Else If Target.Column <> 5 Then Exit Sub 'E列 データ元 Target.Copy FrstCell.MergeArea End If On Error GoTo 0 'エラートラップを終了 End Sub '------------------------------------------- うまく行かないようなら、一度、ここから、「'(アポストロフィー)」のコメントブロックを入れて、エラーメッセージを出してみてください。そうしないと、どんなエラーが出ているか分かりません。 'On Error Resume Next '想定しないエラーを無視する 'On Error GoTo 0
補足
できました!ご回答ありがとうございます。 画像をアップしました。見にくいのですが、このような表を作成しています。 F列に素早く簡単に時間を入力できればと思っています。 なぜ行を2つを1つに結合しているかと申しますと 1つの行にしてしまうと、B列の時間が下に延びすぎてしまい 選択するとき大変だと思ったからです。 そこで、今回の方法で試したところ、結合したセルに時刻はきちんと入力 できたのですが、今度は、フォントカラーが適応されなくなってしまいました。 試しに結合を解除すると、きちんとカラーも反映されます。 時間帯によって、黒と赤で色分けしなければならなく、 または、セルを結合しない代りに、コピー元の列を2つ指定(時間帯の文字を2列にして)できないでしょうか? 今一度お力をお貸し願えませんでしょうか? 何卒、よろしくお願い申し上げます。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >コピーを適用できるセル範囲の指定、もしくは列の指定ができませんでしょうか? 以下のような感じではどうでしょうか。 こういうマクロは、慣れの問題で、頭で考えたら、すごく難しいことを考えてしまいましたが、手を動かしてみたほうが早かったです。 '------------------------------------------- Dim FrstCell As Range Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Target.Value = "" Then If Target.Column <> 2 Then Exit Sub 'B列 Copyされる側 Set FrstCell = Target Else If Target.Column <> 5 Then Exit Sub 'E列 データ元 Target.Copy FrstCell End If End Sub
補足
ご回答ありがとうございます。うまくいきました。 おんぶにだっこで更にで申し訳ありません。 コピーされる側のセルが結合している場合、 実行時エラー'5': プロシージャの呼び出し、または引数が不正です。 というエラーが出てしまいます。 これを回避する方法はないでしょうか? お手数をお掛けしてしまい申し訳ありませんが、よろしくお願い申し上げます。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 マクロはある程度分かる人だと思いコードだけ出させていただきます。 なお、上書きモードはありませんから、文字が書かれている場所は、一旦、文字を削除しないと、そこにはコピーできません。 '------------------------------------------- 'シートモジュール '------------------------------------------- Dim FrstCell As Range Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Target.Value = "" Then Set FrstCell = Target Else Target.Copy FrstCell End If End Sub
補足
ご回答ありがとうございます、できました。 さらに欲をいいますと、コピーを適用できるセル範囲の指定、もしくは列の指定ができませんでしょうか? 無学で申し訳ありませんが、よろしくお願い申し上げます。
- KURUMITO
- ベストアンサー率42% (1835/4283)
マクロを使わない限り無理でしょう。 それに代わる方法としては、例えばある任意のセルがA1セルからA10セルの間にあるとします。 任意のセルをクリックすることで月、火、水・・などと表示されその中から目的の曜日を選択することで曜日を表示させる方法です。 初めにE1セルからE5セルに曜日があるとして、A1セルからA10セルを範囲として選択します。その後に「データ」メニューから「入力規則」を選択し、表示の画面で入力値の種類で「リスト」を選択します。もとの値の窓にはE1セルからE5セルをドラッグして式を入力します。=$E$1:$E$5のように表示されます。その後にOKします。 これらの操作がすんだあとで例えばA1セルを選択すれば右側に▼印が表示されますのでそれをクリックして望みの曜日を選択すればA1セルにはその曜日が表示されます。
補足
>マクロを使わない限り無理でしょう マクロを使ってもいいので、一覧から選択して入力させることができないでしょうか? というのも、パソコンに全く触れたことのない人(プルダウンとかもわからない)が入力することを想定しておりまして、目に見える状態の一覧から選択し、直感的に入力できるようにしたいと思っています。 どうぞ、よろしくお願い申し上げます。
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! リスト表示ではダメですか? 当方使用のExcel2003での場合ですが・・・ まずE1~E5に月・火・水・・・と金まで入っているとします。 表示させたいセルを全て範囲指定します。 (セルが飛び飛びの場合はCtrlキーを押しながら範囲指定) メニュー → データ → 入力規則 → 「設定タブ」の「入力値の種類」の右側にある下向き▼をクリック → リストを選択 → 「元の値」の右側の四角をクリックしてE1~E5を選択してOK これで範囲指定したセル全てに下向き▼が表示されて プルダウンで月~金を選ぶことができます。 尚、範囲指定したセルへの入力はできなくなります。 以上、参考になれば幸いですが、 他に良い方法があれば読み流してくださいね。m(__)m
お礼
いろいろお答えいただきましてありがとうございました。 また質問しなおしてみます。 ありがとうございました。
補足
うまくコピー元の書式を適用させることができました!ありがとうございます。 >新規の条件によるリクエストは、増やさないでください。 ご指摘ありがとうございます、申し訳ありませんでした。 といいますのも、このような文を書いてみたのですが(他の列にも同様の設定ができないか)、うまくいかなくて困っていましたので、質問させていただきました、申し訳ありませんでした。 ------------------------------------------------------ Dim FrstCell As Range Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.MergeCells = False And Target.Count > 1 Then Exit Sub On Error Resume Next If Target.Column = 6 Then 'E列 Copyされる側 Set FrstCell = Target.Cells(1) Else If Target.Column <> 2 Then Exit Sub 'B列 データ元 Target.Copy FrstCell.MergeArea FrstCell.MergeArea.NumberFormat = Target.NumberFormat FrstCell.MergeArea.Font.Color = Target.Font.Color If Target.Column = 7 Then 'F列 Copyされる側 Set FrstCell = Target.Cells(1) Else If Target.Column <> 1 Then Exit Sub 'A列 データ元 Target.Copy FrstCell.MergeArea FrstCell.MergeArea.NumberFormat = Target.NumberFormat FrstCell.MergeArea.Font.Color = Target.Font.Color End If End If On Error GoTo 0 End Sub