• ベストアンサー

特定の文字に対してポップアップ表示

エクセルvbaでセルに特定の文字を含む文字が入力された時に、ポップアップを表示するようにしたいのですが、特定の文字とメッセージ内容は"設定用シート"内のA列に特定の文字、B列にメッセージ内容をセット。 下記のコードでは動作致しません。 どのように修正すれば宜しいでしょうか? Worksheet_Change(ByVal Target As Range) Dim searchRange As Range Dim cell As Range Dim searchText As String Dim message As String ' 設定用シートを参照 Set searchRange = Sheets("設定用シート").Range("A:B") ' 変更されたセルの中で特定の文字を検索 For Each cell In Intersect(Target, Me.UsedRange) searchText = cell.Value If Not IsEmpty(searchText) Then ' 設定用シートで特定の文字を検索 On Error Resume Next ' セルが見つからなかった場合のエラーハンドリング message = searchRange.Columns(2).Find(searchText).Offset(0, 1).Value On Error GoTo 0 ' エラーハンドリングを元に戻す If Len(message) > 0 Then ' ポップアップ表示 MsgBox message, vbInformation, "メッセージ" End If End If Next cell End Sub

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.4

回答No.2の補足です。 複数のセルを一括でコピペした時に対応するため的な感じでFor Eachでループしてるのだとしたら納得です。

kubotaman
質問者

お礼

やりたい事ができました!!ありがとうございました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

何も難しいことはないと思うが。下記を参考に。 Private Sub Worksheet_Change(ByVal Target As Range) f = "xx" '適宜変えること=質問の特定の文字 If Intersect(Target, Range("a1:B10")) Is Nothing Then Else x = InStr(Target, f) If x <> 0 Then MsgBox x & "文字目以下に検索文字" & f & "あり" End If End If End Sub

  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.2

回答No.1の追加です。 ふと思ったのですが、私の知識不足でFor Each でループしているのが何故なのか分からないので たとえば以下のようにループしない方法だとまずいのでしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) Dim searchRange As Range Dim FRng As Range If Intersect(Target, Me.UsedRange) Is Nothing Then Exit Sub End If '↑UsedRangeでしたらこの部分もなくていいような気もしますが ' 設定用シートを参照 Set searchRange = Sheets("設定用シート").Range("A:A") ' 変更したセルの特定の文字を検索 Set FRng = searchRange.Find(Target.Value) If FRng Is Nothing Then Set searchRange = Nothing Exit Sub End If ' ポップアップ表示 MsgBox FRng.Offset(0, 1).Value, vbInformation, "メッセージ" Set searchRange = Nothing End Sub 余計なお世話&疑問ですみません。

  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.1

message = searchRange.Columns(2).Find(searchText).Offset(0, 1).Value は message = searchRange.Columns(1).Find(searchText).Offset(0, 1).Value じゃないでしょうか。

関連するQ&A

  • 特定範囲のセルの最終文字1文字を削除

    よろしくお願いします。 Sheet1のJ26からJ56の、セルに入れた文字の最終文字1文字を 削除して表示したいのですが、下の構文で、 For Each r In Application.Selectionが黄色くエラー表示されます。 どこをどのように直せばよいのか解りません。 よろしくお願いします。 Private Sub CommandButton1_Click() Dim r As Range r = Worksheets("Sheet1").Range("J26:J56") For Each r In Application.Selection If Len(r.Value) > 0 Then r.Value = Left(r.Value, Len(r.Value) - 1) End If End Sub Next

  • エクセルで特定の文字列の含まれるセルのある行の色を変更したいと思ってお

    エクセルで特定の文字列の含まれるセルのある行の色を変更したいと思っておりますが、関数では出来ないようなのでVBAで作業をしております。なかなかうまくいかずで困ってしまっております。 下記のような関数でシート一枚は出来たのですが、それ以外のシートには反映がされません。 Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Range If Application.Intersect(Target, Range("A2:A10000")) Is Nothing Then Exit Sub For Each r In Target If r.Column = 1 Then Select Case r.Value Case "○": r.Resize(1, 12).Interior.ColorIndex = 19 Case "×": r.Resize(1, 12).Interior.ColorIndex = 3 Case "△": r.Resize(1, 12).Interior.ColorIndex = 6 Case Else: r.Resize(1, 12).Interior.ColorIndex = xlNone End Select End If Next r End Sub 無知なので、ネットで調べて上記のような数式を拾ってきたのですが、どうやら1シート分の設定に書かれているようです。。。 全シートに反映がされるように設定をするにはどこをどのように書き換えればよろしいでしょうか。 お分かりの方がいらっしゃいましたら、よろしくお願いいたします。

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

    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に転送(表記)しない方法を追加する場合はどの様にすれば宜しいでしょうか?

  • エクセルマクロで、書式が違っても文字列を評価する方法

    文字列書式のセルと、標準書式のセルの数字文字列を比較したいのですが、うまくいきません。 書式が違うと、range.textも違う値になってしまうようです。 結局、現状では一度文字列変数の中に一度いれてから処理していますが、もっと他によい方法はないでしょうか? ------------------------------- If range1 = range2 Then  ・・・・・ End If ------------------------------- Dim temp1 As String Dim temp2 As String If temp1 = temp2 Then ・・・・・・ end If ------------------------------

  • EXCEL VBA 指定した数字ごとに表示

    ・1から3までの数字をいれた場合に、9:00から11:00と表示する場合として以下のソースを書きます。(以前にこちらで教えていただきました) ・a = array()の部分について、直接書くのではなく、セルを参照することはできますでしょうか? a = array("cell(1,1)", "cell(1,2)", "cell(1,3)")みたいなイメージです。 よろしくお願い致します。 option base 1 private sub Worksheet_Change(byval Target as excel.range)  dim h as range  dim a as variant  a = array("9:0", "10:0", "11:0") ’1から3  on error resume next  for each h in application.intersect(target, range("D:D"))   if cells(h.row, "F") <> "○" then   if 1=< h.value and h.value <= 3 then  ’1から3   if time >= timevalue(a(h.value)) then    cells(h.row, "F") = a(h.value)   end if   end if   end if  next end sub

  • 特定の文字を含むシートを選択するには

    いつもお世話になっております。 特定の文字を含むシートのデータをコピーするにはどのようにしたらよろしいでしょうか。 具体的には (1)シート名の末尾に"D"を含むシートを選択 (2)選択したシートのデータをコピー (3)コピーしたデータを順次"Sheet1"に貼付 というマクロを組みたいのですが、(1)のところがうまくいきません。 以下のように作成してみました。 Dim sh As Worksheet Dim lr As Long, tlr As Long For Each sh In Worksheets If sh.Name = "*D" Then lr = sh.Cells(ActiveSheet.Rows.Count, 3).End(xlUp).Row sh.Rows("3:" & lr).Copy tlr = Sheets("Sheet1").Cells(ActiveSheet.Rows.Count, 3).End(xlUp).Row Sheets("Sheet1").Range("A" & tlr + 1).PasteSpecial End If Next 4行目の sh.Name = "*D" のところがうまくないようです。 よろしくお願いします。

  • ある文字が含まれているセルの個数を結果表示

    いつもお世話になっております。 また詰まってしまいましたので質問させてください。 S列に「test」という文字が入っているセルの個数を集計し結果を セル「AC1」に表示したいのですがうまくいかずにおります。 なお、S列には様々な文字が入っているのでワイルドカードで検索しております。 データ数は変動します。 Sub Macro1() Dim c As Long Dim ans As Integer Dim i As Integer ans = 0 With ActiveSheet For i = Cells(65536, c).End(xlUp).Row To 1 Step -1 If Range("S" & i) = "*test*" Then ans = ans + 1 End If Next i Range("AC1") = ans End With End Sub 環境 Excel2003 以上、宜しくお願いします。

  • VBAで特定の文字以降の文字列の色の変更をしたい

    エクセルで特定の複数の特定の文字の色を変更したいです。 複数の文字列の色の変更の仕方については調べたのですが 変更したい文字列が複数でそれぞれ色指定が異なります。 内、ひとつは 『セル内の"→"以降の文字列』 を指定して 文字色を赤に変更したいのです。 変更したい文字列 『★とYY』を青に変えるのは下記で できました。 (1) 『セル内の"→"以降の文字列』 を指定して文字色を赤に変更 (2) 範囲指定を開いているシート全体にする という部分を加えたいです。 よろしくお願いいたします。 Sub Sumple() Dim myReg As Object Dim Match As Variant Dim r As Range Dim st As String Set myReg = CreateObject("VBScript.Regexp") myReg.Pattern = "★|YY" myReg.Global = True For Each r In Range("A1:C10")    ' ←範囲はActiveSheetにしたい st = r.Value If myReg.Test(st) Then For Each Match In myReg.Execute(st) r.Characters(Start:=Match.Firstindex + 1, Length:=Match.Length).Font.ColorIndex = -3394816 ' フォントカラーを青 Next End If Next Set myReg = Nothing End Sub

  • 特定のセルに記入された回数分、他のシートに反映するには?

    特定のセルに記入された数字の数だけ、特定セルの値を別のシートに一括して反映させたいのです。 下記は以前にこちらのサイトで教えていただいたマクロ(記入シート内のA1,A4,A7,A10に記入した文字列を、 別シートのB列,L列,M列,N列に反映させるマクロ)です。 これを使用して、セルの値が10なら別シートに10列分反映させるようにしたいのですが・・・(値はその都度変わります)。 どなたかご教授いただける方がおられましたらよろしくお願いいたしますm(__)m Sub ボタン1_Click()   Dim SourceRow As Integer   Dim DestCell As Range   Set DestCell = Worksheets("Sheet2").Range("B65535").End(xlUp)     If DestCell.Row = 1 And DestCell.Value <> "" Or DestCell.Row <> 1 Then     Set DestCell = DestCell.Offset(1, 0)   End If   With ActiveSheet     DestCell = .Range("A1")     DestCell.Offset(0, 11) = .Range("A4")     DestCell.Offset(0, 12) = .Range("A7")     DestCell.Offset(0, 13) = .Range("A10")   End With End Sub

  • VBAで条件付き書式の文字色

    下記のコードを、条件付き書式で変化した文字色によって作動させたいのですが、変化した赤字を認識せずに作動しません。 どこを修正したら良いでしょうか? Private Sub CommandButton1_Click() Dim cell As Range For Each cell In Range("L28,P28,T28,X28,AB28,AF28,AJ28,AN28,AV30,BC30,BG30,BK30,BO30,BS30,CE28") If cell.Font.ColorIndex = 3 Then ' 赤文字の場合 ユーザフォーム1.Show ' ユーザフォーム1を表示する Exit Sub End If Next cell Range("CI28").Value = "ok" ' セル"CI28"に"ok"を入力する End Sub

専門家に質問してみよう