• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル 任意の文字をVBAで使いたい時)

エクセルVBAで任意の文字を置換する方法

tanakanonoの回答

回答No.1

正規表現を使うとよいと思います。 VBA 正規表現で調べるとやり方が出てきます。

corone20202000
質問者

お礼

「正規表現」初めて知りました。 「.」で任意の文字を表すのですね、勉強になります。質問の中のコードに当てはめても、私の知識不足でうまくいきませんでしたが、根気よく調べて行きたいと思います。ご回答ありがとうございました。

関連するQ&A

  • エクセルVBAで特定の文字を削除したい

    選択しているセルの中に入っている文字「■」を 削除したいのですがうまくいきません。 お願いいたします。 Sub ■削除() Dim myRange As Range Dim keyWord1 As String, keyWord2 As String Dim bool As Boolean Set myRange = ActiveCell keyWord1 = "■" keyWord2 = "" bool = myRange.Replace(keyWord1, keyWord2, LookAt:=xlWhole) End Sub

  • Excelで文字を置換したいのですが

    A列の各セルに入っている文字列において、Bという文字があったらCに、無かったら文字を削除して空白にする、という作業を行いたいのです。 行数にして700行くらいありますので、マクロを考えました。 Replaceメソッドを使うのだと思い、ネットの記事を参考に、以下のマクロを書いてみましたが、「含まない」が機能しません。 「Bを含まない場合は削除する」というのはどのようにしたら良いでしょうか。 Sub macro9() 'Dictionaryオブジェクトの宣言 Dim myDic As Object Set myDic = CreateObject("Scripting.Dictionary") 'Dictionaryオブジェクトの初期化、要素の追加 myDic.Add "*B", "C" myDic.Add "<>B", "" 'Dictionaryオブジェクトを使った複数条件の置換 Dim bool As Boolean, myRange As Range Set myRange = Range("A3:A700") For Each Var In myDic bool = myRange.Replace(Var, myDic(Var)) Next Var End Sub

  • ExcelのVBA ListBox.RowSourceの範囲について教えてください。

    下記のように範囲を変数で検索指定したいのですが、うまくいきません。VBAは初心者です。誰か助けて。 内容は・・・五十音順にあるリストを作り、ウ音のみをListBoxに表示したいのですが。 Private Sub ToggleButton3_Click() Dim A As Range Dim BBB As String Dim C As Range Dim DDD As String Set A = Cells.Find(what:="ウ", lookat:=xlWhole) BBB = Cells(A.row, A.Column + 1).Address Set C = Cells.Find(what:="エ", lookat:=xlWhole) DDD = Cells(C.row - 1, C.Column + 1).Address ListBox商品名.RowSource = "BBB:DDD" End Sub PS 違う方法でもいいのでどなたか教えてください。

  • Excel VB-指定した範囲の下に貼り付け

    ExcelのVBについて質問です。 指定した任意の範囲をコピーして、その範囲のすぐ下に貼り付けるにはどうしたら良いのでしょうか? 任意の範囲は、空白セルがあったりなかったり、まったく規則性はありません。 以下、自分で考えたものです。 ______________________________ Sub Macro1() Dim myrange As range Set myrange = Selection Selection.Copy #myrangeのすぐ下を選択する何か ActiveSheet.Paste End Sub ______________________________ よろしくお願い致します。

  • エクセルVBA 重複を表示したい

    エクセルVBA 重複を表示したい A列で重複すると警告するコードを以下のように作成しました。 これを修正してA列で重複して、なおかつB列でも重複した場合警告するコードにしたいのです。 添付した図では「同姓同名あり、確認してください、鈴木一郎、山口」と表示したいのです。 ご教授よろしくお願いします。 Sub test() Dim myRange As Range Dim 同一flag As Boolean Dim MsgStr As String For Each myRange In Range("A2:A10") If WorksheetFunction.CountIf(Range("A2:A10"), myRange) > 1 Then If 同一flag = False Then 同一flag = True If InStr(1, MsgStr, myRange) = 0 Then MsgStr = MsgStr & myRange & vbCrLf End If End If Next If 同一flag = True Then MsgBox "同姓同名あり" & Chr(13) & _ "確認してください" & Chr(13) & _ vbCrLf & MsgStr Else End If End Sub

  • エクセルVBA 重複を表示したい2

    エクセルVBA 重複を表示したい2 以下ではたいへんお世話になりありがとうございました。 http://okwave.jp/qa/q5849885.html 上記に関連する質問をさせていただきます。 下記に提示したコードを修正して、以下のようなコードに変えたいと考えています。 「B列で重複したデータがあれば、そのすべてを左隣のデータと一緒に表示したい」 添付した図だと、 1小沢一郎 7〃 8〃 4鈴木一郎 6〃 以上のような感じです。 アドバイスよろしくお願いします。 Sub TEST() Dim myRange As Range Dim 同一flag As Boolean Dim MsgStr As String m_Rows = Range("b" & Rows.Count).End(xlUp).Row For Each myRange In Range("b2:b" & m_Rows) If WorksheetFunction.CountIf(Range("b2:b4000"), myRange) > 1 Then If 同一flag = False Then 同一flag = True If InStr(1, MsgStr, myRange) = 0 Then MsgStr = MsgStr & myRange.Offset(0, -1).Value & myRange & vbCrLf End If End If Next If 同一flag = True Then MsgBox "同姓同名あり" & Chr(13) & _ "確認してください" & Chr(13) & _ vbCrLf & MsgStr Else End If End Sub

  • エクセル VBA

    Dim h As Range If Application.CountIf(Range("p:p"), 5) = 0 Then Exit Sub Set h = Range("p:p").Find(what:=5, LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlPrevious) Range(Range("p2"), h).EntireRow.Delete Shift:=xlShiftUp 上記のマクロは、「2行目から、P列の数値が5の最下の行までを削除する」という内容です。 この5の部分を、<0(0未満)に変えたいのですがわかりません。 どうぞ教えてください。

  • エクセルのVBAに関する質問です。

    エクセルのVBAに関する質問です。 「指定フォルダ(ここではXXXX)内の全てのエクセルファイルを開き、内容を転記していく」 というマクロについての質問です。 ネットを参照し、以下のマクロを見つけました。 -------------------------------------------------------------------------- Sub Macro1() Dim theName As String Dim theDir As String Dim theBook As Workbook Dim flg As Boolean flg = True Application.ScreenUpdating = False theDir = ThisWorkbook.Path & "\XXXX" theName = Dir(theDir & "\*.xls") Do While theName <> "" Set theBook = Workbooks.Open(theDir & "\" & theName) Call subA(theBook, flg) flg = False theBook.Close theName = Dir Loop End Sub Sub subA(theBook As Workbook, flg As Boolean) Dim thetbl As Range, LRow As Long Set thetbl = theBook.Sheets(1).Range("A1").CurrentRegion thetbl.Copy With ThisWorkbook.ActiveSheet LRow = .Range("A65536").End(xlUp).Row If LRow = 1 Then .Range("A" & LRow).PasteSpecial xlPasteValues Else .Range("A" & LRow + 1).PasteSpecial xlPasteValues End If End With Application.CutCopyMode = False End Sub -------------------------------------------------------------------------- 実際にはこのマクロは上手く動作していますが、1つ疑問があります。 「一度開いたファイルは開かない」というのはどの部分のおかげか、ということです。 当方初心者で、分かりづらい質問かもしれませんが、どうぞご教授お願いいたします。

  • LookAt の定数を変数で指定するには?

    エクセルvbaです。 Sub test() Dim strLookAt As String strLookAt = "xlPart" Cells.Replace What:="aaa", Replacement:="iii", LookAt:=strLookAt End Sub このようなことはできないのでしょうか? LookAtの部分のxlWhole または xlPart かをシートから読み取って変数に格納し、 Replace メソッドで置換したいのですが、 このコードを実行すると「型が一致しません」になります。 多分、LookAt:=strLookAtでエラーになってるのだと思います。 String型だからいけないのでしょうか? 回避方法を教えてください。よろしくお願いします。

  • EXCEL VBA 他のワークシートのデータを見るには?

    EXCEL VBAでsheet1のセルに何かデータが入力された時に、sheet2のどこかのセルに同じ文字列がないかを探したいと思います。 データの入力と同時に検索をかけるため、sheet1の部分にイベントプロシージャを定義し、 データが入力された時にそのルーチンの中からsheet2のデータを見に行きたいのですが、エラーが出てしまいます。 こういうことはできないのでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Dim LineNo As Integer Dim tmp_str As String tmp_str = Target.Value LineNo = Sheets("sheet2").Cells.Find(what:=tmp_str, lookat:=xlWhole).Row MsgBox (LineNo) End Sub