VBA

VBA

VBAによるswap関数(2つの変数の値を交換)のサンプルコード

VBAによるswap関数(2つの変数の値を交換)のサンプルコードを紹介します。SWAP関数とはSWAP関数とは「二つの変数の値を入れ替える」基本的な関数です。ソートアルゴリズムを学ぶ際に、SWAP関数は必ず必要な知識になります。ここではVBAで、2ステップに分けてSWAP関数を作成していきます。二つの変数の値を入れ替えるコードを作成する上記のコードをSWAP関数化する二つの変数の値の入れ替えまずはシンプルに2つの変数の値を入れ替えます。関数化は後で実施します。ソースコードThisWorkbookの下にソースコードを記述しました。swap1.xlsmOption ExplicitSub main() Dim dataA As String Dim dataB As String Dim temp As String dataA = "AAAA" dataB = "BBBB" MsgBox "実行前:" & Chr(13) + Chr(10) & dataA & "," & dataB temp = dataA dataA = dataB dataB = temp MsgBox "実行後:...
VBA

Excelのセルの末尾の余分な改行をまとめて削除するVBAのサンプルコード

Excelのセルの末尾の余分な改行をまとめて削除するVBAのサンプルコードを紹介します。仕様下記のシートのA列のように文末に余分に改行があるとします。※B列に補足を入れていますこれを以下のシートのように、余分な改行を削除するVBAを考えました。文章の途中の改行は残しつつ、文末の改行だけを消すのです。ソースコードソースコードは以下のとおりです。Option ExplicitSub deleteLineBreak() Dim i As Long For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row Dim CellValue As String CellValue = Worksheets("Sheet1").Cells(i, 1).value '文字数回繰り返す Dim j As Long For j = 1 To Len(CellValue) '最後の文字が改行コードの場合 If Right(CellValue, 1) = vbLf Or Right(CellValue, 1) = vbCr Then '最後の文字以外を格納 CellValue...
VBA

郵便番号一覧から住所を求めていくREST APIを使ったVBAのサンプルコード(zipcloud版)

郵便番号一覧から住所を求めていく、REST APIを使ったVBAのサンプルコードを公開してみます。使用するWebAPIExcel単体で住所情報検索はできないので、下記「郵便番号検索API」の力を借ります。サービス名郵便番号検索API運営株式会社アイビスURL概要郵便番号検索APIは、日本郵便が公開している郵便番号データを検索する機能をRESTで提供しています。仕様画面仕様表のA列に住所を求めたい「郵便番号」の一覧を入力しています。表の右に住所出力の実行ボタンが配置されています。実行ボタンを押下すると、B列とC列に「住所」と「住所(カナ)」が出力されます。ソースコードSub ボタン1_Click() Dim objXMLHttp As Object, zipArr Dim yubinNo As String Dim splitLine() As String Dim i As Long i = 2 '行番号 Do While Cells(i, 1).value <> "" '入力値からハイフンの削除 yubinNo = Replace(Worksheets("Sheet1").Cells...
PowerShell

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

VBAからPowerShellのコマンドを実行するサンプルコードを2パターン作成してみました。この記事ではそのうちの戻り値が不要で取得しないパターンを紹介します。準備事前準備として、VBAからPowerShellコマンドを実行するには以下の設定が必要です。ツールバーから「参照設定」を選択「Windows Script Host Object Model」のライブラリファイルにチェックを入れます。仕様VBAからPowerShellコマンドを呼び出します。テストで実行するPowerShellのコマンドはなんでもよいのですが、ここでは「Rename-Item」にしてみましょう。マクロファイル(xlsm)と同じディレクトリにファイル「File1.txt」を置き、マクロからPowerShell経由でファイル名を変更してみます。マクロを実行したらファイル名が、「File1.txt」から「File2.txt」になります。見出し念のため補足しますが、実現している処理自体はVBAからPowerShellを経由する必要性はありません。マクロからPowerShellを実行する方法をテストするためにやっていま...
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...