読者です 読者をやめる 読者になる 読者になる

困ったー

困ったことを調べたブログ

【エクセル2016】マクロを使うには?動かない場合は?

エクセル2016でマクロを使用するには、以前のエクセルと同じように開発メニューが表示できるようにしましょう。

 

マクロを使うには?

エクセルのマクロとは?

Visual Basicのようなスクリプトを使って、自分だけのオリジナルな処理を作成できる機能です。

いつもいつも同じ手順で繰り返しているような処理を、マクロを使って1度に処理できるようにすると事務も効率化できるでしょう。

 

マクロを使う準備は?

まず「ファイル」メニューから、「オプション」を選びます。

オプションが出たら、左側の項目から「リボンのユーザ設定」を選びます。

右側にある「開発」のチェックボックスをオンにします。

f:id:apicode:20150916092023p:plain

 

すると、「開発」メニューが表示されます。

リボンから「ビジュアルベーシックエディター」や「マクロ」といった機能をワンクリックで呼び出せるようになります。

f:id:apicode:20150916092025p:plain

 

マクロが動作するか確認するには?

実際にエクセル2016でマクロを使ってみて、マクロが動作するか確認してみましょう。

ここでは「ハローワールド」という文字をダイアログだけのプログラムを実行します。

 

まずは開発タブを選びます。タブがない場合にはオプション設定を確認しておきましょう。

次に「Visual Basic」をリボンで選びます。するとビジュアルベーシックエディターが起動します。

f:id:apicode:20150916092025p:plain

 

Sheet1」を右クリック。「コードの表示」を選びます。

または「Sheet1」をダブルクリックするだけでもOKです。

f:id:apicode:20150916092641p:plain

 

ここに文字列を入れます。

Sub test()
    MsgBox "HelloWorld!"
End Sub

f:id:apicode:20150916092642p:plain

 

カーソルがまだ文字入力の画面に残った状態で「F5」キーを押します。

するとプログラムが実行されます。

下記のように表示されます。

表示されたら「OK」を押してダイアログを閉じます。

f:id:apicode:20150916092644p:plain

 

このように

Sub プログラム名()
    命令1

 命令2....
End Sub

とマクロの命令を書いていくのが基本となります。

 

マクロで書式を設定するには?

マクロを使うと、一括して処理を行えるようになるので便利です。

今までなら、セルを選んで、「xx」メニューを出して「yy」ボタンを押して、「zz」を選んで...というのを毎回実行していました。

それをワンボタンでやれるようになると、時間的にもずいぶん楽です。

ここではセルの書式変更をしてみましょう。

 

まずサンプルとしてA1に適当な数値を入れます。

f:id:apicode:20150916094852p:plain

「開発」メニューから「VisualBasci」を選びビジュアルベーシックエディターを起動します。

Sheet1をダブルクリックして、シート用のスクリプトウィンドウを開きます。

次のように入れます。

Sub test()
   Range("A1").NumberFormatLocal = "0%"
End Sub

f:id:apicode:20150916094905p:plain

これはセル(A1)の書式設定を「パーセント表示」にしろという命令です。

F5キーを押して実行後、エクセルの画面に戻ると、セルがちゃんとパーセント表示になっています。パーセントでは1が100ですから、155は15500になっているわけです。

f:id:apicode:20150916094910p:plain

書式を数値にする

0_ と指定すると書式が文字列になります。

Sub test()
   Range("A1").NumberFormatLocal = "0_ "
End Sub

 

書式を日付にする

yyyy/m/dと指定すると書式が文字列になります。

Sub test()
   Range("A1").NumberFormatLocal = "yyyy/m/d"
End Sub

 

書式を文字にする

アットマークを指定すると書式が文字列になります。

Sub test()
   Range("A1").NumberFormatLocal = "@"
End Sub

 

マクロでセルを上下反転させるには?

選択した複数セルを上下反転させたい場合があります。

本来は「並べ替え」機能でソートすればいいのですが、数字がもっとランダムに並んでいて上下を反転させたいだけ、という場合には効果がありません。

 

f:id:apicode:20150917101026p:plain

 

こういうときはマクロは便利です。

開発>Visual Basicでエディターを起動します。

この場合、選択セルを反転させるので該当シートか、もしくはブックのウィンドウを開き以下を入力。F5キーで実行させると、上下が反転します。

Sub Hanten()
   Dim Dat1 As Variant, Dat2() As Variant
   Dim rCnt As Long, cCnt As Integer

  Dim r As Long, c As Integer

   Dat1 = Selection.Value
   rCnt = UBound(Dat1, 1)
   cCnt = UBound(Dat1, 2)
   ReDim Dat2(1 To rCnt, 1 To cCnt)
   For r = 1 To rCnt
   For c = 1 To cCnt
     Dat2(r, c) = Dat1(rCnt + 1 - r, c)
   Next c
   Next r
   Selection.Value = Dat2
End Sub

 

実行後にエクセルのシートを見ると、こんな感じです。見事に上下が反転しています。

f:id:apicode:20150917101327p:plain

 

参考:エクセル データ列の上下反転のやり方 - たとえば、A2からA100まで数... - Yahoo!知恵袋

 

マクロでエクスプローラを起動するには?

エクセルのマクロを書くため、開発メニューからビジュアルベーシックエディターを起動します。

 

シート1をダブルクリックして以下を入力。したらすぐにF5キーを押して実行します。

Sub Main()

   Dim ie As Object

   Set ie = CreateObject("InternetExplorer.Application")

   ie.Visible = True

End Sub

 

すると、インターネットエクスプローラが起動します。

f:id:apicode:20150916105840p:plain

 

 

マクロの不具合

VBAが文字化けする?

どうもエクセル自体が文字エンコードにはあまり強くない印象です。

とはいえVBAで文字化けの場合には以下の設定を確認しておきましょう。

「コントロールパネル>地域>場所の設定」を実行します。

f:id:apicode:20170501213405p:plain

 

「ユニコード対応ではないプログラムの言語」で「システムロケールの変更」を押して日本語に設定をしておきましょう。

f:id:apicode:20170501213409p:plain

 

マクロがちゃんと動かない? 

マクロがうまく動かない場合には以下チェックしてみましょう。

 

マクロの設定

「オプション>セキュリティセンター>マクロ」でマクロのオプションを選択します。

絶対安全なファイルであることが確実という場合には「すべてのマクロを有効にする」をチェックし、マクロが動作するように設定することができます。

f:id:apicode:20170501224632p:plain

 

保護ビュー

保護ビューが効きすぎると、かえって自由度が低下します。

特にネットから落としたファイルについては、セキュリティの関係で自動的に保護ビューにセットされる場合があります。

 

そこで、「オプション>セキュリティセンター>保護ビュー」で、「インターネットから取得したファイルに対して保護ビューを有効にする」のチェックをはずしたり、「安全でない可能性のある場所のファイルに対して、保護ビューを有効にする」のチェックをはずしてみましょう。

そのうえで再度ファイルをダウンロードして開いてみましょう。

f:id:apicode:20170501224838p:plain

 

エクセルを最新版に保つ

マクロを実行してフリーズやクラッシュが起きる場合、DLLのバージョンが古かったというケースもあります。

バグが改善されている可能性もありますので、エクセルのプログラム自体を最新の状態に保っておきましょう。「ファイル>アカウント>Officeの更新プログラム」から確認できます。

このブログは、ネットや書籍上の情報、個人の体験や感想を中心にまとめたものです。 正確性を期していはいますが、間違い・誤訳等あるかもしれません。 また、当サイトの情報によって生じたいかなる損失について一切の責任を負いません。 あらかじめご了承ください。