2013/11/09

【VBA】Excelのシート名を一括置換する

 Excelでシート内の文字列は置換できるのに、なぜシート名の置換ができないのか。
シート名を一括で編集したい場面は多々ある。


シート名を一括置換する



 それを可能にするのが、以下のVBAマクロ
For Eachでワークシートオブジェクトを取得し、文字列の置換を行う。

Sub シート名置換()
    Dim ws As Worksheet
    Dim myFind As String
    Dim myReplace As String
    
    myFind = Application.InputBox("検索文字列は?", "シート名置換", Type:=2)
    myReplace = Application.InputBox("置換文字列は?", "シート名置換", Type:=2)
    
    For Each ws In ActiveWorkbook.Worksheets
        On Error Resume Next
        ws.name = Replace(ws.name, myFind, myReplace, 1, -1, 2)
    Next ws
End Sub





Replace関数



構文
Replacce(置換対象, 検索文字列, 置換文字列, 検索開始位置, 置換数, 比較モード)


「検索開始位置」以降は省略可能な引数


比較モード




比較内容
0テキストモードで比較(大文字、小文字の区別をしない)
1バイナリモードで比較
2MS Accessでのみ使用可能(DBに格納されている設定に基づく)


テキストモードとバイナリモードの違い

 テキストモードは、OSなどの環境に依存する。
Windows環境で改行をするとき、入力時は"\r\n"を"\n"、出力時は"\n"を"\r\n"に自動変換してくれる。

 バイナリモードは、テキストモードのように自動変換してくれない。
"\n"は"\n"のままだし、"\r\n"は"\r\n"のままになる。
「バイナリ=2進数」 、つまり2進数のレベルで比較したい場合にバイナリモードを使う。


 要するに、より厳密に変換したい場合に「バイナリモード」
特に意識しない場合は「テキストモード」を使う。



追記:2014/05/27
【VBA】Excelのシート名の一覧を取得し、変換する も合わせてどうぞ!


以上


2 件のコメント :

  1. VBAコードを書かなくても以下の記事により一括変更できるみたいです。
    http://superdbtool.blog.jp/archives/951643.html

    返信削除
    返信
    1. そういうのもあるんですね。情報ありがとうございます。
      ただ職業柄、お客様の重要なデータを扱っているので、好き勝手インストールできないんですよ。(フリーのものは特に)

      ですので、マクロで頑張っています!

      削除