SlideShare uma empresa Scribd logo
1 de 6
Baixar para ler offline
EXCEL-VBA勉強会 初級者コース A-1
2019/04/21
'============================================================
VBA開発環境
開き方
 開発→Visual Basic
左側のツリー
 Sheet1 にマクロを書くと、シートを消すとマクロも消える
 ThisWorkbook にマクロを書くと・・・?
 ↓
 挿入 標準モジュール をつくって、ここにマクロを書く
イミディエイトウィンドウ
 …デバッグ用
マクロ本文に Debug.Print name1 などと書いて途中のデータ値を確認する
 …1行だけの文を実行できる
  ? name1
  と書いてEnterを押すと name1 の値が表示される
  マクロの1行ごとの動作確認することで、構文エラーを事前に確認できる
'============================================================
InputBox()の ()をつける/つけない
マクロ文:実行するときは
  InputBox "may I know name?"
で大丈夫
マクロ文:代入するときは
  name = Inputbox( "may I know name?")
と()が必要
イミディエイトウィンドウで実行するときは
  ? Inputbox( "may I know name?")
と()が必要
'============================================================
マクロ文の作成で便利な機能
Ctrl+space でオブジェクト、メンバー、メソッドの候補が出る
TAB で候補から選ぶ
Ctrl+Z で入力を破棄(戻る)
破棄をやめる(=元に戻す)時は アイコン「やり直し入力」を使う
エクセルの Ctrl+Y は、VBAでは行削除なので悲惨
最初にアイコン「コメントブロック」は 表示→ツールバーで”編集”にチェックを入れておく
複数行をコメントアウトする時は アイコン「コメントブロック」
'============================================================
マクロ文の留意点
ボタンに割り付けるためには Public で宣言しておく
private の procedure はボタンに割付けできない
マクロ実行の結果は Ctrl+Z で戻らない
…マクロでセルを消した時は、Ctrl+Zで戻りません
変数を sub の外で定義すると、
全てのprocedureで共用できる=各々のprocedureで提示しなくてもよい
副作用 他のprocedureで変更された値が共有されるので意図しない値になっていることがある
'============================================================
マクロを作るときの作法
条件が変わった時に、ユーザーがマクロ文を書き換える必要がないように
ユーザーが変更するシートを限定し、どのセルに何を書くのかを決めておく
具体的には
・シート output をつくり
 ユーザーが変更するようなことはこのシートに列挙しておく
・マクロの先頭で、シート input に書かれた値を読み込み、変数に代入して使う
変数の命名ルール(マクロを作る前に決めておく)
 定数…大文字で始める
 変数…小文字で始める
 ※予約語(マクロの命令、オブジェクト名、等と同じ単語)は使えない。
'============================================================
マクロ文の実例
MsgBoxで指示を受け取ることもできる
 MsgBox("消してもいいですか", vbOKCancel)
' 1 vbOK
' 2 vbCancel
 MsgBox("三択で指示してください", vbYesNoCancel)
' 6 vbYes
' 7 vbNo
' 2 vbCancel
with オブジェクト~end with の間は、オブジェクトの記述を省略できる
=マクロ文の記述が楽になる
 (オブジェクトの表示文字数が長い場合は)マクロを読み易くなる
ActiveSheet.Range("A:A").Copy ・・・ コピー
ActiveSheet.Range("C:C").Insert ・・・ 挿入
ActiveSheet.Range("C:C").PasteSpecial ・・・ 形式を選択して貼り付け
'============================================================
作成したマクロ
'------------------------------------------------------------
Option Explicit
Public Sub MyMsg01()
'メッセージボックスに表示する
'comment
MsgBox "Hello VBA!"
End Sub
'------------------------------------------------------------
Public Sub MyConsole01()
'イミディエイトウィンドウに表示する
Debug.Print "Hello VBA console!"
End Sub
'------------------------------------------------------------
Public Sub MyInpurt()
Dim name1 As String
name1 = InputBox("may I know name?")
Debug.Print name1
MsgBox name1
End Sub
'------------------------------------------------------------
Private Sub MyNumber01()
Dim num1 As Long
' 数値型に文字列は代入できない
' num1 = "100"
num1 = 100
Debug.Print num1
Dim str1 As String
str1 = "100"
Debug.Print num1 + str1
' 200 が表示される
Debug.Print num1 & str1
' 100 100 と表示される
Debug.Print str1 + num1
' 200 が表示される
'Debug.Print "test: " + str1 + num1
' エラー 型が一致しない
Debug.Print "test: " & str1 + num1
' test: 200 が表示される
Debug.Print "test: " & str1 & num1
' test: 100100 が表示される
' 数値と文字をつなげて表示させるときは & でつなぐ
End Sub
'------------------------------------------------------------
Public Sub MyWrite01()
' セルに値を書き込む
ActiveSheet.Range("a1").value = "A1に書き込む"
' inputbox に入れた値を直接セルに書く
ActiveSheet.Range("a1").value = InputBox("please input value 1st?")
' 行を折り返す時は _ を使う
ActiveSheet.Range("a1").value = _
InputBox("please input value 2nd?")
' 作法にそって値の型を宣言すること
Dim val As String
val = InputBox("please input value 3rd?")
ActiveSheet.Range("a1").value = val
' range に複数セルを指定すると
Dim val As String
val = InputBox("please input value 4th?")
ActiveSheet.Range("a1:c9").value = val
End Sub
'------------------------------------------------------------
Public Sub MyWrite02()
' セルに値を書き込む
Dim val As String
val = InputBox("please input value")
ActiveSheet.Cells(1, 2).value = val
End Sub
'------------------------------------------------------------
Public Sub MyClear01()
' range指定で消す
' ActiveSheet.Range("A1:C9").Clear
' ActiveSheetだと大切なデータを消してしまうのでシートを指定する
'Sheets("Sheet1").Range("A1:C9").Clear
Dim confirm As Integer
confirm = MsgBox("消してもいいですか", vbOKCancel)
' 1 vbOK
' 2 vbCancel
If confirm = vbOK Then
Sheets("Sheet1").Range("A1:C9").Clear
Else
MsgBox "キャンセルされました"
End If
End Sub
'------------------------------------------------------------
Private Sub myIf01()
Dim confirm As Integer
confirm = MsgBox("三択で答えてもらう場合", vbYesNoCancel, "3つめの引数でMsgBoxのタイトルを指定
できる")
' 2 vbCancel
' 7 vbNo
' 6 vbYes
' 戻り値を知らなくても、定数の名前を知っておけばよい
If confirm = vbYes Then
Debug.Print "vbYes vbYes"
ElseIf confirm = vbNo Then
Debug.Print "vbNo vbNo"
ElseIf confirm = vbCancel Then
Debug.Print "vbCancel vbCancel"
End If
End Sub
'------------------------------------------------------------
Public Sub MyRead01()
' セルから値を読み込む
' 定数は最初に宣言し、値を決めておく
' InputSn : inputシート名
Const InputSn As String = "input"
Const MyNameRange As String = "B1"
Dim name As String
'name = Sheets("input").Range("B1").Value
' 定数は最初に宣言すると…
name = Sheets(InputSn).Range(MyNameRange).value
Debug.Print name
End Sub
'------------------------------------------------------------
Public Sub MyFor01()
' For文で0から10までカウントアップ
Dim ProcStart As Long
ProcStart = 0
Dim ProcEnd As Long
ProcEnd = 10
Dim i As Integer
'For i = 0 To 10 Step 1
'変数を使ってみる…
For i = ProcStart To ProcEnd Step 1
Debug.Print i
Next
End Sub
'------------------------------------------------------------
Public Sub MyProg()
' シートouputの列名の開始行から終了行までを値で埋める
Const OutputSn As String = "output"
Const InputSn As String = "input"
Const ProcCol As String = "B2"
Dim vProcCol As String
Const ProcStart As String = "B3"
Dim vProcStart As Long
Const ProcEnd As String = "B4"
Dim vProcEnd As Long
Const Procvalue As String = "B5"
Dim vProcvalue As String
Dim i As Integer
' 設定値を読み込む
vProcCol = Sheets(InputSn).Range(ProcCol).value
vProcStart = Sheets(InputSn).Range(ProcStart).value
vProcEnd = Sheets(InputSn).Range(ProcEnd).value
vProcvalue = Sheets(InputSn).Range(Procvalue).value
' with を使うと記述が楽になる
' With Sheets(InputSn)
' vProcCol = Range(ProcCol).value
' vProcStart = Range(ProcStart).value
' vProcEnd = Range(ProcEnd).value
' vProcvalue = Range(Procvalue).value
' End With
' 三択で指示を受ける
Dim confirm As Integer
confirm = MsgBox("Range指定で一気に埋める…Y for文で一つずつ埋める…N 消す…キャンセル",
vbYesNoCancel)
If confirm = vbYes Then
' rangeで指定して一気に埋める
Sheets(OutputSn).Range(vProcCol & vProcStart & ":" & vProcCol & vProcEnd).value =
vProcvalue
ElseIf confirm = vbNo Then
'for文で一つずつ埋める
For i = vProcStart To vProcEnd Step 1
Sheets(OutputSn).Range(vProcCol & i).value = vProcvalue & vProcvalue
Next
ElseIf confirm = vbCancel Then
Sheets(OutputSn).Range(vProcCol & vProcStart & ":" & vProcCol & vProcEnd).Clear
End If
End Sub
'------------------------------------------------------------
Public Sub MyInsert01()
Const OutputSn As String = "output"
Const InputSn As String = "input"
Const ProcSrc As String = "B7"
Dim vProcSrc As Long
Const ProcDst As String = "B8"
Dim vProcDst As Long
Const ProcCount As String = "B9"
Dim vProcCount As Long
Dim i As Integer
' 設定値を読み込む
vProcSrc = Sheets(InputSn).Range(ProcSrc).value
vProcDst = Sheets(InputSn).Range(ProcDst).value
vProcCount = Sheets(InputSn).Range(ProcCount).value
' 設定値をwithで読み込むと値が全てゼロになる=読み込めない?
' With Sheets(InputSn)
' vProcSrc = Range(ProcSrc).value
' vProcDst = Range(ProcDst).value
' vProcCount = Range(ProcCount).value
' End With
Debug.Print vProcSrc
Debug.Print vProcDst
Debug.Print vProcCount
' 設定値をwithで読み込むと値が全てゼロになる=読み込めない?
With Sheets(OutputSn)
For i = 1 To vProcCount
Range(vProcSrc & ":" & vProcSrc).Copy
Range(vProcDst & ":" & vProcDst).Insert
' Range(vProcDst & ":" & vProcDst).PasteSpecial 'ペースト
Next
End With
End Sub
'------------------------------------------------------------

Mais conteúdo relacionado

Último

Service-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadershipService-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadership
Yasuyoshi Minehisa
 
物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす
物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす
物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす
Michael Rada
 

Último (9)

UP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチ
UP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチUP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチ
UP103シリーズ パワーコメット ユニパー スライドレールタイプ 瓦揚げ機 ウインチ
 
company profile.pdf
company profile.pdfcompany profile.pdf
company profile.pdf
 
事例DBサービス紹介資料(Case Study DB service introduction)
事例DBサービス紹介資料(Case Study DB service introduction)事例DBサービス紹介資料(Case Study DB service introduction)
事例DBサービス紹介資料(Case Study DB service introduction)
 
Service-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadershipService-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadership
 
セルフケア研修で使えるカードゲーム『攻略!きみのストレスを発見せよ!: ゲームで身につくストレスマネジメント』
セルフケア研修で使えるカードゲーム『攻略!きみのストレスを発見せよ!: ゲームで身につくストレスマネジメント』セルフケア研修で使えるカードゲーム『攻略!きみのストレスを発見せよ!: ゲームで身につくストレスマネジメント』
セルフケア研修で使えるカードゲーム『攻略!きみのストレスを発見せよ!: ゲームで身につくストレスマネジメント』
 
物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす
物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす
物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす
 
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdfストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
 
シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料
シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料
シンフォニティ株式会社(SYMPHONITY , Inc.) 会社説明・人材採用資料
 
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
 

Destaque

Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Saba Software
 
Introduction to C Programming Language
Introduction to C Programming LanguageIntroduction to C Programming Language
Introduction to C Programming Language
Simplilearn
 

Destaque (20)

How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
 
Introduction to C Programming Language
Introduction to C Programming LanguageIntroduction to C Programming Language
Introduction to C Programming Language
 

memo_VBA_A-1

  • 1. EXCEL-VBA勉強会 初級者コース A-1 2019/04/21 '============================================================ VBA開発環境 開き方  開発→Visual Basic 左側のツリー  Sheet1 にマクロを書くと、シートを消すとマクロも消える  ThisWorkbook にマクロを書くと・・・?  ↓  挿入 標準モジュール をつくって、ここにマクロを書く イミディエイトウィンドウ  …デバッグ用 マクロ本文に Debug.Print name1 などと書いて途中のデータ値を確認する  …1行だけの文を実行できる   ? name1   と書いてEnterを押すと name1 の値が表示される   マクロの1行ごとの動作確認することで、構文エラーを事前に確認できる '============================================================ InputBox()の ()をつける/つけない マクロ文:実行するときは   InputBox "may I know name?" で大丈夫 マクロ文:代入するときは   name = Inputbox( "may I know name?") と()が必要 イミディエイトウィンドウで実行するときは   ? Inputbox( "may I know name?") と()が必要 '============================================================ マクロ文の作成で便利な機能 Ctrl+space でオブジェクト、メンバー、メソッドの候補が出る TAB で候補から選ぶ Ctrl+Z で入力を破棄(戻る) 破棄をやめる(=元に戻す)時は アイコン「やり直し入力」を使う エクセルの Ctrl+Y は、VBAでは行削除なので悲惨 最初にアイコン「コメントブロック」は 表示→ツールバーで”編集”にチェックを入れておく 複数行をコメントアウトする時は アイコン「コメントブロック」 '============================================================ マクロ文の留意点 ボタンに割り付けるためには Public で宣言しておく private の procedure はボタンに割付けできない マクロ実行の結果は Ctrl+Z で戻らない …マクロでセルを消した時は、Ctrl+Zで戻りません 変数を sub の外で定義すると、 全てのprocedureで共用できる=各々のprocedureで提示しなくてもよい 副作用 他のprocedureで変更された値が共有されるので意図しない値になっていることがある '============================================================ マクロを作るときの作法 条件が変わった時に、ユーザーがマクロ文を書き換える必要がないように ユーザーが変更するシートを限定し、どのセルに何を書くのかを決めておく
  • 2. 具体的には ・シート output をつくり  ユーザーが変更するようなことはこのシートに列挙しておく ・マクロの先頭で、シート input に書かれた値を読み込み、変数に代入して使う 変数の命名ルール(マクロを作る前に決めておく)  定数…大文字で始める  変数…小文字で始める  ※予約語(マクロの命令、オブジェクト名、等と同じ単語)は使えない。 '============================================================ マクロ文の実例 MsgBoxで指示を受け取ることもできる  MsgBox("消してもいいですか", vbOKCancel) ' 1 vbOK ' 2 vbCancel  MsgBox("三択で指示してください", vbYesNoCancel) ' 6 vbYes ' 7 vbNo ' 2 vbCancel with オブジェクト~end with の間は、オブジェクトの記述を省略できる =マクロ文の記述が楽になる  (オブジェクトの表示文字数が長い場合は)マクロを読み易くなる ActiveSheet.Range("A:A").Copy ・・・ コピー ActiveSheet.Range("C:C").Insert ・・・ 挿入 ActiveSheet.Range("C:C").PasteSpecial ・・・ 形式を選択して貼り付け '============================================================ 作成したマクロ '------------------------------------------------------------ Option Explicit Public Sub MyMsg01() 'メッセージボックスに表示する 'comment MsgBox "Hello VBA!" End Sub '------------------------------------------------------------ Public Sub MyConsole01() 'イミディエイトウィンドウに表示する Debug.Print "Hello VBA console!" End Sub '------------------------------------------------------------ Public Sub MyInpurt() Dim name1 As String name1 = InputBox("may I know name?") Debug.Print name1 MsgBox name1 End Sub '------------------------------------------------------------ Private Sub MyNumber01() Dim num1 As Long ' 数値型に文字列は代入できない ' num1 = "100" num1 = 100 Debug.Print num1 Dim str1 As String str1 = "100"
  • 3. Debug.Print num1 + str1 ' 200 が表示される Debug.Print num1 & str1 ' 100 100 と表示される Debug.Print str1 + num1 ' 200 が表示される 'Debug.Print "test: " + str1 + num1 ' エラー 型が一致しない Debug.Print "test: " & str1 + num1 ' test: 200 が表示される Debug.Print "test: " & str1 & num1 ' test: 100100 が表示される ' 数値と文字をつなげて表示させるときは & でつなぐ End Sub '------------------------------------------------------------ Public Sub MyWrite01() ' セルに値を書き込む ActiveSheet.Range("a1").value = "A1に書き込む" ' inputbox に入れた値を直接セルに書く ActiveSheet.Range("a1").value = InputBox("please input value 1st?") ' 行を折り返す時は _ を使う ActiveSheet.Range("a1").value = _ InputBox("please input value 2nd?") ' 作法にそって値の型を宣言すること Dim val As String val = InputBox("please input value 3rd?") ActiveSheet.Range("a1").value = val ' range に複数セルを指定すると Dim val As String val = InputBox("please input value 4th?") ActiveSheet.Range("a1:c9").value = val End Sub '------------------------------------------------------------ Public Sub MyWrite02() ' セルに値を書き込む Dim val As String val = InputBox("please input value") ActiveSheet.Cells(1, 2).value = val End Sub '------------------------------------------------------------ Public Sub MyClear01() ' range指定で消す ' ActiveSheet.Range("A1:C9").Clear ' ActiveSheetだと大切なデータを消してしまうのでシートを指定する 'Sheets("Sheet1").Range("A1:C9").Clear Dim confirm As Integer confirm = MsgBox("消してもいいですか", vbOKCancel) ' 1 vbOK ' 2 vbCancel If confirm = vbOK Then Sheets("Sheet1").Range("A1:C9").Clear Else MsgBox "キャンセルされました"
  • 4. End If End Sub '------------------------------------------------------------ Private Sub myIf01() Dim confirm As Integer confirm = MsgBox("三択で答えてもらう場合", vbYesNoCancel, "3つめの引数でMsgBoxのタイトルを指定 できる") ' 2 vbCancel ' 7 vbNo ' 6 vbYes ' 戻り値を知らなくても、定数の名前を知っておけばよい If confirm = vbYes Then Debug.Print "vbYes vbYes" ElseIf confirm = vbNo Then Debug.Print "vbNo vbNo" ElseIf confirm = vbCancel Then Debug.Print "vbCancel vbCancel" End If End Sub '------------------------------------------------------------ Public Sub MyRead01() ' セルから値を読み込む ' 定数は最初に宣言し、値を決めておく ' InputSn : inputシート名 Const InputSn As String = "input" Const MyNameRange As String = "B1" Dim name As String 'name = Sheets("input").Range("B1").Value ' 定数は最初に宣言すると… name = Sheets(InputSn).Range(MyNameRange).value Debug.Print name End Sub '------------------------------------------------------------ Public Sub MyFor01() ' For文で0から10までカウントアップ Dim ProcStart As Long ProcStart = 0 Dim ProcEnd As Long ProcEnd = 10 Dim i As Integer 'For i = 0 To 10 Step 1 '変数を使ってみる… For i = ProcStart To ProcEnd Step 1 Debug.Print i Next End Sub '------------------------------------------------------------ Public Sub MyProg() ' シートouputの列名の開始行から終了行までを値で埋める Const OutputSn As String = "output" Const InputSn As String = "input" Const ProcCol As String = "B2" Dim vProcCol As String Const ProcStart As String = "B3" Dim vProcStart As Long Const ProcEnd As String = "B4" Dim vProcEnd As Long Const Procvalue As String = "B5" Dim vProcvalue As String Dim i As Integer
  • 5. ' 設定値を読み込む vProcCol = Sheets(InputSn).Range(ProcCol).value vProcStart = Sheets(InputSn).Range(ProcStart).value vProcEnd = Sheets(InputSn).Range(ProcEnd).value vProcvalue = Sheets(InputSn).Range(Procvalue).value ' with を使うと記述が楽になる ' With Sheets(InputSn) ' vProcCol = Range(ProcCol).value ' vProcStart = Range(ProcStart).value ' vProcEnd = Range(ProcEnd).value ' vProcvalue = Range(Procvalue).value ' End With ' 三択で指示を受ける Dim confirm As Integer confirm = MsgBox("Range指定で一気に埋める…Y for文で一つずつ埋める…N 消す…キャンセル", vbYesNoCancel) If confirm = vbYes Then ' rangeで指定して一気に埋める Sheets(OutputSn).Range(vProcCol & vProcStart & ":" & vProcCol & vProcEnd).value = vProcvalue ElseIf confirm = vbNo Then 'for文で一つずつ埋める For i = vProcStart To vProcEnd Step 1 Sheets(OutputSn).Range(vProcCol & i).value = vProcvalue & vProcvalue Next ElseIf confirm = vbCancel Then Sheets(OutputSn).Range(vProcCol & vProcStart & ":" & vProcCol & vProcEnd).Clear End If End Sub '------------------------------------------------------------ Public Sub MyInsert01() Const OutputSn As String = "output" Const InputSn As String = "input" Const ProcSrc As String = "B7" Dim vProcSrc As Long Const ProcDst As String = "B8" Dim vProcDst As Long Const ProcCount As String = "B9" Dim vProcCount As Long Dim i As Integer ' 設定値を読み込む vProcSrc = Sheets(InputSn).Range(ProcSrc).value vProcDst = Sheets(InputSn).Range(ProcDst).value vProcCount = Sheets(InputSn).Range(ProcCount).value ' 設定値をwithで読み込むと値が全てゼロになる=読み込めない? ' With Sheets(InputSn) ' vProcSrc = Range(ProcSrc).value ' vProcDst = Range(ProcDst).value ' vProcCount = Range(ProcCount).value ' End With Debug.Print vProcSrc Debug.Print vProcDst Debug.Print vProcCount ' 設定値をwithで読み込むと値が全てゼロになる=読み込めない? With Sheets(OutputSn) For i = 1 To vProcCount Range(vProcSrc & ":" & vProcSrc).Copy Range(vProcDst & ":" & vProcDst).Insert ' Range(vProcDst & ":" & vProcDst).PasteSpecial 'ペースト Next End With End Sub