• ベストアンサー

ExcelVBAでセルを編集状態にする方法

VBAを使ってセルを編集状態にするコードについてお聞きします。 Range("A1").Selectでセルを選択し、 Range("A1").value = "***"のように 文字を入力すると元々入力してあった文字が消えてしまいます。 入力してある文字列の文末を選択し、 次の文字列を入力するにはどのようにすればよいのでしょうか。 また、セルを編集状態にして、入力文字列の最後の1文字を消す方法を教えてください。 宜しくお願いします。

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

  • ベストアンサー
回答No.3

>セルを編集状態にして、入力文字列の最後の1文字を消す方法を教えてください。 言葉から判断すれば、VBA上ではないと思います。 「編集状態」というのは、セルが「入力待ち状態」の意味ですから、一旦、「編集状態」をオフにしないと、マクロ自体が動かないからです。 >Range("A1").Selectでセルを選択し、 Select は、別に、編集状態にはなっていません。 また、一般的なマクロでは、RangeオブジェクトをSelect をする必要はありません。 以下の場合は、直接、Range("A1") と指定すればよいのです。 '文字を付け足す ActiveCell.Value = ActiveCell.Value & "***" '最後の文字を消す With ActiveCell  If Len(.Value) > 0 Then   .Value = Left(.Value, Len(.Value) - 1)  End If End With 厳密に、「編集状態」=「入力待ち状態」から、編集をするマクロは、理論的にはありえないはずです。最初から、外部のプログラムに渡さないといけないわけですが、やったことはありません。たぶん、他のプログラムで出来るとは思いますが、ここで書いても評価されないでしょう。 単に、手動で入力待ちを解除してから、マクロを稼働させればよいだけなのですから。

di6351
質問者

お礼

ご回答ありがとうございます。 マクロ以外のExcel操作でも、編集状態にした時、他の操作が出来なくなる事はあったのですが、 コードを作るうえでも同じことが言えるのですね。 ActiveCell.Value = ActiveCell.Value & "***"でSelectを使うことなく、 入力する事が出来ました。

その他の回答 (2)

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

文末に追加なら Range("A1").value = Range("A1").value & "***"

di6351
質問者

お礼

ありがとうございます。 セルに続けて入力する文字を直接コードに追加する事が出来ました。 いろいろな単語を追加してみようと思います。

  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

そういう操作はSendkeysで操作することになります。 Sub macro() Range("A1").Select Application.SendKeys "{F2}" ’1文字消す Application.SendKeys "{BS}" End Sub

di6351
質問者

お礼

ご回答ありがとうございます。 SendKeysを使うことで、実際にキーを打った時と同じ動作をさせることが出来るのですね。 その他のFunctionKeyでも動作させる事が出来ました。 いろいろと応用してみようと思います。

関連するQ&A

  • Excelでセルを編集状態にし文末を選択する方法

    セルを編集状態にする方法が分かりません。 セルを選択後、編集状態にし、文末を選択するにはどのようにすればよいのですか。 また、編集状態にした後、そのセルに文字が入力されていたら、 その文字の最後の1文字を削除する方法を教えてください。 宜しくお願いします。

  • エクセルVBAでセル選択

    エクセル2000でリストを作成し、VBAで編集しようとしています。 A列に入力されているコードの先頭に「’」をつけて文字列とするための関数をB2のセルからA列のデータが入力されている最後のセルの隣までコピーしたいと思っています。 A列の最終セルを取得するVBAは分かったのですが、その値をB列の選択範囲として使用する方法がわかりません。 エクセルVBAは全くの初心者です。 どなたか教えてください!

  • Select Case の条件式

    VBAの初心者です。 家計簿の品目に対して値段を自動で入力したいです。 以下のように、Select Case の条件式の指定方法で、 列に入力された文字列の条件に対して、 自動でとなりのセルに入力したいのですが解らなくて困っております。 Sub TEST() ' A列セルの条件(文字列)でとなりのセルに文字列を入れたい Select Case Range("A1").Value 'A1をどうすればいいのでしょうか。 Case "a": Range("列のセルのとなりに入力したい").Value = "リンゴ" Case "o": Range("列のセルのとなりに入力したい").Value = "オレンジ" Case "b": Range("列のセルのとなりに入力したい").Value = "バナナ" Case Else: Range("列のセルのとなりに入力したい").Value = "error" End Select End Sub ご存じの方がおられましたら教えていただけませんでしょうか。 よろしくお願いします。

  • セルに入力された文字列を選択してコピーする方法

    セルに入力された文字列のみをコピーする方法が分かりません。 貼り付け先のセルには既に文字列が入力されており、それに加えてコピーした文字列を貼り付けしたいと考えております。 Range("A1").copyとしたのですが、これではセルそのものがコピーされてしまいます。 F2を押した時のように編集状態にして、文字列を選択し、コピーするにはどのような方法があるのでしょうか。

  • EXCELVBAについて質問です。

    VBAにて、全てのシートを選択しA1セルをアクティブにするコードを作りたいのですが、計算後、表示位置がばらばらになってしまいます。 Sub シートをすべて選択後A1セルへ移動() Worksheets.Select Application.Goto reference:=Range("a1"), scroll:=True Sheets(1).Select Sheets(1).Range("A1").Activate End Sub 上記のコードなのですが、非アクティブシートは移動せず、セルA1へ移動するのはアクティブシートのSheets(1)のみとなります。 ファイルにあるシート全てをA1に移動後ウィンドウもA1に移動するような命令文はあるのでしょうか?

  • Excel VBA 空白セルをチェックする方法

    こんばんは ある選択範囲でどれか1つのセルに空白があった場合 メッセージを表示させたいのですが、 リスト中に入力された範囲のすべてのセルをチェックしたいのです。 どのようにしたら良いのでしょうか。 A1~A3の範囲のみでしたら下記でよいのかな?と考えてみました。 VBA勉強中なのですが、なかなかうまくいきません。お力をお願い致します。 If IsEmpty(Range("a2:d2").Value) Then MsgBox "開始時刻が入力されていません。" Worksheets("Sheet1").Range("a2").Select

  • VBA 表の1つ下のセルを選択する

    EXCEL2003のVBAを使っています。 オートフィルタで抽出させた表があります。 入力されているセルの、1つ下のセルを選択するにはどうしたら良いでしょうか。     A 1  あああ  2  あああ  5  あああ  1行目から19行目までの列の中で、"あああ"だけをオートフィルタで抽出している 10  あああ  14  あああ   16  あああ  20   ※ ←ここを選択したい。 Range("A65536").Select Selection.End(xlUp).Select ActiveCell.Offset(1, 0).Select これだとA17のセルが選択されてしまいます。 表全体の1つ下のセルを選択する方法はあるでしょうか?

  • セルの文字列を取り出して一つのセルに入れる方法

    セルの文字列を取り出して一つのセルに入れる方法 こんにちは。 VBAの初心者のものです。 データ整理をしていたのですが、 次の様な場合、どのようにすればいいでしょうか。 例) 年度別、都道府県別の地震の発生件数のデータがあります。 これで1999年の地震が起こった都道府県を抽出するとします。 1999年の列でオートフィルタをかけ別のシートでまとめようと思います。 各年度でオートフィルタをかけて、次のようにまとめます。 1999年 北海道、宮城県、東京都 2000年 新潟県、静岡県、岡山県、石川県 2001年 福島県、宮城県、千葉県 2002年 愛知県、三重県、京都府 なお、都道府県のところはできれば一つのセルにいれたいと考えています。 1999年の場合なら Range("").value=北海道のセル&"、"& 宮城県のセル &"、"&東京都のセル 各都道府県の行番号が 北海道「1」 宮城県「4」 東京都「13」 ならば、 range("").value = range("A1").value&"、"&range("A4").value&"、"&range("A13").value というようになればいいのですが、 オートフィルタ後に行数をカウントし、次のようなコードにすると、 range("").value = range("A1").value&"、"&range("A2").value&"、"&range("A3").value 1999年 北海道、青森県、岩手県 となりオートフィルタ前の値が返されてしまいます。 このセルをどのように指定したらいいのかわかりません。 もしこれができないのであれば 各列に一つずつ(一つのセルに一つの都道府県)入れていく方法でも構いません。 1999年 北海道 宮城県 東京都  というような感じです。 よろしくお願いします。

  • VBAの記述の仕方で

    エクセルのVBAで、A1に Range("B1").Select という文字列を入力させたいのですが、以下の記述だといずれもエラーになってしまいます。 Cells(1, 1).Value = Range("B1").Select   Cells(1, 1).Value = "Range("B1").Select"   どこをどう直せばいいのでしょう?

  • ExcelVBA 選択された列のセルを指定する

    簡単かなと思ったら意外と出来ず、調べても出てこなくて思わぬ苦戦を強いられてしまい、 質問させて頂きます。 列をまるごと選択している状態で、その選択している列のセルを指定するには どうしたらいいでしょうか? とりあえず目的としてはシート1のA列を選択した状態で、 列の先頭(A1)の値をシート2に移す事としております。 以下、エラーになってしまったコードです 列選択でOffsetを使用した為のエラー? Worksheets("sheet2").Cells(1,1).Value = Worksheets("sheet1").Columns(1).Offset(0, 0).Value 選択してない状態でSelectionを使用した為のエラー? Worksheets("sheet2").Cells(1,1).Value = Worksheets("sheet1").Columns(1).Selection(1).Value 上手く動いたコード Application.Goto Worksheets("sheet1").Columns(1) Worksheets("sheet2").Cells(1,1).Value = Selection(1).Value Application.Goto でシート1のA列を指定してからSelectionで一つ目のセルを指定すれば出来ました しかし、大量のデータを扱う時にいちいち範囲選択していたら処理が遅くなると思われますし、 コード自体もスッキリしないのでいまいち納得がいきません。 1行で「Worksheets("sheet1").Columns(1).●●●」と続くメソッドの様な、スッキリできる方法は 無いのでしょうか? どなたかご教授お願いいたします。 当方Excel2003を使用しております。 宜しくお願い致します。

専門家に質問してみよう