ihara

よく使うものを備忘録として

データ型

msgbox

MsgBox? "Hello world"
MsgBox? 変数

Option Explicit

変数の宣言を強制する。

モジュールの先頭に書いて、しっかり宣言しておいた方がいい。

セル

セルの取得

Range("A1") = Cells(1,1)  = Cells(1,"A")

Range("B1") = Cells(1,2)  = Cells(1,"B")

連続範囲の取得

Range("A1:C5").Select = Range(Cells(1, 1), Cells(5, 3))

=Range(Cells(1, "A"), Cells(5, "C"))  

不連続範囲の取得

Range("A1,B5,D6") = Union(Cells(1, 1), Cells(5, 2), Cells(6, 4))

Range("A1:C3,B5:D7") = Union(Range(Cells(1, 1), Cells(3, 3)), Range(Cells(5, 2),Cells(7, 4)))

変数を組み合わせたセル範囲の選択

Range("A1" & ":" & 変数)

変数はアドレス

Range("A2:B" & 変数行番号)

変数は行番号など数

cells(m,n) m:行 n:列

行、列

Rows("1:1")

Columns("A:A")

最終行番号の取得

Range("A1").CurrentRegion?.End(xlDown).Row

アクティブシートの左下(A列)の行番号を取得

上記のは、連続したデータの一番下の行数を取得するが、間に空白などがある場合はそこまでの行数を取得するので、空白がある場合はシートの一番下の行数が取得できていないことがある。そういったとき用に

Cells(ActiveSheet?.Rows.Count, 1).End(xlUp).Row

シート

シート名

Worksheets("Sheet1").Name

()はインデックス番号でもokなので、ループ中の変数と組み合わせてよく使う

ブック

文字列の一部抽出

Left 関数、Right 関数、Mid 関数など

書式:Left(string, length):文字列の左端から指定した文字数分の文字列

書式:Right(string, length):文字列の右端から指定した文字数分の文字列

書式:Mid(string, start[, length]):文字列の左端から指定した文字数分の文字列を返します

EX)シート名をセル内の情報としておいておく用に作ったもの

   '// ワークシートの名前を抽出して、セルに入力
   Sub sheetname抽出()
   '//変数定義はここでは略
    For intLoop = 1 To Worksheets.Count
   '// 画面更新の停止
   Application.ScreenUpdating = False    
     Worksheets(intLoop).Select
     '//アクティブシートの左下の行番号取得
     Rows = Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
     '//シートの名前取得
     MyDate = Worksheets(intLoop).Name
     '//シートの日付、人、部位の入力
       Range("Q2:Q" & rows) = Left(MyDate, 8)
       Range("R2:R" & rows) = Mid(MyDate, 10, 2)
       Range("S2:S" & rows) = Mid(MyDate, 12, 2)
    Next intLoop
   End Sub

Tips

引数の受け渡し

ex)

Sub MA()
A% = 10
B% =5
SA A,B
End Sub

Sub SA(X%, Y%)
Z = X + Y
MsgBox? Z
End Sub

Aに10、Bに5を代入して、プロシージャSAに引数としてA,Bを渡す プロシージャMAから変数X,Yに引数である変数A,Bを受け取る ZにX+Yを加算結果を代入 MsgBox?関数を用いてZを表示(15)

画面の更新停止(処理速度向上)

Application.ScreenUpdating? = False

シートの結合

Sub MergeSheets?()

 Dim intLoop As Integer
 
 '// 画面更新の停止
 Application.ScreenUpdating = False
 
 '// 先頭にワークシートを1枚追加
 Worksheets.Add before:=Worksheets(1), Count:=1
 
 For intLoop = 2 To Worksheets.Count
   '// 元データを選択してコピー
   Worksheets(intLoop).Select
   Range("A1").CurrentRegion.Select
   If intLoop > 2 Then
     Selection.Resize(Selection.rows.Count - 1).Offset(1).Select
   End If
   Selection.Copy
   '// 先頭のワークシートに貼り付け
   Worksheets(1).Select
   If intLoop = 2 Then
     Range("A1").Select
   Else
     Cells(ActiveSheet.rows.Count, 1).End(xlUp).Offset(1).Select
   End If
   ActiveSheet.Paste
 Next intLoop
 
 '// コピーモードを解除して全シートのA1セルを選択
 Application.CutCopyMode = False
 Worksheets.Select
 Range("A1").Select
 Worksheets(1).Select
 
 '// 画面更新停止の解除
 Application.ScreenUpdating = True
 
 '// 完了メッセージ
 MsgBox "「" & Worksheets(1).Name & "」に全ワークシートのデータをまとめました。"

End Sub

数値切り上げ

エクセル関数を用いて

x = Application.Round(5.13 , 0)

x=5

x = Application.Round(5.13 , 1)

x=5.1

x = Application.Round(4.13 , -1)

x=10

xは数値

0

ihara


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS