【索引、index】 Macユーザー向け Excel2019 VBA 入門
2021年6月17日以降、【Microsoft365】Excel for Mac(Excel2019 for Mac 相当)で検証した「Macユーザー向け Excel VBA 記事」の索引(index)となります。
Excel2019 相当の新記事(当ブログ)は 説明用画像を全て撮り直し、再検証いたします! (表示はダークモードを利用)
「記事公開開始時に【Microsoft365】サブスクリプションで提供される 最新Office に含まれる Excel for Mac 」で検証していますので、「永続版(つまり、買い切り)の Excel for Mac 2019 、Excel for Mac 2021 」の場合は多少の差異があるかもしれません。
当初は「Excel2016 for Mac 相当」の 旧ブログ記事の焼き直し となりますが、今回は最終的に AppleScript (言わば、応用篇)まで踏み込もうと思っていますので ご期待ください。
【索引、index】 Macユーザー向け Excel2019 VBA 入門
[00] Excel VBA から AppleScript を実行し、フォルダ内の全ファイル名を取得
(1) Excel2016 for Mac 以降 MacScript コマンドの代替となった AppleScriptTask コマンドの利用方法を解説。 UTF-8テキストファイルの入出力やPDFからテキスト抽出機能も追加!
(2) 改良版は、フォルダ階層(子フォルダ)&クリップボード 対応!
(3) Excelシートの追加・削除・編集も! + VBEウィンドウサイズ変更を VBAで(表示位置も)! VBE は Visual Basic Editor の略で、VBA用の統合開発環境。
[00] Microsoft365 Personal (旧 Office365 Personal)は Amazon で安く購入して、「サブスクの期限」を延長したほうがお得です!
クレカ定価購入は損! Mac版 Microsoft365 Personal インストール・アンインストール方法
[00] 【Mac】メイリオ, MSゴシック等の MS Office フォント を Office以外のアプリでも利用可能に!
Mac "Font Book" アプリ に認識(macOSに MS Officeフォントを認識)させる方法
[01] Excel の「マクロの記録」で保存される内容(実はVBAコード)を確認してみよう!
無料で標準添付の VBA を使わない手はない!
VBA xlsmファイル形式 開発タブ マクロ モジュール Module1 Macro1() VBE
[02] Excel の「マクロの記録」で保存されるVBAコードを弄ってみよう!
安全なマクロ (VBA) を含んでいる Excel ファイルのみ、「マクロを有効」に。
マクロを有効にする(セキュリティ) Range Range〜.Select .Color VBEからマクロを実行 HTMLカラーコード RGB関数 Rem コメント
[03] VBA 用語説明(基礎)+ VBE環境設定1(Option Explicit + フォント設定)
VBA を学習するにあたり、最低限必要な用語を説明。 インテリセンス 利用方法も!
「Option Explicit」 「戻り値を返す Function (関数)プロシージャ」 「戻り値を返さない Sub プロシージャ」 Sub 「End Sub」 Range Select Selection Interior With 「End With」 オブジェクト プロパティ メソッド ステートメント 関数 インテリセンス
[04] コードの説明は後にして、VBAで「カラーチャート」を作ろう!
VBAコードは、テキストエディタで編集後「コピー&貼り付け」可能! VBA文法チェックは、「VBAProject のコンパイル」にて!
「Option Explicit」 Cells Range Interior.Color Value Callステートメント For 〜 Next 制御文でループ(繰り返し)処理を実行
[05] VBA「カラーチャート」コードの説明!
(おまけ解説) ※ Excel for Mac では「 VBA ユーザーフォーム」を利用できない!
Cells Range Font.Color Dim 変数 Const 定数 Variant Integer Long String 「ActiveSheet.Cells.Clear」 「For 〜 Next 制御文でループ(繰り返し)処理を実行」
「If 〜 Then 〜 Else 〜 End iF で条件分岐」 Int関数 文字列リテラル 暗黙の型変換 CStr関数 Cells.Address(False, False) Range.Address
[06] Excel ユーザー定義関数の作成
Excelワークシートからも呼び出せる「関数」を作成してみよう!
ExcelVBA VBA Macユーザー向けVBA入門 初めてのVBA VisualBasicforApplication Excel2019forMac Function 返り値 引数 ユーザー定義関数
[07] Excel ユーザー定義関数の作成2(再帰関数)
C言語みたいに「再帰」を利用したユーザー定義関数を作成してみよう!
ExcelVBA VBA Macユーザー向け VBA入門 初めてのVBA Excel2019forMac 再帰 再帰関数 If文 ByRef ByVal
[08] ByVal・ByRef 指定により結果が異なる場合(2つのサンプル)
文字列操作と数値操作の例、状況に応じて ByVal (値渡し) キーワードを付加!
String Integer MsgBox ByVal 値渡し ByRef 参照渡し ポインタ渡し ByRefがデフォルト
[09] 個人用マクロブック(PERSONAL.XLSB) と 「スタートアップ(XLStart)」フォルダ
作成した「ユーザー定義関数」を他のブックから呼び出す方法
個人用マクロブック PERSONAL.XLSB スタートアップフォルダ XLStart スタートアップフォルダの共有 ユーザー定義関数の呼び出し 代替スタートアップフォルダー ブックの非表示 ブックの再表示
最後まで読んでいただき、ありがとうございます。 また、お越しくださいませ。
// アタル
twiiterにて連絡させて頂きました。木下です。
macにてpdfデータを読み込みWordへ転記しさらにExcelに転記するといったマクロです。
コードは以下になりあます。
Sub main()
Application.ScreenUpdating = False
Const SubDirName = "サンプル" ' 処理対象フォルダ名
Const SheetName = "メイン" ' 処理結果出力シート
Dim folderPath As String
Dim fileName As String
Dim ws As Worksheet
folderPath = ThisWorkbook.Path & "\" & SubDirName
Dim objectFso As Object
Set objectFso = CreateObject("Scripting.FileSystemObject")
Dim objectTmp As Object
' 不要なシートを削除する
Application.DisplayAlerts = False
For Each ws In Worksheets
If ws.Name <> SheetName Then ws.Delete
Next ws
Application.DisplayAlerts = True
Dim typeResult As Result ' 読み取り結果格納用
Dim tempResult As Result ' 初期化用
Dim lonRow As Long
lonRow = 6 ' 記載開始位置
' PDFを読み取り
For Each objectTmp In objectFso.GetFolder(folderPath).Files
If (LCase(objectFso.GetExtensionName(objectTmp)) = "pdf") Then
typeResult = tempResult
typeResult = readPDF(folderPath, objectFso.GetFileName(objectTmp))
'--------------------------
' 結果を出力
'--------------------------
' 物件住所
ThisWorkbook.Worksheets(SheetName).Cells(lonRow, 2).Value = typeResult.strPropertyAddress
' マンション名
ThisWorkbook.Worksheets(SheetName).Cells(lonRow, 3).Value = typeResult.strCondominiumName
' 家屋番号
ThisWorkbook.Worksheets(SheetName).Cells(lonRow, 4).Value = typeResult.strHouseNumber
' 所有者
ThisWorkbook.Worksheets(SheetName).Cells(lonRow, 6).Value = typeResult.strOwner
' 所有者住所
ThisWorkbook.Worksheets(SheetName).Cells(lonRow, 8).Value = typeResult.strOwnerAddress
' 登記情報
ThisWorkbook.Worksheets(SheetName).Cells(lonRow, 9).Value = typeResult.strRegistrationInformation
' 登記平米
With ThisWorkbook.Worksheets(SheetName).Cells(lonRow, 10)
.NumberFormat = "@"
.Value = typeResult.strRegisteredSquaremeters
End With
lonRow = lonRow + 1
End If
Next objectTmp
ThisWorkbook.Worksheets(SheetName).Activate
MsgBox ("処理完了")
Application.ScreenUpdating = True
End Sub
エラーが発生する箇所としましては
Dim objectFso As Object
Set objectFso = CreateObject("Scripting.FileSystemObject")
ここです。エラーコード"429"にて"ActiveX コンポーネントはオブジェクトを作成できません。"です。
お力を貸していただけると幸いです。
使用office Wordは2019です。
全VBAコードを木下さんが記述されたのなら、移植(ポーティング)可能かもしれません。
ポイントは「Windowsでしか動作しない箇所(OS依存コード)」を判別する事です。
その箇所を「VBAを利用した別の方法で実現」するか、諦めるか、"AppleScript"で実装するかの 3択 となります。
( Excel2019以降の"AppleScript"実装は、筆者も勉強中 )
いずれにしろ、1行ずつ根気良くデバッグするしかありません。
以下に、気付いた点を列挙しますね。
Const SubDirName = "SAMPLE"
ファイル名やフォルダ名が日本語というだけで きちんと動作しない可能性があるため、テストする際のファイル名やフォルダ名は「アルファベット8文字まで」が無難です。 問題なく動作したら、「日本語のフォルダ名やファイル名」で試してみましょう。 対応コードが必要なため、SubDirName内に「子フォルダ」は無しで。
Windowsでも OneDriveなどクラウドにファイルが保存(バックアップ)される場合 パスがきちんと取得できない場合が多いため、ローカル(PC本体のみにファイルを含めたフォルダが保存される)環境でテストしましょう。
folderPath = ThisWorkbook.Path & Application.PathSeparator & SubDirName
パス区切り文字も、OS依存のため。 必要なら Windwos or Mac をVBA上で判別して、別々のコードを記述可能です。
Dim objectFso As Object
Set objectFso = CreateObject("Scripting.FileSystemObject")
CreateObject が含まれるため、OS依存箇所です。 "ActiveX"うんぬんは、(同一の機能がMacに移植されない限り)Windows環境でしか動作しません。
「mac vba CreateObject」で検索してみて下さい!
幸い、Excel2019(相当のMicrosoft365版Excelを含む)では Win100%互換は保証できませんが フォルダ操作可能な「Dir関数」が利用可能になりました。
「フォルダ内に存在する全ファイル」を一つずつ処理するだけなら、「Dir関数」で代用できるはずです。
お仕事の関係で「移植(ポーティング)」された方の記事を紹介しておきます。 「vba dir関数」で検索すれば、具体的な利用方法も解ります。
https://the-forme.net/note/spreadsheet/mac2019permission/
readPDF関数がどのように実装(Word-VBA依存?)されているのか判りませんが、OS依存コードが含まれるのであれば その箇所を「VBAを利用した別の方法で実現」するか、諦めるか、"AppleScript"で実装するかの 再度 3択 となります。
どうしても、Mac上で動作させたいのであれば(特に同一VBAコードで Win Mac 両方動かす)、1行ずつ 根気よく デバッグするしかありません。
以上、テレビを見ながら 纏めた程度のアドバイスしか(無償では)できなくて申し訳ありません。
ありがとうございました!
根気よく対応してみます!
AppleScriptTask を利用し、以下の3機能を VBA から利用可能に!
[1] 子フォルダを含め、フォルダ内の全ファイル名の取得
[2] テキストファイルの入出力
[3] PDFファイル内の全テキストを抽出
https://mac-excel-vba.blogspot.com/search/label/AppleScriptTask
Good website ,, visit my web https://info-kita.net/
Terima kasih telah berkunjung dari Indonesia, mungkin karena template "JetTheme".