特定のセルの文字入力を半角英字の大文字にする方法

このQ&Aのポイント
  • セルB13~BK13に文字を入力する際に、全角小文字の英字や数字、半角小文字の英字や数字、全角大文字の英字や数字で入力した場合でも、自動で半角大文字の英字と数字に自動変換して、英字と数字の間に半角で1角の空欄を自動でしてくれるVBAなどの方法はありますか?
  • また、この際にどの様な形式の平仮名やカタカナや‐(ハイフン)が入力された場合は「平仮名やカタカナや‐は入力できません。」とエラーメッセージを表示させたいです。
  • 例えば「ggg 501(半角小文字の英字)」や「ggg 501(全角小文字の英字)」や「GGG 501(全角大文字の英字)」と入力した場合でも自動で「GGG 501(半角大文字の英字)」と自動変換され英字と数字の間に1角の半角で空白が自動で設定してくれる感じです。また、「じーじーじ 501(平仮名が含まれる)」や「ジージージー 501(カタカナが含まれる)」や「GGG-501(ハイフンが含まれる)」など入力させたらエラーメッセージを表示させます。
回答を見る
  • ベストアンサー

特定のセルの文字入力を半角英字の大文字にする方法

セルB13~BK13に文字を入力する際に、全角小文字の英字や数字、半角小文字の英字や数字、全角大文字の英字や数字で入力した場合でも、自動で半角大文字の英字と数字に自動変換して、英字と数字の間に半角で1角の空欄を自動でしてくれる様にするVBAなどの方法はありますか? この際にどの様な形式の平仮名やカタカナや‐(ハイフン)が入力された場合は「平仮名やカタカナや‐は入力できません。」とエラーメッセージを表示させたいです。 ※例えば「ggg 501(半角小文字の英字)」や「ggg 501(全角小文字の英字)」や「GGG 501(全角大文字の英字)」と入力した場合でも自動で「GGG 501(半角大文字の英字)」と自動変換され英字と数字の間に1角の半角で空白が自動で設定してくれる感じです。 ※「じーじーじ 501(平仮名が含まれる)」や「ジージージー 501(カタカナが含まれる)」や「GGG-501(ハイフンが含まれる)」など入力させたらエラーメッセージを表示させます。 ※ちなみにこのシートには ''******************************************************************************* ' セル選択によるイベント '******************************************************************************* Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'カレンダーフォームのVBA If Intersect(Target, Range("BP1")) Is Nothing Then Exit Sub If MsgBox("日付を記入するためカレンダーを表示させます、よろしいでしょうか?", vbYesNo) = vbNo Then Exit Sub Else End If ' カレンダーフォームを起動する Call ShowCalendarFromRange2(Target) Dim ans As String ans = InputBox("指定した時間(〇〇:〇〇)を入力して下さい。") If ans = "" Then Exit Sub Range("CO14").Value = ans ans = InputBox("先ほど指定した時刻からの時間間隔(例えば5分なら「5」で1時間なら「60」を入力して下さい。 ") If ans = "" Then Exit Sub For Each c In Range("CO15:CO37") c.Value = Format(c.Offset(-1).Value + TimeValue((ans \ 60) & ":" & (ans Mod 60)), "hh:mm") Next End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("A3,A4,A5,A6,A7,A8,A9,A10,A11,A42,A43,A44,A45,A46,A47,A48,A49,A50,A81,A82,A83,A84,A85,A86,A87,A88,A89,A120,A121,A122,A123,A124,A125,A126,A127,A128,A159,A160,A161,A162,A163,A164,A165,A166,A167,A198,A199,A200,A201,A202,A203,A204,A205,A206,A237:A245")) Is Nothing Then Exit Sub Cancel = True With Target(1) ' If .Value = "" Then .Value = Now() .NumberFormatLocal = "h:mm" Else .Value = "" End If End With End Sub のVBAが組み込まれています。

noname#247334
noname#247334

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

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

空白だったら何もしないで処理終了 を書き加えればいいですよ。

noname#247334
質問者

お礼

ありがとうございました。 参考になりました。

その他の回答 (2)

回答No.2

> VBAの選択範囲を間違えていました。B13~CM14の範囲で、セルが結合した範囲もあり(B13~D14までなど)セルが結合した範囲もエラーチェックでクリアしなければいけません。 その辺りはご自身で応用なさってください。 ダブルクリック前のロジックで対象範囲を指定なさっているようですから その応用で充分に事足りるはずです。 それに、要件後付けをし出すとキリが無いですから。 > エラーデータチェックのMsg boxが出現した後に文字がクリアされますが、その後に文字を入力すると半角大文字にするVBAが作動しません。 失礼、1行抜けていました。 そんなわけで、改めて。           MsgBox ("指定外文字  " & "" & Mid(myStr, i, 1) & "")           Target.Select           '入れ替え           Selection.ClearContents      ' 少し修正           Application.EnableEvents = True   ' 追加           Exit Sub

noname#247334
質問者

お礼

ありがとうございました。 参考になりました。

noname#247334
質問者

補足

質問に答えて頂き誠にありがとうございます。 色々と勉強になりました。 実際にVBAを作動させてみて文字を入力したらしっかり自動変換されています。 しかし自動変換された文字をデリートして空白にすると「型が一致しません。」と表記され「Target = StrConv(Target, vbUpperCase + vbNarrow)」の部分が黄色く色が塗られます。 どの様に対応すれば宜しいでしょうか?

回答No.1

とりあえず。 「半角大文字にする」だけなら Private Sub Worksheet_Change(ByVal Target As Range)   Application.EnableEvents = False   Target = StrConv(Target, vbUpperCase + vbNarrow)   Application.EnableEvents = True End Sub で出来ます。 対象を限定するのなら、質問文中の 「特定のセルがアクティブになったらカレンダーを表示する」 モノを参考に追記してくださいませ。 エラーデータ入力のチェックについては・・ とりあえずアレコレ考えずに 文字コードを1文字ずつチェックする例です。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myAsc As Integer, InSP As Integer, myFlag As Integer Dim myStr As String   Application.EnableEvents = False   Target = StrConv(Target, vbUpperCase + vbNarrow)   myStr = Target.Value   InSP = 0: myFlag = 0   For i = 1 To Len(myStr)     myAsc = Asc(Mid(myStr, i, 1))     If Not (myAsc >= 65 And myAsc <= 90) Then       If Not (myAsc >= 48 And myAsc <= 57) Then         If myAsc = 32 Then           InSP = i         Else           MsgBox ("指定外文字  " & "" & Mid(myStr, i, 1) & "")           Target.ClearContents           Target.Select           Exit Sub         End If       ElseIf myFlag = 0 And InSP = 0 Then         myFlag = i       End If     End If   Next   If myFlag <> 0 Then     Target.Value = Left(myStr, myFlag - 1) & " " & Mid(myStr, myFlag, 99)   End If   Application.EnableEvents = True End Sub そんなに難しいことを書いているつもりも無いので解説は割愛。 ところで、質問の本筋からは逸れてしまうのですが・・ > 英字と数字の間に半角で1角の空欄を自動でしてくれる様にする > 英字と数字の間に1角の半角で空白が自動で設定してくれる 私は「英字と数字の間に半角スペースを自動で入力する」と 読んだのですが、間違いないでしょうか。 出来れば特に「1角」「設定してくれる」について、 解り易い日本語で補足いただけると幸いです。

noname#247334
質問者

お礼

Private Sub Worksheet_Change(ByVal Target As Range) Dim myAsc As Integer, InSP As Integer, myFlag As Integer Dim myStr As String   Application.EnableEvents = False   Target = StrConv(Target, vbUpperCase + vbNarrow)   myStr = Target.Value   InSP = 0: myFlag = 0   For i = 1 To Len(myStr)     myAsc = Asc(Mid(myStr, i, 1))     If Not (myAsc >= 65 And myAsc <= 90) Then       If Not (myAsc >= 48 And myAsc <= 57) Then         If myAsc = 32 Then           InSP = i         Else           MsgBox ("指定外文字  " & "" & Mid(myStr, i, 1) & "")           Target.ClearContents           Target.Select           Exit Sub         End If       ElseIf myFlag = 0 And InSP = 0 Then         myFlag = i       End If     End If   Next   If myFlag <> 0 Then     Target.Value = Left(myStr, myFlag - 1) & " " & Mid(myStr, myFlag, 99)   End If   Application.EnableEvents = True End Sub 補足の部分で書き忘れていました。 VBAの選択範囲を間違えていました。B13~CM14の範囲で、セルが結合した範囲もあり(B13~D14までなど)セルが結合した範囲もエラーチェックでクリアしなければいけません。 またエラーデータチェックのMsg boxが出現した後に文字がクリアされますが、その後に文字を入力すると半角大文字にするVBAが作動しません。

noname#247334
質問者

補足

日本語が伝わりにくくて申し訳ありません。 「英字と数字の間に半角スペースを自動で入力する」で間違いないです。

関連するQ&A

  • ExcelVBA 二つのセルに入力された時の判定

    セルA1とA2両方に値が入力された時、セルA3に文字を入力するマクロを作りたいです。 下記プログラムで試しているのですが、ステップインで見ると最初のIFでTrue判定されてしまいます。 どうすればこの条件を満たすマクロになるのか、教えて頂けないでしょうか。 以上、宜しくお願い致します。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1")) Is Nothing Or Intersect(Target, Range("A2")) Is Nothing Then Exit Sub Else If Range("A1").Value <> "" And Range("A2").Value <> "" Then Range("A3").Value = "入力済み" End If End If End Sub

  • エクセルでセルの入力履歴をコメントで表示させる

    お世話になります エクセルを勉強しているものです。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count <> 1 Then Exit Sub If Target.Value = "" Then Exit Sub If Intersect(Target, Range("A1:A10")) Is Nothing Then Exit Sub myTime = "入力月日・時刻" & Chr(10) & Month(Date) & "月" & Day(Date) & "日" myTime = myTime & Chr(10) & Hour(Time) & ":" & Second(Time) Target.AddComment myTime End Sub を使うとコメント表示になるとあったので挑戦していますが 入力時は問題ないですが、そのセルの入力を削除してまた入力するとエラーになります。 これを回避する方法はありますか? 

  • VBAで特定の文字に赤色を追加

    いつもお世話になります。 WINDOWS XP EXCELL2003 です。 「公 、有」という2文字に赤色の文字を条件書式で対応しようとしましたがすでに3通りを 設定しているため下記のマクロで、 If Target.Value = 5 Then Target.Value = "有" If Target.Value = 6 Then Target.Value = "公"  の2つの文字のみに赤色のフォントにするための記述を追加したいのですが お知恵を拝借できませんか。 ご指導よろしくお願いします。 ご参考に現在使用のマクロです。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("I13:AM27")) Is Nothing Then Exit Sub Application.EnableEvents = False If Target.Value = 0 Then Target.Value = Empty If Target.Value = 1 Then Target.Value = "日" If Target.Value = 2 Then Target.Value = "△" If Target.Value = 3 Then Target.Value = "▼" If Target.Value = 4 Then Target.Value = "夜" If Target.Value = 5 Then Target.Value = "有" If Target.Value = 6 Then Target.Value = "公" Application.EnableEvents = True End Sub

  • エクセルで数字を入力すると隣のセルに特定の文字に変換する方法

    Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count <> 1 Then Exit Sub Application.EnableEvents = False Select Case Target.Value Case 93 Target.Value = "アフガニスタン" Case 971 Target.Value = "アラブ首長国連邦" Case 967 Target.Value = "イエメン共和国" End Select Application.EnableEvents = True End Sub 国別電話番号の表を作りたいのですが、VLOOKUP関数を使用せずに上記のプログラムを利用して数字を入れたセルの隣のセルに特定の文字を反映させたいのですが、初心者の為に苦労しております。 どのようなプログラムを付け加えたら良いのかお教えください。 よろしくお願いいたします。

  • エクセルで特定のセルへの直接入力だけを禁止したいんです。

    過去の質問を参考に『セルをダブルクリックすると"○"と入力される』というマクロを○⇒●⇒-⇒  ⇒○⇒・・・として使っているんですが、ダブルクリックの度にセルが直接入力の状態(縦の棒の点滅)になってしまい、一度他のセルをクリックしないと次へ進めずに困っています。 良い方法ってあるのでしょうか? ちなみに使用しているマクロは Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const rng As String = "A1:A3" '処理対象のセル範囲 If Not Application.Intersect(Target, Range(rng)) Is Nothing Then If Target.Value = "" Then Target.Value = "○" ElseIf Target.Value = "○" Then Target.Value = "●" ElseIf Target.Value = "●" Then Target.Value = "-" Else Target.ClearContents End If End If End Sub というものです。 よろしくお願いします。

  • 入力用のセルと管理用のセルを分けるには??

    Private Sub Worksheet_Change(ByVal Target As Range) Dim myC As String Dim x As Range   If Intersect(Target, Range("A1,C2,D4")) Is Nothing Then Exit Sub   Select Case Target.Address(0, 0)     Case "A1": myC = "E"     Case "C2": myC = "F"     Case "D4": myC = "G"   End Select   If Cells(Rows.Count, myC).End(xlUp).Value = "" Then     Set x = Cells(Rows.Count, myC).End(xlUp)   Else     Set x = Cells(Rows.Count, myC).End(xlUp).Offset(1)   End If   x.Value = Target.Value End Sub 入力用セルと、管理用のセルを分けたい・・・・・ という質問をしてこのマクロを教えていただいたんですが、 実際には入力用にしたいセルが、40箇所以上ありまして 一つ一つ反映させるのではなく、すべての箇所に入力して確認後に まとめて反映させたいのですが不可能でしょうか?? 何か方法があるようでしたらヨロシクお願いします!! エクセル2003です。

  • エクセル 加算 

    1つのセルに数字を入力すると加算されているマクロを探していたら 以下の回答がありました Dim memo Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub If Target.Value <> "**" And IsNumeric(Target.Value) = False Then Exit Sub Application.EnableEvents = False If Target.Value = "**" Then memo = 0 Else memo = memo + Target.Value End If Target.Value = memo Application.EnableEvents = True End Sub このマクロですがA1に入力した場合に適用しますが、このマクロをたとえばA1からC1の範囲で使用した1場合にどのようなマクロをすればよいかわかりません それか、このマクロではそのようなことができるのかもわかりませんので教えて頂けないでしょうか

  • エクセルマクロ 特定の文字入力の際の処理(2)

    お世話になります。 以前、下記質問をし、締め切ったのですが、もう一点、教えていただきたい点がありました。 質問 エクセルマクロで、sheet1のE列の6~30行に指定する文字が入力された際、 B列のその同じ行にある文字を取得し、その取得した文字をsheet3のC6から K6まで書き出していきたいのですが、どのようにしたらよいでしょうか? ご回答 Private Sub Worksheet_Change(ByVal Target As Range)   Dim i As Long   Dim r As Range   Const 指定文字 As String = "X"   Set r = Range("E6:E30")   If Target.Count > 1 Then Exit Sub   If Intersect(r, Target) Is Nothing Then     Exit Sub   End If   If Target.Value <> 指定文字 Then     Exit Sub   Else     '大文字小文字を区別する場合     i = ActiveSheet.Evaluate( _       "SumProduct(EXACT(" & r.Address & ",""" & 指定文字 & """)*1)")     '大文字小文字を区別しない場合     i = WorksheetFunction.CountIf(r, 指定文字)          Application.EnableEvents = False     Worksheets("Sheet3").Cells(6, i + 2) = _       Target.Offset(, -3)     Application.EnableEvents = True   End If End Sub このご回答を、 取得した文字をsheet3のC6からK6までに4列毎に書き出して いく場合にはコードをどのようにしていけば良いのでしょうか。 C6→H6→M6→・・・ すみません、再度お願い致します。

  • 特定の文字以外を入力すると別シートに表記する方法

    Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim StrRow As Long Dim TgtCol As Long Dim MaxRow As Long Dim ChgRow As Long Dim PutSh1 As Worksheet Dim PutSh2 As Worksheet Dim PutSh3 As Worksheet Dim PutCol As Long Dim PutRow As Long Dim ChgRng1 As Range Dim ChgRng2 As Range Dim ChgRng3 As Range StrRow = 5 MaxRow = 35 If Target.Count > 1 Then Exit Sub If Target.Value = "" Then Exit Sub Set PutSh1 = ThisWorkbook.Sheets("Sheet2") Set PutSh2 = ThisWorkbook.Sheets("Sheet3") Set PutSh3 = ThisWorkbook.Sheets("Sheet4") With ThisWorkbook.Sheets("Sheet1") Set ChgRng1 = Range(.Cells(StrRow, 3), .Cells(MaxRow, 3)) 'C列 Set ChgRng2 = Range(.Cells(StrRow, 5), .Cells(MaxRow, 5)) 'E列 Set ChgRng3 = Range(.Cells(StrRow, 7), .Cells(MaxRow, 7)) 'G列 End With ChgRow = Target.Row If Not Intersect(Target, ChgRng1) Is Nothing Then Target.Offset(0, -1).Value = Target.Offset(0, -1).Value + 1 DataPut PutSh1, ChgRow, Target.Value End If If Not Intersect(Target, ChgRng2) Is Nothing Then Target.Offset(0, -1).Value = Target.Offset(0, -1).Value + 1 DataPut PutSh2, ChgRow, Target.Value End If If Not Intersect(Target, ChgRng3) Is Nothing Then Target.Offset(0, -1).Value = Target.Offset(0, -1).Value + 1 DataPut PutSh3, ChgRow, Target.Value End If End Sub 以前質問させて頂いた内容で追加の質問です。 Sheet1の指定したセルに「ー(ハイフン)」の文字がある時は、Sheet2〜4に転送(表記)しない方法を追加する場合はどの様にすれば宜しいでしょうか?

  • エクセルVBA住所録で半角全角問わず検索する方法

    エクセルVBAで住所録を作っています。 住所録で下記のようなコードを書いて、キーワード検索をさせるようにしているのですが、『*丁目』や番地に半角英数を使っています。 全角で数字を入力しても検索されるようなコードの書き方はあるのでしょうか? 宜しくお願いします。 Sub 住所検索() ans = InputBox("住所を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:IV1").AutoFilter 'オートフィルタモードをセット .Range("A1:IV1").AutoFilter Field:=4, Criteria1:="=*" & ans & "*" '4つ目のフィルターに検索文字 End With End Sub

専門家に質問してみよう