• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロで指定した文字以外にも入力出来るようにしたい)

マクロで指定した文字以外にも入力出来るようにする方法とは?

このQ&Aのポイント
  • マクロ表シートで指定した数字以外の文字や数字を入力できるようにする方法について教えてください。
  • VBAマクロを使用して、任意のセルに文字を入力したり、他の数字を入力できるようにする方法について教えてください。
  • データの入力規制でドロップダウンリストを付けて、他の項目を選んで入力できるようにする方法について教えてください。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

スミマセン,思い出しました。 下記に訂正します。 改めて: シート名タブを右クリックしてコードの表示を選ぶ 現れたシートに記載されているマクロを綺麗に消去する 改めて下記をコピー貼り付ける Private Sub worksheet_change(ByVal Target As Excel.Range)  Dim h As Range  Set Target = Application.Intersect(Target, Range("D4:K34, M4:U34, W4:AA34, AC4:AG34"))  On Error Resume Next  For Each h In Target  If h <> "" Then   Application.EnableEvents = False   h = Application.worksheetfunction.VLookup(h.Value, Worksheets("マクロリスト表").Range("D:E"), 2, False)   Application.EnableEvents = True  End If  Next End Sub ファイルメニューから終了してエクセルに戻る 決められた言葉を記入すると,対応する内容に書き換わる それ以外を記入したときはそのまま放置になる。

yamagou
質問者

お礼

毎度、毎度、お手数をおかけしてありがとうございます。 完璧で御座いました。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

シート名タブを右クリックしてコードの表示を選ぶ 現れたシートに記載されているマクロを綺麗に消去する 改めて下記をコピー貼り付ける Private Sub worksheet_change(ByVal Target As Excel.Range)  Dim h As Range  dim res as variant  Set Target = Application.Intersect(Target, Range("D4:K34, M4:U34, W4:AA34, AC4:AG34"))  On Error Resume Next  For Each h In Target   If h <> "" Then    Application.EnableEvents = False    res = Application.VLookup(h.Value, Worksheets("マクロリスト表").Range("D:E"), 2, False)    if not iserror(res) then h = res    Application.EnableEvents = True   End If  Next End Sub ファイルメニューから終了してエクセルに戻る 決められた言葉を記入すると,対応する内容に書き換わる それ以外を記入したときはそのまま放置になる。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル マクロ 初心者です

    エクセルマクロ初心者です。 以下の2つの Private Sub Worksheet_Change(ByVal Target As Range)を1つのシートで実行させたいのですが、 当方、初心者なので組み合わせ方が分かりません。 よろしくお願いします。 ===No1=== Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Target = StrConv(Target, vbUpperCase) Application.EnableEvents = True End Sub ===No2=== Private Sub Worksheet_Change(ByVal Target As Range) Dim Ans As Integer If Target.Count = 1 Then Ans = MsgBox("コピーは禁止!!", vbCritical) MsgBox "データを消去します。" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If If Target.Count = 1 Then Exit Sub Else MsgBox “複数セルのコピー禁止!" With Application .EnableEvents = False .Undo .EnableEvents = True End With End If End Sub ------------ 上記の2つを1つのシートで動作させたいのですが、うまくいきません。 単体では、動作します。

  • (少数点、第三位から切り捨て)をこのマクロにどう入力すればいいですか??

    四捨五入を切捨て(第三位)するにはどうしたらいいのでしょうか?? VBAをちゃんと理解できていないので、誰か分かる人助けてください!! ついでにROUNDDOWNとかの関数はVBAに入力するコードとしては、 まったく別物なんでしょうか??初心者が生意気言ってすいません・・・。 Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next Application.EnableEvents = False If Range(Target.Address).Column = 2 And _ Range(Target.Address).Row >= 5 And _ Range(Target.Address).Row <= 10 Then Range(Target.Address).Value = _ Range(Target.Address).Value / 19 End If Application.EnableEvents = True End Sub よろしくおねがいします・・。 カテゴリー間違えて入れなおしました。すみません・・。

  • エクセルマクロ 特定の文字入力の際の処理(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→・・・ すみません、再度お願い致します。

  • (少数点、第三位で切り捨て)をしたいんですが、このマクロに何を足せばいいですか??

    四捨五入を切捨て(第三位)するにはどうしたらいいのでしょうか?? VBAをちゃんと理解できていないので、誰か分かる人助けてください!! ついでにROUNDDOWNとかの関数はVBAに入力するコードとしては、 まったく別物なんでしょうか??初心者が生意気言ってすいません・・・。 Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next Application.EnableEvents = False If Range(Target.Address).Column = 2 And _ Range(Target.Address).Row >= 5 And _ Range(Target.Address).Row <= 10 Then Range(Target.Address).Value = _ Range(Target.Address).Value / 19 End If Application.EnableEvents = True End Sub よろしくおねがいします。

  • マクロ 複数のシートに適用する記述がわかりません

    いつも皆様方にはたいへんお世話になっております。 下記のマクロをシート3~33(同じ構造です)まで、適用したいのですが、一つ一つのシートに貼り付けていけばよいのですが、なんとか一つの記述で出来ないかと、以前この質問コーナーでの回答を寄せ集めて、記述したのですが、コンパイルエラーばかりで、どうにもなりません。 こんな初歩的なことは、最小限の勉強で解決出来るのかも知れませんが、どうにもなりません。 誠に恐縮ですが、下記の記述の「どこを」「どの様に」修正したらよいか、どなたか解る方、教えて頂けないでしょうか。 どうぞ、よろしくお願いいたします。 Private Sub worksheet_change(ByVal Target As Excel.Range) Dim sheetno As Integer          ←この3行を当てずっぽうで挿入してみました><; For sheetno = 3 To 33 Worksheets(sheetno).Select h As Range Set Target = Application.Intersect(Target, Range("E5:N12, E14:N22, E24:N28, E30:N34")) On Error Resume Next For Each h In Target If h <> "" Then Application.EnableEvents = False h = Application.VLookup(h.Value, Worksheets("マクロリスト表").Range("A:B"), 2, False) Application.EnableEvents = True End If Next End Sub

  • エクセル 加算 

    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場合にどのようなマクロをすればよいかわかりません それか、このマクロではそのようなことができるのかもわかりませんので教えて頂けないでしょうか

  • このマクロの説明をお願いします

    Dim buf As String Private Sub CommandButton1_Click() End Sub Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim tmp As Variant Application.EnableEvents = False tmp = InStr(2, buf, "$", vbTextCompare) tmp = Right(buf, Len(buf) - tmp) If buf = "$B$" & tmp Then Range("C" & tmp).Value = Range("C" & tmp).Value + Range("B" & tmp).Value Range(buf).Select End If Application.EnableEvents = True End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) buf = ActiveCell.Address End Sub どうやらB列の各セルに入力がされた場合、隣接するC列のセルに加算していくマクロのようです。 なんですが、 InStr関数、Right関数、Len関数あたりでやっていることがよくわかりません。 Private Sub CommandButton1_Click()は必要なのでしょうか? あと、 もっとシンプルなマクロができるようでしたらご教授ねがいます。

  • 【ExcelVBA】 既にあるマクロの間で実行させたいのです。

    こんにちは 下のマクロを・・・ Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const RangeName As String = "●入力" If Not Intersect(Range(RangeName), Target) Is Nothing Then Cancel = True If Target = "●" Then Target = "" Else Target = "●" End If End If End Sub このマクロの■ここで実行■で実行させたいのですが、どのようにしたらよいでしょう。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Address <> "$D$1" Then Exit Sub Cancel = True Columns("A:U").Select Range("T1").Activate Selection.Sort Key1:=Range("D2"), Order1:=xlAscending, Header:=xlYes, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Selection.Replace What:="ああ", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Range("D1").Select End Sub ■ここで実行■ Private Sub Worksheet_Change(ByVal Target As Range) strAddress = "A1:A2000" On Error GoTo ErrorHandler If Target.Count > 1 Then GoTo ErrorHandler If Not Intersect(Target, Range(strAddress)) Is Nothing Then Application.EnableEvents = False Range(strAddress).ClearContents Target.Value = "●" End If ErrorHandler: Application.EnableEvents = True End Sub

  • エクセルのマクロについて

    以前、こちらのマクロで Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("a1")) Is Nothing Then Exit Sub Application.EnableEvents = False Range("a3:ba28").Replace What:="=*!", Replacement:=Target.Value, LookAt:=xlPart Application.EnableEvents = True End Sub 指定した範囲を(A1)セルに入力した値に置換するマクロを教えていただいたんですが、現在,、これを使ってsheet1の指定範囲内にある(=あ!$AR$75)などが入力してある部分のシート名を置換してデータ内容の変更を行っています。 しかし、この方法だと、シート名の文字数を指定しなくてはならなくて、自分以外の人が操作すると、エラーを出してしまうことがあり困っています。そこでchangeイベントをやめて、シート名の確認をしてからマクロの実行を行うには、どういったマクロにすればいいですか?? 説明が分かりづらくすみません・・・・・・。 もし他にシートの文字数などにこだわらなくてもよい方法があれば教えてください。 よろしくお願いします。

  • 再度入力値に戻したい

     特定のセル(A1)の入力操作を取り消しA1の元データを別セル(B1)にコピペした後、再度セル(A1)の値を入力値に戻すにはどうしたら良いでしょうか?お教え下さい。 Windows7・SP1 Office2010 Private Sub Worksheet_Change(ByVal Target As Range) If Target.address <> "$A$1" Then Exit Sub Application.EnableEvents = False Application.Undo Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste Range("A1").Select Application.CutCopyMode = False Application.EnableEvents = True End Sub

専門家に質問してみよう