エクセル備忘録VBA編

動的配列の宣言

Dim MyArray() As String

 

指定したファイル(開いていること)にワークシートを追加し、名前を付ける

             Workbooks("Filename.xls").Sheets.Add

Workbooks("Filename.xls").ActiveSheet.Name = "SheetName"

 

エクセル関数をVBAで使う 事例では、関数 count を使っている

d = WorksheetFunction.Count(Range("E:E"))

 

指定したセルの読み上げ  バージョン2002以降。

Range("Q25").Speak

 

自己パス名を取得(その1)最後に\付き

MyPath = Left(ActiveWorkbook.FullName, _

Len(ActiveWorkbook.FullName) - Len(ActiveWorkbook.Name))

 

自己パス名を取得(その2)最後に\なし

              ActiveWorkbook.Path

 

アクティブなファイル名を取得

myfile = ActiveWorkbook.Name

 

アクティブなファイル名を取得(フルパス付き)

myfile = ActiveWorkbook.FullName

 

マクロを実行しているファイル名を取得

myfile = ThisWorkbook.Name

 

ワークシートの数

Worksheets.Count

 

シート名の表示

MsgBox Worksheets(SheetNO).CodeName

 

ユーザーフォームの表示

              UserForm.show

 

ユーザーフォームの非表示

Unload UserForm

 

ユーザーフォーム上のチェックボックスのチェックを調べる

If UserForm1.CheckBox1.Value = True Then

MsgBox “チェックされています。

              End If

 

ワークシートウインドウの最小化

ActiveWindow.WindowState = xlMinimized

 

ワークシートウインドウの最大化

ActiveWindow.WindowState = xlMaximized

 

選択範囲のセルの書式を文字列にする

Columns("F:L").Select

Selection.NumberFormatLocal = "@"

 

エクセルファイルを開く

        Workbooks.Open Filename:=ActiveWorkbook.Path & "\" & エクセルファイル名

 

ファイルオープンのダイアログボックスを開き、エクセルファイルを開きます。

Application.Dialogs(xlDialogOpen).Show

 

ファイルオープンのダイアログボックスでファイル名を取得

Filename:フルパス付き Filename2:ファイル名のみ)

Dim Filename As Variant

Dim Filename2 As Variant

Filename = Application.GetOpenFilename _

                      ("csvファイル (*.csv), *.csv", , "ファイルの選択", , False) ‘True とすると複数選択可能

                      Filename2 = Dir(Filename)

 

アクティブなエクセルファイルのクローズ

ActiveWorkbook.Close

 

エクセルファイルのクローズ

        Workbooks(エクセルファイル名).Close

 

エクセルファイルを保存せずにクローズ

Workbooks(ActiveWorkbook.Name).Close savechanges:=False

 

エクセルファイルを保存してクローズ

Workbooks(ActiveWorkbook.Name).Close savechanges:=True

 

開いているエクセルファイルに名前を付けて保存する

        Workbooks(開いているファイル名).SaveAs (新しいファイル名)

 

ファイルの削除

Kill myXlsFile

 

テキストファイル・バイナリファイルの処理(シーケンシャル入力モード、バイト単位での入力)。

    myFNo = FreeFile                           '使用可能なファイル番号を取得

    Open myCsvFile For Input As #myFNo        ' ファイルをシーケンシャル入力モードで開きます。

    MaxSize = LOF(myFNo)                     ' ファイルのサイズをバイト数で取得します。

' FortNextループを使って、

    For NextChar = 1 To MaxSize - 1 Step 1            ’すべての文字を前から読み込みます。

        Seek #myFNo, NextChar                 ' 位置を設定します。

        MyChar = Input(1, #myFNo)                 ' 文字を読み込みます。

                            ‘ここで処理をします。

    Next NextChar

    Close #myFNo                                                      ' csvファイルを閉じます。

テキストファイルの処理(シーケンシャル入力モード、行単位での入力)。

 

    myFNo = FreeFile                                                '使用可能なファイル番号を取得

    Open myTextFile For Input As #myFNo             ' ファイルをシーケンシャル入力モードで開きます。

    Do While Not EOF(myFNo)                                 ' ファイルの終端までループを繰り返します。

            Line Input #myFNo, myBuf                    ' 行を変数に読み込みます。

                                    ‘ここで処理をします。

    Loop

    Close #myFNo                                                      'ファイルを閉じます。

 

シート間のコピーペースト(その1

Worksheets("Sheet3").Rows("1:1").Copy

Worksheets("Sheet2").Paste (Rows("1:1"))

 

シート間のコピーペースト(その2

Worksheets(S_sheet).Rows(row_no).Copy (Worksheets(D_sheet).Rows(D_row_no))

 

セル幅を指定

Columns("D:D").ColumnWidth = 6.5

 

セルの高さを指定

Rows("9:9").RowHeight = 40.5

 

列の非表示

Columns("B:B").EntireColumn.Hidden = True

 

列の表示

Columns("B:B").EntireColumn.Hidden = False

 

 

確認のメッセージを出さずにSheet2を削除する

Application.DisplayAlerts = False

Worksheets("Sheet2").Delete

Application.DisplayAlerts = True

 

Yes (ms=6) No (ms=7) の確認ダイアログ 

        ms = MsgBox("メッセージ。続けますか?", vbYesNo)

 

メッセージダイアログボックス内で改行する

MsgBox("改行して二行で表示します。" & vbCr & _

                    "これが二行目です。")

 

正の整数のみを入力する

Do

MyValue = InputBox("正の整数のみを入力します")

Loop Until MyValue > 0 And IsNumeric(MyValue) = True

 

アクティブなシートを保護する

ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

 

アクティブなシートの保護を解除する

ActiveSheet.Unprotect

 

円を描く

Set WShape = Worksheets("Sheet1").Shapes

Set Obj1 = WShape.AddShape(msoShapeOval, h_oval, v_oval, 18, 18) ‘ 18, 19 とすれば楕円形

With Obj1

.Fill.Visible = msoFalse  '塗りつぶし無し

.Line.Weight = xlThin    '線を細線に、xlThinの代わりに1, 2, 3, 4 でもよい

.Name = "maru1"

End With

 

円を削除

With Worksheets("Sheet1")

.Shapes("maru1").Delete

End With

 

Range()の使い方  この例では、セルA1からA10までに空白文字列を入れている

              For T = 1 To 10

                            Range("A" & T) = “”

              Next T

 

範囲を指定して印刷

                ActiveSheet.PageSetup.PrintArea = "$A$1:$AO$46"

                ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

 

一時的にプリンタを切り替える

tmpprtname = ActivePrinter                         ‘アクティブプリンタ名を保存

Application.ActivePrinter = "プリンタ名、マクロの記録で取得すること"

ここで処理

Application.ActivePrinter = tmpprtname     ‘保存していたプリンタ名を戻す

 

Withの使い方

With Workbooks(1).Worksheets(1)

.Cells(RowPos1, 3) = 1

.Cells(RowPos1, 3) = 2

.Cells(RowPos1, 3) = 3

.Cells(RowPos1, 3) = 4

End With

 

Setの使い方

Set WS = Worksheets(1).Worksheets(1)

WS.Cells(RowPos2, 3) = 1

WS.Cells(RowPos2, 3) = 2

WS.Cells(RowPos2, 3) = 3

WS.Cells(RowPos2, 3) = 4

 

Functionの使い方

              Sub Main()

                            MsgBox Fname(10)          ‘ 5と表示されます。

              End Sub

Function Fname(a)

              Fname = a / 2

End Function