VBA

VBA

シーザー暗号を生成するVBAのサンプルコード

シーザー暗号を生成するVBAのサンプルコードを紹介します。シーザー暗号とはシーザー暗号は元の文章の中の各文字を、決められた文字数分シフトして暗号文とする暗号です。文字数のシフト数が3の場合は下記のとおりです。平文暗号文excelbuzbi古代ローマの軍事的指導者ガイウス・ユリウス・カエサル(英語読みでシーザー)が使用したことから、シーザー暗号と呼びます。ただもちろん、この暗号方式は既に解読法がわかっている暗号方式です。友達との遊びや、プログラムの練習として使用するのが良いでしょうね。仕様下記のような画面を用意し、暗号化ボタンを押下した際に、指定したシフト数分、文字がずれる仕様にします。※ちなみに後ろにずれる例も見かけますが、前にズレるほうが正統派だと思いますのでその仕様にしました。制約Aが入力された場合はアルファベットのZに戻り出力するというシンプルな仕様にするため、入力は全て英字に限定します。アルファベットAからZに戻るだけでなく、記号やスペース、ひらがなや漢字を含めたときに文字体系ごとに考慮が必要になり、コードが複雑になるのを避けるためです。大文字・小文字は全て小文字に変換します。...
VBA

Excelの非表示シートをまとめて再表示させるVBAのサンプルコード

Excelの非表示シートを一度再表示するVBAのサンプルコードを紹介します。最近のExcelではまとめて再表示ができるようになったのですが、昔のバージョンはできなかった記憶があります。事象このように大量の非表示シートが隠れている場合にサクっと再表示させます。通常マクロ版まずは理解しやすくて、無難なやり方です。ソースコードOption ExplicitSub doView() Dim wSheet As Worksheet For Each wSheet In Worksheets wSheet.Visible = True NextEnd Subテスト実行下記の通り、VBEを開き、上のソースコードを張り付けます。F5キーを押下すると下記の画面が出てくるので、Subプロシージャを選択して「実行」ボタンを押下します。下記の通り、非表示シートが再表示されました。イミディエイト版上記のコードだと冗長でただ非表示シートを再表示する程度なら、イミディエイトウィンドウで下記のようなコードを打ったほうが楽です。ソースコード構文的には厳密ではないですが、目的を達成するにはこれで十分です。For Each...
VBA

Excelのシートコピー(複製)を一気に行うVBAのサンプルコード

Excelでシートのコピーを一気に行うVBAのサンプルコードを紹介します。手作業でもいいのですが、100枚ぐらいシートをコピーして増やすとなるとマクロのほうが便利です。仕様画面仕様マクロを実行したときにテンプレートシート「template」を繰り返しコピーします。業務によってはテンプレートシート「template」を100枚作りたいケースもあるかと思いますが、今回は5枚シートコピーする例で説明します。※もちろん件数はループの最大件数で調整できます。ソースコード今回は下記のソースコードを用意しています。内容はシートの数だけシートをコピーして、適当な名前にシート名を変更しています。Sub copySheet() Dim i As Long For i = 1 To 5 '枚数はここのループ回数を調整します ActiveSheet.Copy After:=Worksheets(i) ActiveSheet.Name = "適当な名前" & i Next iEnd Subテスト実行下記の通り、VBEを開き、上のソースコードを張り付けます。F5キーを押下すると下記の画面が出てくるので、今回作成し...
VBA

Excelのシート名を一括で取得するVBAのサンプルコード

Excelのシート名を一括で取得するVBAのサンプルコードを紹介します。2つの方法を紹介してみます。通常マクロ版仕様画面仕様マクロを実行したときにシート名をセルに吐き出します。ソースコード実行中のワークブックのシート数分ループして、一番左のシートのセルの1列目にシート名を出力していっているだけです。Sub viewSheet() For Each i In ThisWorkbook.Sheets ThisWorkbook.Sheets(1).Cells(i.Index, 1) = i.Name Next iEnd Subテスト実行下記の通り、VBEを開き、上のソースコードを張り付けます。F5キーを押下すると下記の画面が出てくるので、Subプロシージャを選択して「実行」ボタンを押下します。下記の通り、シート名が出力されました。イミディエイトウィンドウ版イミディエイトウィンドウを使用すると、シートを汚さずにシート名を出力できます。ソースコードソースコードの内容は先ほどのソースコードとほぼ同じなのですが、イミディエイトウィンドウの場合は1行で実行しなければならないので、コロンで区切って1行に...
VBA

Excelの各セルのURLを読み込んでURIデコードするサンプルコード(%で始まる謎の文字列を日本語にする)

Excelの各セルのURLをループで読み込んでURIデコードをするサンプルを紹介します。仕様画面仕様下記の通り表とボタンを用意しています。ボタンを押下すると、「変換前」の列を読み込んでURIデコードをして、変換後の列に出力します。ソースコードSub ボタン1_Click() Dim i As Long Dim cellValue As String Dim decodedURI As String 'クリア処理 Range(Range("B5"), Range("B" & Cells.Rows.Count)).ClearContents 'ヘッダ行以降を処理させるため5行目を選択 Cells(5, 1).Select Do 'オフセットによる行移動 cellValue = ActiveCell.Offset(i, 0).Value If Len(cellValue) = 0 Then '入力値がない場合終了 Exit Do Else 'URIDecode With CreateObject("ScriptControl") .Language = "JScript" decodedUR...
VBA

各セルを読み込んで特定文字がある場合、背景色を黄色く強調するVBAのサンプルコード(正規表現バージョン)

以前、Excelのヘッダー行を除く各セルをループで読み込んで特定文字がある場合、背景色を切り替えるVBAのサンプルをInStrで実現しました。「~という文字列を含む」という程度の文字列検索の場合はこれでよいのですが、細かい文字列条件の検索は正規表現を使用する必要があります。仕様InStr版と画面は同じで、下記の通り表とマクロ実行用のボタンを用意しています。今回は正規表現を「^か」とし、セル内の文字列が「か」で始まった場合に背景色を黄色にします。.Pattern = "^か" '正規表現パターンボタン押下後に表内のセルを全て検索して、正規表現に一致した場合、場合に背景色を切り替えます。また、前回と同様にヘッダー行は検索対象から除いています。ソースコードSub ボタン1_Click() '正規表現オブジェクトの設定 Dim reg As Object Set reg = CreateObject("VBScript.RegExp") With reg .Pattern = "^か" '正規表現パターン .IgnoreCase = False '大文字と小文字を区別する .Global = ...
VBA

各セルを読み込んで特定文字がある場合、背景色を黄色く強調するVBAのサンプルコード

各セルをループで読み込んで特定文字がある場合、背景色を切り替えるVBAのサンプルを紹介します。仕様ボタン押下後に表内のセルを全て検索して、特定の文字を含んだ場合に背景色を切り替えます。今回のサンプルはセル内に「か」を含んだ場合に、背景色を黄色にします。今回1つだけ工夫した点があり、ヘッダー行は除いています。ソースコードSub ボタン1_Click() '対象範囲を選択する(ヘッダー行は除く) With Range("A3").CurrentRegion 'そのままだとA1:C7まで選択されるので、 '行数を7行から5行へ2行減らす、かつアクティブセルをA1からA3まで2行ずらす .Resize(.Rows.Count - 2).Offset(2).Select End With '選択したセル範囲を全てループ For Each c In Selection If (InStr(1, c.Value, "か") > 0) Then '背景色を黄色にする c.Interior.Color = ColorConstants.vbYellow Else '背景色を白色にする c.Interio...
VBA

テキストファイルを読み込んで、正規表現で絞り込み、Excelに出力するVBAのサンプルコード

テキストファイルから読み込んで、正規表現で絞り込みして、Excelファイルに出力するVBAのサンプルを紹介します。仕様ファイルを1行ずつ読み込み、正規表現にマッチした場合、Excelセルに書き込みます。今回は正規表現の例として「^.A.$」のパターンにマッチしたものを抽出します。※正規表現の内容は「行の中にAの文字が含まれること」です。ソースコードSub ボタン1_Click() Dim i As Long Dim inputFileName As String Dim fileNumber As Long Dim fileLine As String '正規表現オブジェクトの設定 Dim reg As Object Set reg = CreateObject("VBScript.RegExp") With reg .Pattern = "^.*A.*$" '正規表現パターン .IgnoreCase = False '大文字と小文字を区別する .Global = True '文字列全体を検索するか(True) End With fileNumber = FreeFile inputF...
VBA

各セルを縦に読み込んで行き、正規表現で整形しながら横のセルに出力していくVBAのサンプルコード

Excelの各セルを縦に読み込んで行き正規表現で整形しながら横のセルに出力するVBAのサンプルを紹介します。仕様ボタン押下後に、「変換前」の入力内容を正規表現で変換して、「変換後」に出力していきます。ここでは正規表現の中身を「Bが連続して続いたら、B一文字に変換する」にしてみます。ソースコードSub ボタン1_Click() Dim i As Long Dim maxRow As Long minRow = 2 maxRow = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row '最終行 '正規表現オブジェクトの設定 Dim reg As Object Set reg = CreateObject("VBScript.RegExp") With reg .Pattern = "B+" '正規表現パターン .IgnoreCase = False '大文字と小文字を区別する .Global = True '文字列全体を検索するか(True) End With For i = minRow To maxRow Cells(i, 2).Va...
VBA

全てのシートのカーソル位置をA1に移動し、拡大率100%にするVBAサンプルコード

Excelファイル内のすべてのシートのカーソル位置をA1に移動し、拡大率100%にするVBAサンプルを紹介します。仕様「ボタン」を押すと「読み込みExcelファイル」のパスからExcelを開き、各シートの選択セルをA1セルにし、拡大率を100%にします。画面仕様ソースコードSub ボタン1_Click() 'このブックを取得 Set myWorkBook = ThisWorkbook 'A1に固定するExcelのパスを取得 Dim filePath As String filePath = myWorkBook.Worksheets("Sheet1").Cells(2, 2).Value 'ターゲットのブックを開く Workbooks.Open Filename:=filePath Set targetWorkBook = Workbooks(Dir(filePath)) '全シートループ For Each targetSheet In targetWorkBook.Worksheets targetSheet.Activate 'A1セルを選択 Application.Goto Re...