アフィリエイト広告を利用しています

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

2023年01月10日

VBA 特定のExcelファイルだけマクロを有効にする

マクロを無効としたセキュリティの警告
マクロは便利だが、様々な事が出来てしまうため、セキュリティリスクとなる場合がある。
そのため、「警告を表示してすべてのマクロを無効にする」が初期設定されている。


しかし、この設定だとその都度マクロを有効にしなければならず、
だからといって「すべてのマクロを有効にする」にしてしまうと、セキュリティリスクが高まってしまう(※)。
※ダウンロードしたものやメールで入ってきた悪意のあるファイルに対しても無条件でマクロが有効となってしまうため


では、特定のファイルだけ常にマクロを有効にしたい場合はどうすればよいか。
どうやら特定のファイルだけマクロを有効にするという設定は無い様子。


だが、Excel 2007以降では「信頼できる場所」に存在するファイルだけは常にマクロを有効にすることが可能となっている。
そのため、自分で作ったマクロなど、安全であることが分かっているファイルは「信頼できる場所」へ移動させ、セキュリティリスクを高めることなくマクロを利用する。


なお、「信頼できる場所」へ移動したファイルは「警告を表示せずに全てのマクロを無効にする」の設定になっていてもマクロの利用が可能。



「信頼できる場所」への追加設定方法

1.「ファイル」を選択
Excel画面左上の「ファイル」を選択する

2.「オプション」を選択
左メニューから「オプション」を選択する

3.「セキュリティ センター」を選択
(利用しているExcelのバージョンにより「セキュリティ センター」「トラスト センター」など表記が違う)
左メニューから「セキュリティ センター」(トラスト センター)を選択する

4.「セキュリティ センターの設定」を選択
(利用しているExcelのバージョンにより「セキュリティ センターの設定」「トラスト センターの設定」など表記が違う)
「セキュリティ センターの設定」ボタンを押下する

5.「信頼できる場所」を選択
左メニューから「信頼できる場所」を選択する

6.初期設定されているフォルダにExcelファイルを保存する。
(もしくは、「新しい場所の追加」ボタンからExcelファイルを保存しているフォルダを指定する)
Excelファイルを設定されているフォルダーに保存する

2022年12月05日

VBA Bookを上書き保存する際に複製したファイル(バックアップファイル)を自動で作成する

上書き保存したファイルと自動作成したバックアップファイル

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

 Dim path As String
 Dim name As String

 path = ThisWorkbook.path
 name = Format(Now(), "yyyymmdd") & "_" & "backup" & ThisWorkbook.name

 ThisWorkbook.SaveCopyAs Filename:=path & "\" & name

End Sub


【補足】
上書き保存の際にVBAを起動するには、「ThisWorkbook」から「BeforeSave」を選択する。
上部メニューからBeforeSaveを選択する

2022年09月28日

VBA Excel起動時に目印となる線を現在の時間へ移動する

Move_the_mark_line_when_starting_Excel.jpg

Excel起動時に目印となる線を現在の時間へ移動するプログラム

Private Sub Workbook_Open()

 Application.ScreenUpdating = False

 Worksheets(1).Activate

 '1行目より一致する時間を選択する
 Rows(1).Find(What:=Hour(Now()), LookIn:=xlValues).Select

 '線を移動させる
 With ActiveSheet.Shapes("時間").Select
  Selection.ShapeRange.Top = ActiveCell.Top '開始行を指定
  Selection.ShapeRange.Left = ActiveCell.Left + ActiveCell.Width / 2 '横位置をセルの中央に指定
 End With

 'A1セルを選択
 Range("A1").Activate

 Application.ScreenUpdating = True

End Sub


【補足1】
目印となる線を事前に作成しておく。
また、線の名前は「時間」にする。
name_the_line_time.jpg


【補足2】
ファイルを開いた際にVBAを起動するには、「ThisWorkbook」から「Open」を選択する。
Select_Open.jpg


2022年08月23日

VBA 最終行までの空白セルを選択する

B2セルから最終行までの空白セルを選択するプログラム

Sub SelectBlankCell()

 Dim blankCell As Range

 Set blankCell = Range("B2", "B" & Cells(Rows.Count, 2).End(xlUp).Row).SpecialCells(xlCellTypeBlanks)
 blankCell.Select

 MsgBox Selection.Count '選択したセル数を確認する

End Sub

2022年02月14日

VBA 条件に一致したセル数を数える

Count_the_number_of_cells_that_match_the_conditions.jpg
条件に一致したセル数を数える場合はCountIfを利用する


Sheet2のC2セルから最終行までのデータ数をカウントする(※対象データは「test」)

Sub MatchCellsCount()

 Dim maxRow As Integer
 Dim dateCount As Integer

 maxRow = Sheets("Sheet2").Cells(Rows.Count, 3).End(xlUp).Row
 dataCount = WorksheetFunction.CountIf(Sheets("Sheet2").Range("C2", "C" & maxRow), "test")

 MsgBox "testは" & dataCount & "件です"

End Sub

2021年11月02日

VBA 最終行までの空白セル数を取得する

Get_the_number_of_blank_cells.jpg

B2セルから最終行までの空白セル数を取得するプログラム

Sub GetBlankCells()

 Dim blancCellCount As Integer

 blankCellCount = WorksheetFunction.CountBlank(Range("B2", "B" & Cells(Rows.Count, 2).End(xlUp).Row))

 MsgBox blankCellCount

End Sub

2021年08月13日

VBA  VBA(VBE)のモジュール名を変更する

VBAを使って業務アプリケーションを作成していくと、どんどんプロシージャの数が増えていく。

このとき「標準モジュールの名前を変更したい」と思い、モジュール名を右クリックしてもメニューに[名前の変更]というコマンドは見つからない。

モジュール名を変更するには、以下の操作を行う。


1)プロジェクトから名前を変更したいモジュールを選択
プロジェクトでモジュールを選択している画像


2)メニューバーの「表示」→「プロパティ ウィンドウ」をクリック
メニューバーでプロパティ ウィンドウを選択している画像


3)プロパティウィンドウが表示される
プロパティ ウィンドウを表示した画像


4)「(オブジェクト名)」の右側に表示されたモジュール名を変更する
モジュール名を変更した画像


5)Enterキーを押下するかマウスカーソルをテキストフィールドからはずせば、モジュール名が変更される
モジュール名の変更完了画像

2021年03月08日

VBA 関数に変数を利用する

C列で0以上の数をカウントしA1セルへ表示する.jpg
原則として文字列はダブルクォーテーション(")で囲む必要がある。
つまり、文字列の両端は必ずダブルクォーテーション(")でなければならない。

では、行番号などの変数を式の中に組み込む場合はどうするか。

ダブルクォーテーションに囲まれた間は文字列として扱われるため、「&」演算子と変数はダブルクォーテーションで囲まれた外側に置かなければならない。

注意すべきは、関数の引数に文字列を指定する場合。
その場合はダブルクォーテーションを2つ("")並べて利用する。



C列で0以上の数をカウントしA1セルへ表示するプログラム

Sub CountNumber()

 Dim rowsNumber As Integer

 rowsNumber = Cells(Rows.Count, 3).End(xlUp).Row

 Range("A1").Value = "=COUNTIF(C1:C" & rowsNumber & ","">=0"")"

End Sub

2020年09月29日

VBA Sub と Function の使い分け

「Subは、単独で実行できる」、「Functionは、呼ばれて動く」という役割がある。
また、「Subは、戻り値がない」、「Functionは、戻り値を返せる」という特徴もある。


【Subプロシージャ】
 ・マクロとして呼び出すことが出来る
 ・戻り値を返すことができない

【Functionプロシージャ】
 ・マクロとして呼び出すことが出来ない
 ・戻り値を受け渡せる


使い分けとしては、「戻り値を受け取るか、受け取らないか」「マクロとして呼び出すか、呼び出さないか」で使い分ける。

 「マクロ」として呼び出す必要がある場合はSub関数が必須となり、
 「戻り値を受け取る」必要がある場合はFunction関数が必須となる。

2020年07月21日

VBA RangeとCellsの範囲指定サンプル

RangeとCellsを利用した範囲指定のサンプル


B1セルの指定
  Range("B1")
  Cells(1, 2)
  Cells(1,”B”)

A1〜B3セルの範囲指定
  Range("A1:B3")
  Range("A1", "B3")
  Range(Cells(1, 1), Cells(3,2))
  Range("A1", Cells(3,2))
  Range("A1:A3", "B1")

A1とB3セルの指定
  Range("A1,B3")

1〜3行の範囲指定
  Range(Rows(1), Rows(3))
  Range("1:3")

1〜3列の範囲指定
  Range(Columns(1), Columns(3))
  Range("A:C")

全セル指定
  Range(Rows(1), Columns(1))
  Cells ※行・列を指定しない

※Cellsで取得できるセルは1つか全てであり、行や列などの複数セルは選択できない


隣接していない複数セルの範囲指定
  Union(Range("K1:K7"), Range("P1:P7")).Select

 ※隣接していない複数セルの範囲指定には Union を利用する



(注)Rangeの引数について
 Rangeの引数は2つまでしか指定できない
   Range(引数1,引数2)

 誤)
 Range("A1","B2","C1").Select
  ※コンパイルエラーが発生する

 正)
 Range("A1,B2,C1").Select



【関連記事】 Rangeの利用例

その買うを、もっとハッピーに。|ハピタス
\ハピタスの紹介キャンペーンです/
⇒登録後に行う「ハピタス検定」の答えはこちら

※ハピタスをもっと知りたいかたは他で検索してみてください

ブログ内を検索
ファン
カテゴリ
よく倒されますが、へこたれながら起き上がるSEの備忘録です

Windows(20)
SQL(1)
JAVA(4)
VBScript(14)
VBA(15)
Other(14)
書籍(1)
記事ランキング
  1. 1. 確率の収束に必要な試行回数
  2. 2. no img Tera Term(テラターム) 覚えておくと便利なコマンド一覧
  3. 3. no img VBScript マウスポインタを自動的に移動させクリックするスクリプト
  4. 4. no img Windows ディスク使用率100%を改善させる
  5. 5. VBScript タスクスケジューラのメッセージを最前面に表示するスクリプト
広告
会員登録せずに無料で読める!! 漫画読み放題のサービス

動画編集・YouTuberを始めたい方向け 無料動画編集ソフト

クラウド型レンタルサーバー クラウド型レンタルサーバー

Amazonで購入する
※Amazonのアソシエイトとして、七転八起SEの備忘録は適格販売により収入を得ています。

メンタルヘルス・マネジメント検定試験II種ラインケアコース過去問題集_2023年度版
メンタルヘルス・マネジメント検定試験II種 過去問題集〈2023年度版〉

×

この広告は30日以上新しい記事の更新がないブログに表示されております。