元システムエンジニア主婦のおうちでスキルアップ教室

ExcelやPowerPointの使い方・最近のITスキルこと・子供のプログラミング教育について

【初めてのVBA】01. 子育て世帯のはじめてのプログラミング

はじめに

2020年プログラミング教育が小学校で必修化されました。

プログラミング教育ってどんなことをするのかな?

私も気になっている親の一人です。

 

私はプログラミングを初めて習ったのは

大学の授業でした。

専門はプログラミングではなかったので

ほんの基本だけでしたが、

私はIT企業でシステムエンジニアとして働いていた経験があるので、

会社に入ってから本格的にプログラミングを経験しました。

 

でも、

 

同じ大学の同じ学科を出た2つ違いの妹は

違う会社で働いていますが、

Excelのマクロを自分で作ったことがないと言うし

難しそうだと言っていました。 

 

プログラミングは最初は確かに「なんだこれ?」って思うんですが、

慣れてしまえば英語の文法みたいな感じでわかるようになると思います。

 

 このブログでは

これからプログラミングを学んでみたい人向けに

まずはExcelVBAでプログラミングを伝えていきたいと思います。

 

f:id:pon-san-blog:20200801185719p:plain

はじめてのVBAプログラミング

 

VBAとは?

VBAはエクセルで使える便利機能です。

VBAVisual Basic for Applicationsの略称のことで、

Microsoftが提供するOffice(エクセルやワード、Outlookなど)

に使えるプログラミング言語のことです。

 

VBAで何ができるのか?

人が手動で行う作業を自動化することができます。

 

仕事で使う人なら、作業の効率化や、ミスの抑止に役立ちます。

Excelでデータ集計するとき、

そのデータを他のアプリ(ワードやOutlook)に転記したいときにも使えます。

 

プライベートで使う人は、家計簿だったり、

動画作成などに使うこともできますし、

プログラミングを学んでみたいという人には、

気軽に取り組める導入題材になります。

 

もう少し詳しく説明していきます。

 

 

エクセル(Excel)VBAの適用事例

VBAといえばエクセル関数の難しい版

と思われている方が多いと思います。

ほぼ正解です。

 

エクセル関数の延長線上だと考えていただければいいと思います。

(もう少し奥が深いですが)

例えばこんな事例があるかと思います。

  • 集計の自動化
  • アンケート
  • 工程管理表
  • 家計簿

 

 

ワード(Word)VBAの適用事例

あまり利用している人を聞かないですが

ワードでもVBAが使えます。

たとえばこんな事例があるかと思います。

  • エクセルデータから文書の自動作成
  • 校閲
  • ワードフォーマット統一化
  • ドキュメント解析

 

メール(Outlook)VBAの適用事例

会社だと使っている人もいるかもしれません。

Outlookメールの自動生成とかスケジュールの自動設定などに使えます。

たとえばこんな事例があるかと思います。

  • 定型メールの自動生成
  • エクセルデータと連携させたメール生成
  • スケジュール設定
  • メール解析

 

パワーポイント(PowerPoint)VBAの適用事例

正直、使っている人を聞いたことがないですね。

ただ本ブログの一番の推しです。

YouTubeSNSにアップすることのできる動画の自動作成や

仕事で使うようなプレゼンテーション資料の作成に使うことができます。

たとえばこんな事例があるかと思います。

  • mp4動画作成
  • Gif動画作成
  • Stop Motionアニメーションの作成
  • 音声入力(自動テキスト読み上げ)

 

VBAの実例

PowerPointで動画を作成しました。

 

パワポのフォントで迷ったことありませんか?

 

フォントの種類は全部で125種類!

 

これを全部見てみようと思って(笑)

1ページに1フォントずつ手動で適用した場合、

1スライド約5秒だとして全部で10分くらいかかります。

やる気にならないですよね~(笑)

 

それを

VBAプログラミングで実装すれば

スライドの生成自体は数十秒で完成します。

 

 

<プログラムの内容>

1. VBAを使って全フォントを抽出

2. フォント数だけパワーポイントのページを生成

3. 各ページにフォントを適用する

 

というものです。

 

できた動画はこちら↓↓↓

 

youtu.be

 

 

 

 

プログラミング自体は経験値次第ですが、

5分ほどでできる人もいれば

30分以上かかる人もいると思います。

 

もし手作業でかかる時間と、

プログラミングの実装でかかる時間(苦戦する時間含め)が同じなら、

プログラミングで実装してみることをお勧めします。

 

次回以降でプログラミングの内容を解説しますので、

よければブックマーク等お願いします。

 


お題「手作りしました」

 

ExcelのVBAとPowerPointを使って 楽に動画を作る方法

こんにちは。

 

このブログは

30代前半の夫婦ふたりで力を合わせて

IT系のスキルアップに役立つ記事を書いていきます。

 

電気工学・ロボットの分野を学び

会社ではソフトウェア開発に携わっている夫と

 

ユーザー系システム保守開発の会社で9年弱勤めて

現専業主婦のYuki

 

二人で記事を更新しています。

 

 

1つ目の記事は

ExcelVBAプログラムを使って

自動でPowerPointのスライドを作り、

動画ファイルにする方法を紹介します。

 

ExcelPowerPointは広く使われていて

馴染みのあるアプリですが、

これだけで動画が作れるというのを紹介したくて

作りました。

 

 

You Tubeで紹介しています^^

youtu.be

 

 動画の中で使用しているVBAのプログラムはこちら↓↓↓

 

'--- ここから ---

 

Option Explicit

Public Sub CountDownSlide()

'--- Set Excel Object ---
Dim myWorkBook As Workbook
Dim myWorkSheet As Worksheet
Set myWorkBook = ThisWorkbook
Set myWorkSheet = myWorkBook.Worksheets("カウントダウン")

'--- Set Default Value ---
Dim myFontSize, myLeft, myTop, myWidth, myHeight As Integer
myFontSize = 96
myLeft = 0
myTop = 200
myWidth = 960
myHeight = 200

'--- Set PowerPoint Object ---
Dim myPowerpointApplication As PowerPoint.Application
Set myPowerpointApplication = CreateObject("PowerPoint.Application")
myPowerpointApplication.Visible = True

'--- Create Power Point Presentation ---
Dim myPresentation As Presentation
Set myPresentation = myPowerpointApplication.Presentations.Add

'--- Define Values---
Dim myLayout As CustomLayout
Dim myText, myWaveFile, myPicture As String
Dim i, myMaxRow As Integer
myMaxRow = myWorkSheet.Cells(myWorkSheet.Rows.Count, 1).End(xlUp).Row

'--- 1st Slide ---
With myPresentation
Set myLayout = .SlideMaster.CustomLayouts(7)
Call .Slides.AddSlide(.Slides.Count + 1, myLayout)
myText = myWorkSheet.Range("B2").Value
myPicture = ThisWorkbook.Path + "\..\04_picture\03_背景\" + myWorkSheet.Range("C2").Value
With .Slides(1)
Call .Shapes.AddPicture(FileName:=myPicture, LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, Left:=0, Top:=0)
.Shapes.AddTextbox(msoTextOrientationHorizontal, Left:=myLeft, Top:=myTop, Width:=myWidth, Height:=myHeight).TextFrame.TextRange.Text = myText
.Shapes.Item(.Shapes.Count).TextEffect.FontSize = myFontSize
.Shapes.Item(.Shapes.Count).TextEffect.Alignment = ppAlignCenter
.SlideShowTransition.AdvanceOnTime = msoTrue
.SlideShowTransition.AdvanceTime = 2
End With
End With

'--- 2nd - 4th Slidea ---
myFontSize = 192
myTop = 150
With myPresentation
For i = 1 To myMaxRow - 3
Call .Slides.AddSlide(.Slides.Count + 1, myLayout)
myText = myWorkSheet.Cells(i + 2, 2).Value
myPicture = ThisWorkbook.Path + "\..\04_picture\03_背景\" + myWorkSheet.Cells(i + 2, 3).Value
myWaveFile = ThisWorkbook.Path + "\..\05_voice\01_効果音\" + myWorkSheet.Cells(i + 2, 4).Value
With .Slides(i + 1)
Call .Shapes.AddPicture(FileName:=myPicture, LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, Left:=0, Top:=0)
.Shapes.AddTextbox(msoTextOrientationHorizontal, Left:=myLeft, Top:=myTop, Width:=myWidth, Height:=myHeight).TextFrame.TextRange.Text = myText
.Shapes.Item(.Shapes.Count).TextEffect.FontSize = myFontSize
.Shapes.Item(.Shapes.Count).TextEffect.Alignment = ppAlignCenter
.SlideShowTransition.AdvanceOnTime = msoTrue
.SlideShowTransition.AdvanceTime = 1
Call .Shapes.AddMediaObject2(FileName:=myWaveFile, Left:=1000, Top:=0)
Call .TimeLine.MainSequence.AddEffect(Shape:=.Shapes(.Shapes.Count), effectid:=msoAnimEffectMediaPlay)
With .TimeLine.MainSequence
.Item(.Count).Timing.TriggerType = msoAnimTriggerAfterPrevious
End With
End With
Next
End With

'--- Last Slide ---
myFontSize = 144
myTop = 170
With myPresentation
Set myLayout = .SlideMaster.CustomLayouts(7)
Call .Slides.AddSlide(.Slides.Count + 1, myLayout)
myText = myWorkSheet.Cells(myMaxRow, 2).Value
myPicture = ThisWorkbook.Path + "\..\04_picture\03_背景\" + myWorkSheet.Cells(myMaxRow, 3).Value
myWaveFile = ThisWorkbook.Path + "\..\05_voice\01_効果音\" + myWorkSheet.Cells(myMaxRow, 4).Value
With .Slides(myMaxRow - 1)
Call .Shapes.AddPicture(FileName:=myPicture, LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, Left:=0, Top:=0)
.Shapes.AddTextbox(msoTextOrientationHorizontal, Left:=myLeft, Top:=myTop, Width:=myWidth, Height:=myHeight).TextFrame.TextRange.Text = myText
.Shapes.Item(.Shapes.Count).TextEffect.FontSize = myFontSize
.Shapes.Item(.Shapes.Count).TextEffect.Alignment = ppAlignCenter
Call .Shapes.AddMediaObject2(FileName:=myWaveFile, Left:=1000, Top:=0)
Call .TimeLine.MainSequence.AddEffect(Shape:=.Shapes(.Shapes.Count), effectid:=msoAnimEffectMediaPlay)
With .TimeLine.MainSequence
.Item(.Count).Timing.TriggerType = msoAnimTriggerAfterPrevious
End With
End With
End With

End Sub

Public Sub SaveAsMP4()

'--- Set PowerPoint Object ---
Dim myPowerpointApplication As PowerPoint.Application
Set myPowerpointApplication = CreateObject("PowerPoint.Application")

'--- Save as MP4 File ---
Dim myFileName As String
myFileName = ThisWorkbook.Path + "\..\03_movie\" + "sample1"
Call myPowerpointApplication.ActivePresentation.SaveAs(myFileName, ppSaveAsMP4)

End Sub

 

'--- ここまで ---

 

 

説明にわかりずらいところがあったり

ご意見あればぜひコメントで教えてください。