VBA

PowerShell

VBAからPowerShellのコマンドを実行するサンプルコード(戻り値を取得するパターン)

VBAからPowerShellのコマンドを実行するサンプルコードを2パターン作成してみました。この記事ではそのうちの戻り値を取得するパターンを紹介します。準備事前準備として、VBAからPowerShellコマンドを実行するには以下の設定が必要です。ツールバーから「参照設定」を選択「Windows Script Host Object Model」のライブラリファイルにチェックを入れます。仕様VBAからPowerShellコマンドを呼び出します。PowerShellのコマンドはなんでもよいのですが、「Get-Date」にして結果をVBAのMsgBox関数で表示してみます。見出し念のため補足しますが、実現している処理自体はVBAからPowerShellを経由する必要性はありません。マクロからPowerShellを実行する方法をテストするためにやっています。ソースコードWScript.ShellのExecメソッドにより、powershellのコマンドを実行しています。execPowerShell.xlsmOption ExplicitFunction execPowerShell(psCmd...
VBA

Excelの各シートの先頭に連番を振るVBAのサンプルコード

シート名の先頭に連番を振るVBAのサンプルコードを紹介します。仕様Excelファイルの各シートの先頭に連番を振ります。以下のようなサンプルファイルを用意してテストします。うまくいけば以下のようにシート名が変わります。実行前のシート名ABCD実行後のシート名01_A02_B03_C04_Dソースコードシート上にはボタン等は置きません。Visual Basic Editorを開き、ThisWorkbook上にそのまま、下記のaddSheetNumber()関数を配置しました。ソースコードOption Explicit Sub addSheetNumber() Dim i As Long For i = 1 To ThisWorkbook.Worksheets.Count Dim newSheetName As String newSheetName = Format(i, "00") & "_" & Worksheets(i).Name Worksheets(i).Name = newSheetName Next End Sub実行では上記のVBAを実行します。実行手順「開発」メニューから...
VBA

文字列を分割して1文字ずつセル入力するVBAのサンプルコード

文字列を分割して1文字ずつセル入力する、VBAのサンプルコードを紹介します。いわゆるExcel方眼紙で1文字1セル入力する形態をVBAコードでやろうというわけです。仕様試しに以下のようなExcelシートを用意して、1文字ずつセルに入力するVBAコードを作成します。実行前実行後(イメージ)サンプルコードとテスト大きく2種類のソースコードを作って実現してみました。一般的な方法一つ目はよく見かける一般的なソースコードです。(細かいところは、人によって違ったりするのですが・・・)入力テキストの1文字目からMid関数で1文字ずつ取得して、1文字ずつOffset関数でターゲットのセルに格納します。コード(1レコード)Sub splitText1record() '入力テキスト Dim intext As String intext = ActiveSheet.Cells(1, 1).Value '出力テキストのスタート位置 Dim targetRange As Range Set targetRange = Range(Cells(1, 2).Address) Dim i As Long For ...
《広告》
VBA

シート名毎にExcelファイルを分割するVBAのサンプルコード

シート名毎にExcelファイルを分割するVBAのサンプルコードを紹介します。仕様1ブックに複数のシートが存在するExcelファイルを、シートごとにファイル分割します。実際に実行してみるために、以下のようなサンプルファイルを用意します。マクロで実行すると各シートがファイルに分裂します。実行完了後に、以下3ファイルができるイメージです。「AAA.xlsx」「BBB.xlsx」「CCC.xlsx」ソースコード今回はシートをいじらずそのまま出力したいので、シート上にボタン等は置きません。Visual Basic Editorを開き、ThisWorkbook上にそのまま、下記のSplitSheet()関数を配置しました。ソースコードOption ExplicitSub SplitSheet() Dim wkSheet As Worksheet Dim newBook As Workbook Dim newBookName As String Dim folderParent As String Dim i As Long 'シートの保存先 folderParent = ThisWorkbook....
VBA

Excel内の検索文字の文字の色を変更するVBAのサンプルコード

セル全体の色を変える方法はよく見かけるのですが、セル内の検索した文字列だけ色を変えるマクロはなかなか見かけないので、サンプルコードを作成してみました。仕様「検索文字」の欄に文字列を入力してボタンを押下すると、検索ヒットした一覧表のセル内の文字列を赤字にしてみます。セル内に複数の検索結果があっても、ヒットした文字列の色を全て変更するのがポイントです。ソースコード基本的な構文は下記のとおりです。Cells(行,列).Characters(Start:=num1, Length:=num2).Font.Color = RGB(numR,numG,numB)これを使って、サンプルコードを記述しました。Sub changeColor() Dim target As String Dim targetLength As Integer '検索対象 target = Range("B2").Value '長さ targetLength = Len(target) '表の最後までループする Dim i As Long For i = 6 To Cells(Rows.Count, 1).End(xlUp...
VBA

Excelのセル内の指定した位置から(n文字目,m文字)文字色を変更するVBAのサンプルコード

セル全体の色を変える方法はよく見かけるのですが、セル内の一部の文字列だけ色を変えるマクロはなかなか見かけないので試してみました。仕様Excelのセル内の一部の文字列の色を、VBAコードによって変更してみます。※以下は実行後のイメージ画像です。Charactersオブジェクトに開始位置と文字数を指定すると実現できるのですが、Charactersオブジェクトの動作をイメージできるように、様々なパターンで実装してみます。ソースコード基本的な構文は下記のとおりです。Cells(行,列).Characters(Start:=num1, Length:=num2).Font.Color = RGB(numR,numG,numB)これを使って、様々なパターンのサンプルコードを記述しました。Option ExplicitSub ボタン1_Click() '2文字目から3文字を色替え (カラーインデックス指定) Range("B2").Characters(Start:=2, Length:=3).Font.ColorIndex = 3 'red '3文字目から4文字を色替え (RGB指定) Range...
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行に...
《広告》