cell&range

セル内容削除

セル内容削除

worksheet.Cells.clear

セル自体の削除(詰める)

Selection.Delete 

file exist

ファイルの存在有無

Dim str As String: str = "filename"
If Dir(str) <> "" Then
    ' 有り
Else
    ' 無し
End If

ファイルが無いときのみ実行したい処理は、

If Dir(str) = "" Then
    ' 無し
End If

file location

ファイル保存するとき、


for

Dim i As Integer
For i = 1 To 10
    Debug.Print(i)
Next i

function

値渡しByVal

Sub f1 (ByVal str As String)
  'Debug.Print(str)
End Sub

Call f1("hello")

参照渡し ByRef(省略時のデフォルト)

Sub f2 (ByRef str As String)
  'Debug.Print(str)
End Sub

str="hello"
Call f2(str)

返り値ありパターン

as 型をつけるのと、最後関数名に代入。SetがいるやつはSet

Sub f1 () as String
  f1 = "hello"
End Sub

注意・その他


if

If 条件 Then
    '処理
ElseIf 条件 Then
    '処理
Else
    '処理
End if

last row

sheet_name = "Sheet Name"
max_row = Worksheets(sheet_name).Cells(Rows.Count, 1).End(xlUp).Row

number

キーボードの操作もできる。

Sub Saiban()
  For i = 12 To 34
    SendKeys (i)
    SendKeys ("{DOWN}")
  Next i
End Sub

print

コンソール

Debug.print("a")

ダイアログ

MsgBox("b")

printer

自動印刷する時

' プリンタのチェック
MsgBox Application.ActivePrinter
' プリンタの指定
Application.ActivePrinter = ""
' sheetの印刷
ActiveSheet.PrintOut

sheetname

コンソールに、シート名一覧する。

Dim i As Long
For i = 1 To Worksheets.Count
    Debug.Print Worksheets(i).Name
Next

sheetname replace

シート名全部に対して、名前置換before->after

Dim i As Long
For i = 1 To Worksheets.Count
  sn = Worksheets(i).Name
  Worksheets(i).Name = WorksheetFunction.Substitute(sn, "before", "after")
Next

variables-special

activeの変数は、使わない方がいい。


variables

'Dim str As String
Dim str As String: str = "abcd"
'Dim l As long
Dim l As long: l = 1

Array

Dim arr As Variant
arr = Array("a", "b", "c")

Dim f As Variant
For Each f In arr
    Debug.Print f
Next f

Hash

Dim dic as Object
Set dic = CreateObject("Scripting.Dictionary")
'dic.Item(1) = "a"
dic.Add("key", value)

Dim k As Variant
For Each k In dic
    Debug.Print dic.Item(k) 'Debug.Print dic(k)
Next k

Worksheet

宣言1:2行

Dim ws As Worksheet
Set ws = Sheets("Sheet1")

宣言2:1行

Dim ws As Worksheet: Set ws = Sheets("Sheet1")

直接操作1

Worksheets("Sheet Name")

直接操作2

Sheets("Sheet Name")

workbookと、worksheet指定のルール

Dim wb As Workbook
Dim ws As Worksheet
Set ws = wb.Sheets("SheetName")
' wsには、Sheets("SheetName")が代入されるわけではなく、
' wsには、wb.Sheets("SheetName")が代入されている。
' wb.wsとは書けない。
Debug.Print (ws.Cells(1,1).Value)
'または
Debug.Print (wb.Worksheets(ws.Name).Cells(1,1).Value)

wb.ws と書けないのは、ws は変数名であって、Workbookオブジェクトのメンバーではないから です。Workbookオブジェクトが持つのは Sheets や Worksheets といったコレクションやプロパティであり、任意に作った変数 ws は単なる参照先のラベルにすぎません。


workbook

宣言1

Dim wb as WorkBook
Set wb = Workbooks("Book1.xlsx")

宣言2

Dim wb As Workbook: Set wb = Workbooks("Book1.xlsx")
Dim filename As String
filename = Application.GetOpenFilename(FileFilter:="Excelファイル,*.xls*,CSVファイル,*.csv")
If filename = "False" Then Exit Sub ' キャンセル対応
Dim wb As Workbook
Set wb = Workbooks.Open(filename)
Dim ws As Worksheet
Set ws = wb.Sheets("Sheet1")
' 処理


wb.Close

write column

' 列ファイル書き出し(W)
Sub OutputColumn()
  Dim column As Long: column = ActiveCell.column
  Dim ws As Worksheet: Set ws = ActiveSheet
  Dim max_row As Long: max_row = ws.Cells(Rows.Count, column).End(xlUp).Row

  Dim output_filename As String
  output_filename = ws.Name + "_" + Format(Time, "hhmmss") + ".txt"
  output_filename = Replace(output_filename, " ", "")

  Open output_filename For Output As #1
  Dim cell_val As String
  For i = 1 To max_row
    cell_val = ws.Cells(i, column).Value
    If Len(cell_val) <> 0 Then
      Print #1, cell_val
    End If
  Next
  Close #1
End Sub