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 = False

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の利用例

2020年04月21日

VBA 配列を戻り値として受け取る

Functionから戻り値を受け取る配列は動的配列にしておく


Sub HairetsuTest()

    Dim receiveNo() As Long
   
    receiveNo() = GetNeedData()
   
    MsgBox receiveNo(0) & vbCrLf & receiveNo(1)
       
End Sub


Function GetNeedData()

    Dim sendNo(1) As Long
   
    sendNo(0) = 1000
    sendNo(1) = 2000

    GetNeedData = sendNo()
   
End Function

2020年03月18日

VBA Rangeの利用例

Rangeの後に何が記載されるかで、全く違う意味合いとなる。見落としに注意する。


Range("B1")
 B1セルを指定する

Range("B1").column
 B1セルの列番号を取得する → B1セルの列番号:2 を返す

Range("B1").Row
 B1セルの行番号を取得する → B1セルの行番号:1 を返す

Range("B1").Count
 指定(選択)しているセルの数を取得する

Range("B1").Clear
 B1セルの値をクリアする

Range("B1").Insert
 B1セルへセルを挿入する → 挿入後下方向にシフトする

Range("B1").Address
 B1セルのアドレスを取得する


【関連記事】 RangeとCellsの範囲指定サンプル

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

※ハピタスをご存じないかたは他で検索してみてください

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

Windows(20)
SQL(8)
JAVA(4)
VBScript(13)
VBA(13)
Other(13)
書籍(1)
記事ランキング
  1. 1. no img 確率の収束に必要な試行回数
  2. 2. no img VBScript マウスポインタを自動的に移動させクリックするスクリプト
  3. 3. no img Windows ディスク使用率100%を改善させる
  4. 4. no img Eclipse ホットコード置換に失敗しました
  5. 5. VBScript タスクスケジューラのメッセージを最前面に表示するスクリプト
広告

クラウド型レンタルサーバー サイト運用しない方には不要です‥

ドメイン名取得サービス 超人気ドメイン「.com」「.net」
国内最安値1円です!!

Amazon.co.jpで購入する
画像をクリックするとAmazonのサイトにジャンプします