プロが教えるわが家の防犯対策術!

OpenOffice.org Calcでは、セル内の文字を、一部分だけ書き直したり、書き加えたりしたいとき、
[ENTER]キーを押すと簡単に再編集できますが、

Excelでは、同じようにセル内を再編集しようと思っても、
そのセルをダブルクリックするか、[F2]キーを押すしか方法がないのでしょうか?
[ENTER]キーを押しても下のセルに移動するだけでした・・。

できれば、Excelでも、OpenOffice.org Calcと同じように
[ENTER]キーでセル内の再編集をしたいのですが
キーの割り当てを替えたりできないのでしょうか?

また、私はExcel2000を使用しているのですが、
他のバージョンのExcel(98 XP 2003など)でも
セル内の再編集キーは[F2]のみですか?

A 回答 (6件)

こんにちは。

Wendy02です。

今は、細かいところは見ていませんが、
>空白セル上で[ENTERキー]を押しても変わらず下のセルに移動するのみでした。

それは、どこか、マクロの呼び出しが抜けてしまったか、イベントが終わってしまっているようです。

この種のクラス-インスタンスは、一旦、作り上げたものを、あちらこちら、手を入れると、今までの内容とは違ったスタイルになってしまいます。この場合は、複数のイベントをおいていますので、思った以上に複雑です。

はなはだ、勝手なお願いかもしれませんが、ご自身でお使いになり改編されるのはかまいませんが、それを、私自身にフィードバックされても、それに対しては、良いも悪いも言えないことを申し上げておきます。

私は、ご質問者がダメを押された場合は、1・2度は手を入れますが、それ以上、追いかけることはしておりません。多くは、無駄足になることが多いからです。

ここの掲示板は、この種の上級の問題に関して、ご満足のいけるものは、私では無理のようです。もし、コードをお分かりになるのでしたら、この辺で、引き下がらせていだたきます。

仕様に関わる問題に関しては、ご相談があれば、ある程度のアドバイスはしても、私自身は、最初に申し上げたように、手を入れないということにしています。

お力になれずに申し訳ありません。
    • good
    • 0
この回答へのお礼

最後までお付き合いいただきありがとうございます。

[No.5の回答に対する私の補足文]の書き方が悪かったように思いましたので
最後に、補足の補足だけさせてください。

> 空白セル上で[ENTERキー]を押しても変わらず下のセルに移動するのみでした。
> また今まで気付かなかったのですが、
> 矢印キーでセルを移動していくとき、途中で既存セル(数式の入力されているセル)を通過してから、
> 空白セルに直接入力すると副産物(余分に必要なENTERキー)が発生しました。
> さらに、途中で既存セルを通過してから、空白セル上で[ENTERキー]を押すと
> 1つ下のセルが編集モードになるという現象も発生しました。

上記の文は、[No.4の回答]と[No.5の回答]で書いていただいたマクロのみを
私自身の手は加えずに適応した時の結果です。
具体的には[No.4の回答]で書いていただいたマクロのうち、
[No.5の回答]で書いていただいた部分のみ(MyEdit)を修正したものです。

以上、補足の補足です。

何度もお手数をおかけしてすみませんでした。

Excelの操作性が抜群に向上し、
また、マクロにも初めて触れることができました。
今までは[操作を短縮したり自動化するモノ]程度の認識でしたが
マクロも知恵と工夫でナンデモできるプログラム言語なんだなと実感した次第です。

大変長きに渡り回答を頂き、誠にありがとうございます。

お礼日時:2006/09/06 19:29

こんばんは。

Wendy02です。

>If ActiveCell.HasFormula Or Not ActiveCell.Value <> "" Then
>  ↓
>○If ActiveCell.HasFormula Or ActiveCell.Value <> "" Then

それは、完全なミスです。本来は、もうひとつ、条件式があったのを抜いたために、そのようなコードになってしまいました。それは、本来は、配列数式を排除するために、一行の中で、HasArray プロパティを取ろうとしたのです。しかし、それを加えても首尾に終わってしまいました。もうひとつ、別の条件式しないといけないのでした。

○が正しいです。すみません。

>空白の何も入力されていないセル上で
>[編集モードにする]のと[1つ下のセルに移動]のとドッチの方が便利か自分でも迷っています。

それについては、以下のようにすればよいかなって思います。あまり変化を感じないです。他の表計算のように、別なコマンドで、数式を入れなくてはならない、というなら別ですが、Excelの場合は、=, +, - や数字を入れれば、入力モードになるので、あまり必要性はないように思います。


Sub MyEdit()
'Enterキーの再設定
On Error GoTo ErrHandler
If ActiveCell.HasFormula Or ActiveCell.Value <> "" Then
  Call SetOffkey
  Application.SendKeys "{F2}"
ElseIf ActiveCell.Value = "" Then  '変更箇所
 Application.SendKeys "{F2}" '変更箇所
 MoveDirections
End If
Exit Sub

ErrHandler:
  Application.SendKeys "{F2}"
  Call SetOffkey
End Sub


#2 のお礼の中で、
>なんとなく敷居が高い気がして、これまでマクロを使ってこなかったので全然知りませんでした。お恥ずかしい。。

macadさんは、良く、私のこのようなコードをポイントを押さえて読めますね。マクロを書かなくても、才能があるのですね。私は、最近、特にそういう人の才能がうらやましく思います。たぶん、そういう人は、語学も出来ることが多いようです。

この回答への補足

再修正ありがとうございます。

プログラム言語はPerlをかじったコトがあります。
なので条件式とかは理解できるのですが
それ以外の部分はネットで検索、また検索の繰り返しです。
あと語学はけっこう悲惨ですよ(笑・・えない(^_^;

では結果報告です。
再修正したところ残念ながら
空白セル上で[ENTERキー]を押しても変わらず下のセルに移動するのみでした。
また今まで気付かなかったのですが、
矢印キーでセルを移動していくとき、途中で既存セル(数式の入力されているセル)を通過してから、
空白セルに直接入力すると副産物(余分に必要なENTERキー)が発生しました。
さらに、途中で既存セルを通過してから、空白セル上で[ENTERキー]を押すと
1つ下のセルが編集モードになるという現象も発生しました。
以上が今回の結果です。

教えていただいたマクロを見比べたり
自分なりに書き換えて試行錯誤してみたところ、

'*********************************************
'------------------------------------------------
'クラスモジュール(Class1)
'Option Explicit
Public WithEvents App As Application

Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)
 Application.EnableEvents = False
 Application.SendKeys "{ESC}"
 Application.EnableEvents = True
End Sub

Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
 Application.EnableEvents = False
 If Target.Value <> "" Then
  Call SetKey
Else  '■追加箇所■
Call SetOffkey  '■追加箇所■
 End If
 Application.EnableEvents = True
End Sub
'------------------------------------------------

まず上記のようにクラスモジュールを変更すると
既存セル通過後の空白セルでの現象をクリアでき
 空白セル上で直接入力→編集モードになり、入力後は1回のENTERで下のセルに移動
 空白セル上で[ENTER] →編集モードにはならず下のセルに移動
 既存セル上で[ENTER] →編集モードになり、入力後は1回のENTERで下のセルに移動
という仕様になりました。
'************************************************


'************************************************
'------------------------------------------------
'クラスモジュール(Class1)
'Option Explicit
Public WithEvents App As Application

Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)
 Application.EnableEvents = False
 Application.SendKeys "{ESC}"
 Application.EnableEvents = True
End Sub

Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
 Application.EnableEvents = False
' If Target.Value <> "" Then '■変更箇所(コメントアウト)■
  Call SetKey
' End If ' '■変更箇所(コメントアウト)■
 Application.EnableEvents = True
End Sub
'------------------------------------------------

'------------------------------------------------
'標準モジュール(一部分)
Sub MyEdit()
'Enterキーの再設定
On Error GoTo ErrHandler
If ActiveCell.HasFormula Or ActiveCell.Value <> "" Then
  Call SetOffkey
  Application.SendKeys "{F2}"
ElseIf ActiveCell.Value = "" Then  '変更箇所
  Call SetOffkey '■追加箇所■
 Application.SendKeys "{F2}" '変更箇所
' MoveDirections '■変更箇所(コメントアウト)■
End If
Exit Sub

ErrHandler:
  Application.SendKeys "{F2}"
  Call SetOffkey
End Sub
'------------------------------------------------

また、上記のようにクラスモジュールと標準モジュールを書き換えると、
 空白セル上で直接入力→編集モードになり、入力後は2回のENTERで下のセルに移動(例の副産物)
 空白セル上で[ENTER] →編集モードになり、入力後は1回のENTERで下のセルに移動
 既存セル上で[ENTER] →編集モードになり、入力後は1回のENTERで下のセルに移動
という仕様になりました。
'*************************************************


理想としては、
 空白セル上で直接入力→編集モードになり、入力後は1回のENTERで下のセルに移動
 空白セル上で[ENTER] →編集モードになり、入力後は1回のENTERで下のセルに移動
 既存セル上で[ENTER] →編集モードになり、入力後は1回のENTERで下のセルに移動
のような仕様になると完全にOpenOffice.org Calcの操作感が再現できるのですが、
さすがに難しいですね・・・。

補足日時:2006/09/06 14:05
    • good
    • 0

こんばんは。

Wendy02です。

あれから手直しをして、しばらく様子を見てみました。これでどうでしょうか?
新規入力の際に、Enter を入れて確定した後、入力モードは閉じますが、カーソルは移動しません。もう一度、Enter を入れると、次に進みます。

このマクロの問題点は、配列数式に対して、配列確定を解除してしまう問題があります。
おそらく、他にも配列領域設定をされたところでは、エラーを出してしまうと思います。
(たぶん、その問題は、解決するはずです。)

エラーを出すと、現在では、マクロを解除してしまいます。また、セルを移動すれば、マクロは再設定されます。

もうひとつは、セルの移動を用いたマクロに関しては、間違いなく誤動作します。(これも解決は可能性あり)また、複雑なマクロに対しても、どう影響をするかは分かりません。

今は、そこまでは手が回っていません。これは、なかなか、長く時間が掛かりそうな気がします。

今の段階では、SetKey とSetOffkey をトグルにしたボタンに取り付ければ、良いような気がします。
なんといっても、これは仕様に関わる、変更マクロですので、あらゆる問題に対して、装備しないといけないので、通常のマクロとは、桁違いに難しいです。

それでも、一定の場所で使う分なら、支障はないはずです。


'------------------------------------------------
'クラスモジュール(Class1)
'Option Explicit
Public WithEvents App As Application

Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)
 Application.EnableEvents = False
 Application.SendKeys "{ESC}"
 Application.EnableEvents = True
End Sub

Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
 Application.EnableEvents = False
 If Target.Value <> "" Then
  Call SetKey
 End If
 Application.EnableEvents = True
End Sub

'------------------------------------------------
'標準モジュール
'Option Explicit
Public myClass As New Class1
Public intDrc As Integer
Public Enum MRD
  MR = xlToRight&
  MU = xlUp&
  ML = xlToLeft&
  MD = xlDown&
End Enum
Sub Auto_Open()
 Set myClass.App = Application
 SetKey
End Sub
Sub SetKey()
 'キーの設定
 Application.OnKey "{Enter}", "myEdit"
 Application.OnKey "~", "myEdit"
 Application.EnableEvents = True
End Sub
Sub MyEdit()
'Enterキーの再設定
On Error GoTo ErrHandler
If ActiveCell.HasFormula Or Not ActiveCell.Value <> "" Then
  Call SetOffkey
  Application.SendKeys "{F2}"
Else
 MoveDirections
End If
Exit Sub

ErrHandler:
  Application.SendKeys "{F2}"
  Call SetOffkey
End Sub
Sub MoveDirections()

On Error Resume Next
 intDrc = Application.MoveAfterReturnDirection
  Select Case intDrc
   Case MRD.MR: ActiveCell.Offset(, 1).Select
   Case MRD.MU: ActiveCell.Offset(-1).Select
   Case MRD.ML: ActiveCell.Offset(, -1).Select
   Case MRD.MD: ActiveCell.Offset(1).Select
  End Select
  On Error GoTo 0
End Sub

Sub SetOffkey()
 'キーの設定解除
 Application.OnKey "{Enter}"
 Application.OnKey "~"
End Sub
    • good
    • 0
この回答へのお礼

修正ありがとうございます♪

修正していただいたマクロを試したところ、
見事、前回の副産物(余分に必要なENTERキー)は解消しました。
新規で数式を入力してもスムーズに下のセルに移れます。
他のマクロによる誤動作も、マクロ初体験の私には
今のところ他のマクロ自体が存在しないので問題なさそうです。

ただ、既に数式の入っているセルを編集しようと[ENTERキー]を押しても
なぜか下のセルに移動するだけで、編集できませんでした。

そこで、
If ActiveCell.HasFormula Or Not ActiveCell.Value <> "" Then
  ↓
If ActiveCell.HasFormula Or ActiveCell.Value <> "" Then
のように、書き換えたところ修正前のように編集できるようになりました。
この勝手な書き換えで問題ないか不安です( ;^^)ヘ..

あと、空白の何も入力されていないセル上で[ENTERキー]を押したときの動作について、
[編集モードにする]のと[1つ下のセルに移動]のとドッチの方が便利か自分でも迷っています。
空白の何も入力されていないセル上で[ENTERキー]を押した時も
[編集モードにする]場合は、ドコを書き換えればいいのでしょうか。

お礼日時:2006/09/05 21:58

こんにちは。

Wendy02です。返事が遅くなってすみません。

>なんとなく敷居が高い気がして、これまでマクロを使ってこなかったので

言い出した私も、このマクロは敷居が高いのですね。毎日、数個、年間で500近くのマクロを書いていても、いつも原付の人が、二種免許でお客さんを乗せるぐらいの差があります^^;。
年に1度ぐらいしか書かないマクロです。(=今年初めて)

ですから、これはまずいなって思ったら、すぐさま、降車してくださいね。

 仕様としては、#2 で書いていた通りで、空白(Empty)ではないセル、または数式のセルに対しては、Enter を押すと、F2 キーが発生する、というものになります。しかし、新規で数式を入れた後に、2回、Enter キーを入れない、解放されない、という副産物があります。

まあ、使わないで、眺めて、ここはどうとか、こうとか解析していただいてもよいです。考え方が分かれば、また、それも勉強にもなりますからね。今のところ、これは、Excel 2003 だけでしか、検査しておりません。たぶん、大丈夫だと思います。

なお登録場所は、個人用マクロブック(Personal.xls)です。貼り付けが終わったら、出来れば、プロジェクトのプロパティで、パスワード・ロックしたほうが、後々、開いていじってしまった、などということがなくなります。一旦、Excelを終了して、再度立ち上げれば、新規ブックでも同じように設定されています。

'----------------------------------------------------------------
'挿入-クラスモジュール
'Class1
Public WithEvents App As Application
Private Sub App_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
 Call Setkey
End Sub

'----------------------------------------------------------------

'挿入-標準モジュール
'標準モジュール
'Option Explicit
Public myClass As New Class1
Private Enum MRD
  MR = xlToRight&
  MU = xlUp&
  ML = xlToLeft&
  MD = xlDown&
End Enum
Sub Auto_Open()
 Set myClass.App = Application
End Sub
Sub Setkey()
 'キーの設定
 Application.OnKey "{Enter}", "myEdit"
 Application.OnKey "~", "myEdit"

End Sub
Sub MyEdit()
'Enterキーの再設定
On Error GoTo ErrHandler
If ActiveCell.HasFormula Or ActiveCell.Value <> "" Then
  Application.SendKeys "{F2}"
  Call SetOffkey
  Exit Sub
End If
  On Error Resume Next
  Select Case Application.MoveAfterReturnDirection
   Case MRD.MR: ActiveCell.Offset(, 1).Select
   Case MRD.MU: ActiveCell.Offset(-1).Select
   Case MRD.ML: ActiveCell.Offset(, -1).Select
   Case MRD.MD: ActiveCell.Offset(1).Select
  End Select
  On Error GoTo 0
Exit Sub
 
ErrHandler:
  Application.SendKeys "{F2}"
  Call SetOffkey
End Sub
Sub SetOffkey()
 'キーの設定解除
 Application.OnKey "{Enter}"
 Application.OnKey "~"
End Sub

この回答への補足

マクロ作成、ありがとうございます。

ENTERキーで再編集できるようになってExcel2000も、とても操作しやすくなりました。
また個人用マクロブックへの登録のおかげで
起動時にいちいち「マクロを有効にする」を選択しなくていいので快適ですね。
実は、個人用マクロブックというもの自体、今まで知りませんでした。

ただ、やはりというか、、副産物がなかなか くせ者ですね(^_^;)
ENTERキー1回分でも、今までの慣れのせいで違和感が大きいです。

この副産物を修正できないものかと
新規入力時と編集時で動作(ENTERキーを押す回数)が違うのに着目して
この2つの判定をしていそうな

If ActiveCell.HasFormula Or ActiveCell.Value <> "" Then
  Application.SendKeys "{F2}"
  Call SetOffkey
  Exit Sub
End If

を、

'If ActiveCell.HasFormula Or ActiveCell.Value <> "" Then
  Application.SendKeys "{F2}"
  Call SetOffkey
  Exit Sub
'End If

のようにコメントアウトしたのですが、
副産物は変わりませんでした。。
やはり、こんな簡単な問題じゃないんですね・・。浅はかでした。。

できれば、どうして新規入力時に2回のENTERキーが必要になってしまうのか教えてほしいです。

また、上記のようにコメントアウトしていても支障はないでしょうか?

補足日時:2006/09/03 20:41
    • good
    • 0

こんにちは。



>できれば、Excelでも、OpenOffice.org Calcと同じように
>[ENTER]キーでセル内の再編集をしたいのですが
>キーの割り当てを替えたりできないのでしょうか?

私個人は、なるべく、他人のPCをいじるときに、まごつかないように、キーの設定は替えないようにはしていますが、やってみると、なるほどね、おっしゃるとおり、確かに、便利ですね。考えたこともありませんでした。

ただ、個別のブックにキーを設定するなら、それほど難しくはありませんが、グローバルにマクロを適用するには、どうやらApplicationに対する クラスイベントを設けなくてはならないようです。出し惜しみして申し訳ありませんが、それでもよければ、作ってみます。なお、バージョンには関係ありません。

仕様としては、空白(Empty)ではないセル、または数式のセルに対しては、Enter を押すと、F2 キーが発生する、というものになります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

マクロというのは、そのような事までできるのですか・・。
なんとなく敷居が高い気がして、これまでマクロを使ってこなかったので
全然知りませんでした。お恥ずかしい。。

もしWendy02さんがよろしければ、お手数ですが引き続きご教授いただけますでしょうか。
よろしくお願いします。

お礼日時:2006/09/02 14:07

キーのカスタマイズの有無については解りません。



セルの再編集キーは旧バージョンからずっと F2です。
これが変わったらずっと使っている人が逆に戸惑っちゃうと思います。

Windows95以降、表計算ソフトの世間一般でのデファクトスタンダードはExcelと言っても過言では無いでしょう。
現状では「長いものには巻かれろ」ってところかと、、、
    • good
    • 0
この回答へのお礼

私もExcelしか使ったことのなかった頃は、
気にもならなかったのですが、
OpenOffice.org Calcを使ってみて、
[ENTER]キーでの操作のしやすさに慣れてしまうと
Excelの[F2]キーが非常に煩わしく感じてしまいます。

なら、OpenOffice.org Calcだけを使えばいいのにって感じですが、
何にでも、メリット・デメリットはあるもので、
OpenOffice.org Calcの場合、ソフトの起動が尋常じゃなく遅いのがネックです・・。

お礼日時:2006/09/02 12:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!