見出し画像

【総復習】ガチ初心者と一緒に、Excelでnoteのタグ解析ができるツールを作ってみよう《1~6》

これまで文章形式で解説を続けてきたので、要点だけをまとめた記事を出しておこうと思います。

《6》までの内容の総復習となっておりますので、内容を忘れてしまった方、時間がなくて連載記事を追えない方、新しく始めて追いつきたい方などにご活用いただければ幸いです。

かなりざっくりとした解説になるので、そこに至るまでの仕組みや考え方を知りたい方は、是非本編の方も見てやってください。

それでは、宜しくお願い致します。


今回の内容はこんな感じです↓


A1セルに「こんにちは」と入力するコード

Sub test()
 
 Dim ws As Worksheet
 Set ws = ActiveSheet
  
 Dim rg As Range
 Set rg = ws.Range("A1")
 
 Dim message As String
 message = "こんにちは"
 
 rg.Value = message
 
End Sub


Sub(サブルーチン)

Sub 任意の手続き名 ()

   ~細かい命令~

End Sub
Sub は、「ここから大きな命令のまとまりをはじめます」という宣言です(Sub Routineの略)。

細かい命令をこの単位にまとめることで初めて、人間の目に見えるプログラムが実行されます。


Dim(変数の宣言)

Dim 任意の変数名 As 変数の形式
Dimはコードの中で「~という変数を~という形で使うよ」という宣言です(Dimensionの略)。

プログラムの中で操作する対象や値に名前を付ける(変数に代入する)ことで、指示の手順を短縮できます。

変数には、宣言した型以外のものは代入できません。


オブジェクトとプロパティ

画像1

オブジェクト=操作する対象(エクセル本体、エクセルブック、ワークシート、セル範囲 など)
プロパティ=オブジェクトの設定項目

オブジェクトは Excel > Worksheet > Range のように入れ子の構造になっている。


変数にオブジェクト/データを代入する

'オブジェクトの場合'
Dim 変数名 As オブジェクトの型
Set 変数名 = 変数にセットするもの

'それ以外の場合'
Dim 変数名 As データ型
変数名 = 変数にセットするデータ

※行の先頭にシングルクォーテーション「'」を入れることで、コードから除外できる(コメントアウト)


ワークシートを取得する

WorkbookオブジェクトのSheetsプロパティで取得する。

'特定のブックからシート名で取得する'
Set Worksheet型の変数 = Workbookオブジェクト.Sheets("シート名")

'アクティブなブックからシート名で取得する'
Set Worksheet型の変数 = Sheets("シート名")

'アクティブなブックからアクティブなシートを取得する'
Set Worksheet型の変数 = ActiveSheet


セル範囲を取得する

WorksheetオブジェクトのRangeプロパティで取得する。

'特定のシートからセルの範囲名で取得する'
Set Range型の変数 = Worksheetオブジェクト.Range("セルの範囲名")

'アクティブなシートからセルの範囲名で取得する'
Set Range型の変数 = Range("セルの範囲名")

'アクティブなシートからアクティブなセル範囲を取得する'
Set Range型の変数 = ActiveCell


セル範囲の値を取得する

RagneオブジェクトのValueプロパティで取得する。

値が入る型の変数 = Rangeオブジェクト.Value


セルに値を代入する

RangeオブジェクトのValueプロパティに代入します。

'1セルのみのセル範囲'
Rangeオブジェクト.Value = 値

'複数のセルを含むセル範囲'
Rangeオブジェクト.Value = 値(同じ形のセル範囲から取得したVariant型の値)


オブジェクトとプロパティの関係

例)RangeオブジェクトのValueプロパティがセルの値

セルの値 = Rangeオブジェクト.Value

例)WorksheetオブジェクトのRangeプロパティがセルの範囲

セルの範囲(Rangeオブジェクト) = Worksheetオブジェクト.Range("セルの範囲名")

例)オブジェクト構造に厳密な値の取得方法

セルの値 = Application.ThisWorkbook.Sheets("シート名").Range("セルの範囲名").Value

※プロパティを指定する際、特にオブジェクトが指定されない場合はアクティブなオブジェクトのプロパティを取得する。



デバッグ

〇変数の値を見る

Debug.Print 表示させたい値

〇データの型を調べる

Debug.Print TypeName(データ)

※イミディエイトウィンドウを開いている必要があります。


エラー・バグに対処する

プログラムが想定外の動きをしたり、思いがけず停止してしまった時は、次の順で確認をする。

①結果を素直に受け入れ、何が間違いかを探しに行く

②文法を正しく記述できているか

③変数の中身をエラー箇所から順番に確認する

分からなければ先人に訊く


シート「コピー元」のセル範囲「A1:H1」から、シート「貼り付け先」のセル範囲「A1:H1」にセルの値をコピーするコードと解説

Sub copyData()

  Dim ws1 As Worksheet        
  Set ws1 = Sheets("コピー元")
  Dim rg1 As Range
  Set rg1 = ws1.Range("A1:H1")

  Dim data As Variant
  data = rg1.Value
  
  Dim ws2 As Worksheet
  Set ws2 = Sheets("貼り付け先")
  Dim rg2 As Range
  Set rg2 = ws2.Range("A1:H1")
  
  rg2.Value = data
  
End Sub
copyDataという名前の手続きは以下の通りである。」

   「ws1という変数をワークシートの形で宣言」
   「ws1は”コピー元”という名前のシート」
   「rg1という変数をセル範囲の形で宣言」
   「rg1ws1の”A1:H1”という名前の範囲」

   「dataという変数を不定形で宣言」
   「datarg1の値すべて」

   「ws2という変数をワークシートの形で宣言」
   「ws2は”貼り付け先”という名前のシート」
   
   「rg2という変数をセル範囲の形で宣言」
   「rg2ws2の”A1:H1”という名前の範囲」

   「rg2の値すべてはdata」

「以上」





記事は基本無料公開にしようと思うので、やまびこの明日のコーヒー代くらいは恵んでやってもいいぜという方は、お気軽にご支援ください。気長にお待ちしております。