• ベストアンサー

特定のセルに文字入力すると左端に「・」を自動表記

エクセル2003を使用しています。 セル”E3~E128”と”I3~I128”の範囲で何か文字を入力すると、入力した文字の左端に自動で「・」を付けるVBAは、どの様にすれば良いのでしょうか。 例としてセルE3に「2015年」と文字を入力すると自動で「・2015年」と表記される感じです。

noname#247334
noname#247334

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 回答No.2です。  前回の回答で提示させて頂いたVBAマクロには、範囲コピー&貼り付けを行う事で値を変更する事に対応していないという短所が存在していましたので改良致しました。  尚、こちらのVBAでは >このVBAで該当するセル範囲の文字を空白表示にした場合「・」の表記を無くし、文字を入力すると再び「・」を表記するVBAはどの様になるのでしょうか? という点にも対応しております。 Private Sub Worksheet_Change(ByVal Target As Range) 'QNo.8945681特定のセルに文字入力すると左端に「・」を自動表記 If Intersect(Target, Range("E3:E128")) Is Nothing And Intersect(Target, Range("I3:I128")) Is Nothing Then GoTo label0 Application.EnableEvents = False Dim TargetFC, TargetLC, ColumnNo As String Dim TargetFR, TargetLR, RangeFR, RangeLR As Long Dim MyRange, r As Range TargetFC = Target.Column TargetLC = Target.Column + Target.Columns.Count - 1 TargetFR = Target.Row TargetLR = Target.Row + Target.Rows.Count - 1 If TargetFR <= 128 And TargetLR >= 3 Then RangeFR = 3 If TargetLR > 3 Then RangeFR = TargetFR RangeLR = 128 If TargetLR < 128 Then RangeLR = TargetLR ColumnNo = "E" GoSub label9: ColumnNo = "I" GoSub label9: End If Application.EnableEvents = True GoTo label0 label9: Set MyRange = Range(ColumnNo & RangeFR & ":" & ColumnNo & RangeLR) If TargetFC <= MyRange.Column And TargetLC >= MyRange.Column Then For Each r In MyRange If r.Value <> "" And Left(r.Value, 1) <> "・" Then r.Value = "・" & r.Value Next r End If Return label0: End Sub

noname#247334
質問者

お礼

この度は素晴らしい回答ありがとうございましたm(__)m 僕の求めるVBAを回答して頂き、非常に助かりました。 機会があればまた宜しくお願いします。

その他の回答 (3)

回答No.3

こんにちは。お邪魔します。 Excelのセルについては常に 「値」と「表示文字列」、2つのことを考えないといけません。 「値」にも様々種類があって、 「文字列値」や「日付値」「時刻値」、その他、 これらの「値」とセルに設定されている[表示形式]と相まって 「表示文字列」が確定します。 例えば、 "2015年"という文字列を入力して確定した場合は、  これは日付としては無効なデータである為、文字列値だと判断され、  [表示形式]は[標準]のまま文字列値として、左詰めで表示されます。 例えば、 "2015年3月"や"2015年3月31日"という文字列を入力して確定した場合は、  これは日付として有効なデータである為、日付値だと判断され、  [表示形式]は入力した文字列を参照した上で[日付]や日付を表す[ユーザー定義]  に自動的に変換され、文字列値ではないので右詰めで表示されます。 少しハッキリしないのは、 1・E3:E128,I3:I128の範囲に入力するのは、文字列値なのか日付時刻値なのか? 2・「左端に自動で「・」を付ける」のは    「値」を変えたいのか「表示文字列」([表示形式])を変えたいのか? 3・そもそものE3:E128,I3:I128の範囲の[表示形式]は何("標準"or?)なのか? という点です。 察するに、 「値」を変える事なく、 [表示形式]のみの操作で「表示文字列」の「左端に自動で「・」を付ける」 ということをなさりたいのかと。 1・→数値以外、文字列値や日付・時刻値。 2・→「表示文字列」の「左端に自動で「・」を付ける」 3・→[表示形式]は"標準" という条件で書いてみました。 もしも、こちらの理解と、そちらの求めるものに相違がある場合は、 是非、補足欄に具体的な説明を書いてみて下さい。 /// 仕様 /// /// 一度値を確定すると、その際に決定する[表示形式]が固定されるので、   再度入力をした際にも踏襲されます。   再度入力をする時、他の[表示形式]に振り替えたい場合には、   一旦、セルを消去してから入力確定し直すような仕様になります。   既存のデータを上書きする場合も一度セルを消去してから入力確定   すれば、正しく機能するようになります。 /// コピペなどで、複数セル範囲の値を同時に変更した場合にも機能します。 /// 結合セルにも対応します。 以下、シートモジュール Private Sub Worksheet_Change(ByVal Target As Range) ' w8945681 Dim rTgt As Range, c As Range, v   Set rTgt = Intersect(Target, Range("E3:E128,I3:I128")) ' セル範囲 要指定   If rTgt Is Nothing Then Exit Sub   For Each c In rTgt     With c(1)       v = .Value       If .Row = c.MergeArea(1).Row And c.Column = c.MergeArea(1).Column Then         Select Case VarType(v)         ' ' 値が消去された時、表示形式を基本設定に戻す         Case vbEmpty           c.NumberFormatLocal = "G/標準" ' 表示形式基本設定 要指定         ' ' 文字列値が入力された時、表示形式を "・"&文字列 に指定         Case vbString           c.NumberFormatLocal = "・@"         ' ' 論理値が入力された時、表示形式を "・"&論理値 に指定 '        Case vbBoolean '          c.NumberFormatLocal = """・TRUE"";;""・FALSE"""         Case Else         ' ' 日付・時刻値が入力された時、表示形式を "・"&日付・時刻値 に指定           If Me.Evaluate("CELL(""format""," & c.Address & ")") Like "D#" Then             c.NumberFormatLocal = "・" & c.NumberFormatLocal           End If         End Select       End If     End With   Next End Sub

noname#247334
質問者

お礼

この度は回答して頂きありがとうございましたm(__)m VBAを丁寧に解説して頂き、非常に勉強になりました。 また機会があれば宜しくお願いします!!

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 VBAはVBAでも、標準モジュールに書き込む一般的なVBAではなく、ワークシートのイベントの方に書き込むChangeプロシージャを使います。  まず、[開発]タブの「コード」グループの中にある[Visual Basic]ボタンをクリックして、VBEのプロジェクト ウィンドウを開いて下さい。  そして、ウィンドウの左側にある「プロジェクト-VBEProject」に並んでいるシートの中から、御質問の処理を行うマクロを設定したいシートをダブルクリックして下さい。  その上で、ウィンドウの右側にあるVBAの構文を書き込むための欄に、以下のVBAを書き込んで下さい。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("E3:E128")) Is Nothing And Intersect(Target, Range("I3:I128")) Is Nothing Then Exit Sub Application.EnableEvents = False Target.Value = "・" & Target.Value Application.EnableEvents = True End Sub 【参考URL】  よねさんのWordとExcelの小部屋 > Excel(エクセル) VBA入門 > ワークシートのイベント > Change   http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_event.html#change

noname#247334
質問者

お礼

この度は回答して頂きありがとうございましたm(__)m 凄く応用的なVBAで凄いと思いました!! また機会があれば宜しくお願いします。

noname#247334
質問者

補足

すいません、一つ抜けていました。 このVBAで該当するセル範囲の文字を空白表示にした場合「・」の表記を無くし、文字を入力すると再び「・」を表記するVBAはどの様になるのでしょうか?

noname#206655
noname#206655
回答No.1

LiberCALC でも、 ・@ で動きました。

noname#247334
質問者

お礼

この度は僕の為に時間を割いて頂き回答して下さりありがとうございました。

関連するQ&A

  • 特定のセルに数字を入力すると特定の文字を表記VBA

    (1)セルG9には「ドラム缶   缶」と表記されています。ここに数字のみを入力すると「ドラム缶  〇 缶(〇は先ほど入力した数字)を自動表記し、「ドラム缶 〇  缶」と表記された文字をデリートボタン等で消したら、再び「ドラム缶   缶」と自動表記するVBAはありますか? セルF9には、G9の「ドラム缶 〇  缶」の〇の数字に200を掛けて、「○○○L」と自動表記させたいのですが、どの様にVBAを書けば良いですか?G9が「ドラム缶   缶」と数字が表記されている時はF9も「   L」と空白表記させたいです。 (2)セルG11には「20L缶   缶」と表記されています。ここに数字のみを入力すると「20L缶  〇 缶(〇は先ほど入力した数字)を自動表記し、「20L缶 〇  缶」と表記された文字をデリートボタン等で消したら、再び「20L缶   缶」と自動表記するVBAはありますか? セルF11には、G11の「20L缶 〇  缶」の〇の数字と一緒の数字「○L」と自動表記させたいのですが、どの様にVBAを書けば良いですか?G11が「20L缶    缶」と数字が表記されていない時はF11も「   L」と空白表記させたいです。 (3)セルG29には「        L」と表記されています。ここに数字を入力すると「   〇     L(〇は先ほど入力した数字)を自動表記し、「    〇    L」と表記された文字をデリートボタン等で消したら、再び「        L」と自動表記するVBAはありますか? セルF29には、G29の「        L」と全く一緒に連動した文字(ここでは「        L」)を自動表記させたいのですが、VBAではどの様にすれば良いですか?

  • 指定されたセルに文字を入力したら自動で大文字VBA

    エクセルVBAの質問です。 セルD10とD25に小文字の英数字を入力したら自動で大文字の英数字にするVBAはどの様にすれば宜しいでしょうか? (例) hhc-345→HHC-345     kUxR-678→KUXR-678     

  • 特定のセルに文字が入力されているページの印刷VBA

    エクセルVBAで質問が2つあります。 エクセルシートは改ページプレビューでページ毎の印刷範囲が見えるようになっています。 (1)コマンドボックスを押したらE4~E963又はB4~B963のセルに文字が入力されているページのみ印刷するVBAはどの様にすれば宜しいでしょうか? (2)コマンドボックスを押すとインプットボックスが表示され、その中に数字を入力したら、その入力されたページのみを印刷するVBAはどの様にすれば宜しいでしょうか?

  • 空白のセルの場合は同じ文字を入力するVBA

    (1)セルL5・L6・L23・L24・L25があります。 上記で述べたセル範囲の文字が空白表示の場合、上記範囲の何処かに文字を入力したら、入力した文字と一緒の文字が自動で入力させます。(例えばL24に「1」と入力した場合はL5・L6・L24・L25に「1」と自動で入力) そして上記で述べたセル範囲の何処か1つでも文字が入っていると、文字が自動で入力されない(例えばL5に「3」と入力されている状態でL25に「8」と入力してもL6・L23・L24の文字は何も変化しない)VBAはどの様にすれば良いでしょうか? (2)セルM5・M6・M23・M24・M25があります。 上記で述べたセル範囲の文字が空白表示の場合、上記範囲の何処かに文字を入力したら、入力した文字と一緒の文字が自動で入力させます。(例えばM24に「1」と入力した場合はM5・M6・M24・M25に「1」と自動で入力) そして上記で述べたセル範囲の何処か1つでも文字が入っていると、文字が自動で入力されない(例えばM5に「3」と入力されている状態でM25に「8」と入力してもM6・M23・M24の文字は何も変化しない)VBAはどの様にすれば良いでしょうか? (3)セルL8~L10の範囲があります。 上記で述べたセル範囲の文字が空白表示の場合、上記範囲の何処かに文字を入力したら、文字が自動で入力させます。(例えばL9に「1」と入力した場合はL8・L10に「1」と自動で入力) 上記で述べたセル範囲の何処かに既に文字が入っていると、文字が自動で入力されない(例えばL10に「3」と入力されている状態でL8に「8」と入力してもL9の文字は何も変化しない)VBAはどの様にすれば良いでしょうか?

  • エクセルのマクロで入力文字を一文字ずつ並んだセルに入れる

    エクセルマクロ超初心者です。 エクセルVBAでユーザーフォームを作成しました。 テキストボックスに入力した文字列を「登録」ボタン押下後、エクセルシートのセルに一文字づつ入るようにするにはどうすれば良いでしょうか? 例えばテキストボックスに「kohiro」と入力するとエクセルのsheet1のA1「k」、B1「o」、C1「h」、D1「i」、E1「r」、F1「o」となるようにしたいのです。入力する文字数は0~30文字までで、その都度長さは変わります。どうやって、文字をばらせばいいのか、またどうやって可変長の文字列を指定したセルに入力すればいいのかわかりません。どうかよろしくお願いいたします。

  • セルを空白にしたら「0(ゼロ)」を表記させる方法

    セルを空白にしたら「0(ゼロ)」を表記させる方法の質問です。 「F5~F38」「H5~H38」「J5~J38」「L5~L38」「N5~N38」「P5~P38」「R5~R38」「D6~D38」「E5~E36」「T5~T36」「U5~U38」の範囲のセルに数字や文字を入力します。 上記範囲のセルに入力した数字や文字を消して、空白表示にした場合は自動で「0(ゼロ)」と表記させる方法はあるのでしょうか?

  • セルに入力されている文字をくっつけたい。

    エクセル2010です。 よろしくおねがいします。 セルE15~E23に入力されている文字を ひとつにくっつけて 表示したいんですが・・・ 全部文字が入力されているときも あるのですが 入力がないときまあります。 その場合は D1には 何も表示しないようにしたいのです。 例えば E15にA       E16にB      E17にC  E18~E23は入力なしとして D1に ※文字です。→A・B・C と 一つのセルに表示させるには どういう関数になりますでしょうか? よろしくお願いします。

  • セルに特定の文字を入力すると

    お世話になります。 EXCEL2002で契約書管理をしています。 次回更新日を自動計算できるようにしてあるのですが、 別セルに「解約」、「休止」と入力した場合、次回更新日は計算されずに表記もされない方法を教えてください。 お手数ですが、よろしくお願いいたします。

  • Excel;特定の文字を含むセルを書き出す方法

    お世話になります。 あるExcelシートの2列×300行ぐらいの範囲のセル内に 文字が入っています。 セル内(例A23idokensi)に特定の文字(例:A23)を含んでいたら、 もしくはセルを抜き出す方法はあるでしょうか? やりたいことは、アトランダムに入力されているところから、 特定の文字を含んだセルだけ取り出して内容とセルの個数を 数えることです。

  • あるセルに特定の文字列を打つと、他のセルに決められた文字が自動入力するように

    お世話になります。 表題の通り、 あるセルに特定の文字列を打つと、 他のセルにあらかじめ決められた文字が自動入力するようにしたいです。 具体的に言うと、 (1)セル(A,1)に「キリン」と打ち込むと    A   B   C   D 1 キリン 2 3 4 (2)1列目の B,C,Dに予め決めておいた文字が入力されるようにしたい    A   B   C   D 1 キリン 首  長い  アフリカ 2 3 4 のです。 エクセルで可能でしょうか? 詳しい方よろしくお願いいたします!

専門家に質問してみよう