2010年07月28日 (水) 10時07分59秒;
EXCEL覚え書き
クリックしたセルの色を変更する
(シート内のModuleに)
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
ActiveSheet.Rows.Interior.ColorIndex = xlNone
Rows(Target.Row).Interior.ColorIndex = 15
End Sub
(指定した行のみ動作させる)
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If ActiveCell.Row < 4 Then Exit Sub
ActiveSheet.Rows("4:104").Interior.ColorIndex = xlNone
Rows(Target.Row).Interior.ColorIndex = 15
End Sub
スクロール位置を先頭に戻す
ActiveWindow.ScrollColumn = 1
ActiveWindow.ScrollRow = 1
印刷範囲を可変設定にする
1.メニュー>挿入>名前>定義>を選択する。
2.名前定義ダイアログで、Print_Areaを選択する。
3.参照範囲に「=OFFSET($A$1,0,0,COUNTA($A:$A),100)」を入力する。
A列のデータ行の数によって、印刷範囲が可変する。
【OFFSET関数】OFFSET(基準, 行数, 列数, 高さ, 幅)
相対パスで指定する
変数 = ThisWorkbook.Path
Workbooks.Open (変数 & "\..\test.xls")
ボタンの行位置を知る
bt = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
自分自身を削除する。
Sub test()
With ThisWorkbook
.Save
.ChangeFileAccess Mode:=xlReadOnly
Kill .FullName
.Close (False)
End With
End Sub
フォルダ内のexcelファイルを検索する(サブフォルダも検索)
Sub test()
'フォルダを検索してxlsファイル特定する
Dim f, buf As String, cnt As Long, FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
With Application.FileSearch
.NewSearch
.Filename = "*.xls" ''ファイル名
.LookIn = "D:\data" ''フォルダ名
.SearchSubFolders = True ''サブフォルダも検索する
If .Execute() > 0 Then
For Each f In .FoundFiles
path_name = FSO.GetFile(f).ParentFolder ''パス
file_name = FSO.GetFile(f).Name ''ファイル名
MsgBox path_name & "\" & file_name
Next f
End If
End With
Set FSO = Nothing
End Sub
セルがエラーかどうか調べる
Set rg = Range("A1")
If Application.WorksheetFunction.IsError(rg) Then
'処理
End If
ユーザーフォームの表示位置を画面サイズの右側にする
Private Sub UserForm_Activate()
Me.Left = Application.Left + Application.Width - Me.Width
Me.Top = Application.Top + (Application.Height - Me.Height) / 2
End Sub
定期的にマクロを実行する
1秒ごとにA1に現在時刻を表示
'OnTime開始
Sub timer_start()
Application.OnTime Now + TimeValue("00:00:01"), "timer_start"
Range("A1") = Now()
End Sub
'OnTimeキャンセル
Sub timer_stop()
On Error Resume Next
Application.OnTime Now + TimeValue("00:00:01"), "timer_start", schedule:=False
End Sub
10秒ごとに10回先まで予約
Sub test()
For i = 1 To 10
Application.OnTime Now + TimeValue("00:00:10") * i, "my_Procedure"
Next i
End Sub
Sub my_Procedure()
MsgBox "きたー"
End Sub
ファイルダイアログでファイル名を取得する
fname = Application.GetOpenFilename( _
Title:="取り込みファイルの選択")
If fname = False Then
Exit Sub
Msgbox fname
End If
指定の表示形式を返す
Format(Now(), "yymmdd")
ファイルがあるかどうかチェックする
Sub filechk
strWrk= ここにパス記入
strFile=ここはファイル名
If Dir(strWrk & strFil) = "" Then
MsgBox("ファイルありません")
End If
End Sub
入力規則である条件では入力できないようにする
A1がバナナか、リンゴか、みかんのときで、なおかつ、B1が食べる以外のときは入力できないようにする。
データの入力規則で、
設定をユーザ定義
数式に、
=OR(AND(A1<>"バナナ",A1<>"リンゴ",A1<>"みかん"),B1="食べる")
処理中にWAITを入れる
Application.Wait [NOW()+"0:00:00.01"]
1/100秒停止
VBAでファイルコピー、移動
ファイルコピー
Option Explicit
Private Const cnsSOUR = "C:\AAA\SAMPLE1.txt" ' 元ファイル
Private Const cnsDEST = "C:\BBB\SAMPLE2.txt" ' 先ファイル
' ファイルコピーのサンプル
Sub COPY_SAMPLE()
' ファイルをコピー
FileCopy cnsSOUR, cnsDEST
End Sub
パスを含めた名前で指定する。
ファイル移動(コピーして元ファイル削除)
Option Explicit
Private Const cnsSOUR = "C:\AAA\SAMPLE1.txt" ' 元ファイル
Private Const cnsDEST = "C:\BBB\SAMPLE2.txt" ' 先ファイル
' ファイル移動のサンプル②
Sub MOVE_SAMPLE2()
' ファイルをコピー
FileCopy cnsSOUR, cnsDEST
' 元ファイルを削除
Kill cnsSOUR
End Sub
VBAでホームページを開く
ユーザーフォームのTextBox1にセットする
UserForm1.TextBox1 = "てきすと"
ユーザーフォームと変数をやり取りする
標準モジュールの先頭に、呼出し元のプロシージャとユーザフォームで共用したい変数名をPublicでセットします。
Public aaa, bbb
Sub test()
aaa = 3000
UserForm1.Show vbModeless
MsgBox bbb
End Sub
Private Sub UserForm_Initialize()
TextBox1.Text = aaa
bbb = 500
End Sub
他のブックのマクロを実行する
Application.Run "book1.xls!test"
※引数を渡す場合は、
Application.Run "'book1.xls'!test",aaa,bbb
例)
元ブック
Workbooks.Open Filename:=("sample.xls")
hiki1 = "りんご"
hiki2 = "おいしい"
Application.Run "sample.xls!ringo", hiki1, hiki2
先ブック
Sub ringo(hiki1, hiki2)
With UserForm1
.TextBox1 = hiki1
.TextBox2 = hiki2
.Show
End With
End Sub
既存のブックをコピーする
Sub bkcopy()
wp = ThisWorkbook.Path
Workbooks.Open Filename:=(wp & "\aaaa.xlsx"), ReadOnly:=True
Application.DisplayAlerts = False
Workbooks("aaaa.xlsx").Activate
ActiveWorkbook.SaveAs Filename:=wp & "\bbbb.xls"
Application.DisplayAlerts = True
ActiveWorkbook.Close
End Sub
ブックを読み取り専用で開く
Workbooks.Open Filename:=("BBB.xls"), ReadOnly:=True
別のブックのセルの値を取得する(ユーザフォーム)
Private Sub UserForm_Initialize()
wp = ThisWorkbook.Path
Workbooks.Open Filename:=(wp + "\aaaa"), ReadOnly:=True
with Workbooks("aaaa.xlsx")
msg = .Sheets(1).Range("a1")
.Windows(1).Visible = True
.Close
End with
TextBox1 = msg
End Sub
アクティブなブックを閉じる
ActiveWorkbook.Close
ブックをアクティブにする
Workbooks("sample.xls).Activate
ブックを保存する
ActiveWorkbook.Save
ブックを別名で保存する
ActiveWorkbook.SaveAs "Sample.xls"
他のブックのシートのセルの値を取得(リンク方式)
Range("a1") = "='" & "c:\" & "[" & "サンプル.xls" & "]シート1'!" & Range("a1")
他のブックのシートのセルの値を取得
Workbooks.Open Filename:=("サンプル.xls"), ReadOnly:=True
Range("a1") = Workbooks("サンプル.xls").Sheets(1).Range("a1")
ActiveWorkbook.Close
開いているブックを見えなくする
Workbooks("aaaa.xlsx").Windows(1).Visible = False
指定したブックが開いているか調べる
Sub Sample15()
Dim wb As Workbook, flag As Boolean
For Each wb In Workbooks
If wb.Name = "Book1.xls" Then flag = True
Next wb
If flag = True Then
MsgBox "開いています。"
Else
MsgBox "開いていません。"
End If
End Sub
エクセルを終了する
Application.Quit
条件が一致したときのみ、コントロールを表示する
例)ComboBox1が"あり"に選択のとき、ComboBox2を表示
Private Sub ComboBox1_Change()
If ComboBox1 = "あり" Then
ComboBox2.Visible = True
Exit Sub
End If
End Sub
ユーザーフォームにコンボボックスを作成する
1.ユーザーフォームにツールボックスからコンボボックスを作成する。
2.Initialize()にコンボボックスの文字列を羅列する。
Private Sub UserForm_Initialize()
With ComboBox1
.AddItem "リスト1"
.AddItem "リスト2"
.AddItem "リスト3"
.AddItem "リスト4"
End With
End Sub
乱数を発生させるマクロ
Randomize
rnd1 = Int(Rnd * 99999999 + 1)
※99999999は0~99999999の乱数
ユーザーフォーム出現位置を設定する
Private Sub UserForm_Initialize()
Me.StartUpPosition = 0
Me.Left = 20
Me.Top = 10
End Sub
覚えておくと便利なショートカットキーのこと
その1 現在日付を入力
〔CTRL〕+〔;〕
その2 現在時刻を入力
〔CTRL〕+〔:〕
その3 関数の引数を表示
〔CTRL〕+〔SHIFT〕+〔A〕
たとえば、数式バーに=IFと入力してから、〔CTRL〕+〔SHIFT〕+〔A〕と押すと、=IF(論理式,真の場合,偽の場合)と表示される。
その4 書式のみのコピペ
〔CTRL〕+〔SHIFT〕+〔C〕書式のみコピー
〔CTRL〕+〔SHIFT〕+〔V〕書式のみペースト
CALL ステートメントと、引数
他のマクロを呼び出すときに、変数を受け渡す場合は、以下を参考。
Sub test()
Call メッセージ表示("あははは")
End Sub
Sub メッセージ表示(moji)
MsgBox moji
End Sub
複数受け渡す場合は、カンマで区切って列挙する。
Sub test()
Call メッセージ表示("あははは", "いひひひ", "うふふふ")
End Sub
Sub メッセージ表示(moji1, moji2, moji3)
MsgBox moji1
MsgBox moji2
MsgBox moji3
End Sub
2つのテキストファイルの比較
A.txtとB.txtを行ごとに比較します。
Sub 比較()
Dim strREC_A As String
Dim strREC_B As String
Dim File_A As String
Dim File_B As String
Dim ForderPass As String
Dim CT As Long
ForderPass = ThisWorkbook.Path
File_A = "\A.txt"
File_B = "\B.txt"
Open ForderPass & File_A For Input As #1
Open ForderPass & File_B For Input As #2
CT = 1
st:
If EOF(1) Or EOF(2) Then
GoTo owari
End If
Line Input #1, strREC_A
Line Input #2, strREC_B
If strREC_A <> strREC_B Then
MsgBox CT & "行目 違う。" & vbCrLf & strREC_A & vbCrLf & strREC_B
End If
CT = CT + 1
GoTo st
owari:
Close #1
Close #2
MsgBox "終了。"
End Sub
テキストファイルの内容をセルに読み込む マクロ
Sub READ_TextFile()
Const cnsFILENAME = "\sample.txt"
Dim intFF As Integer ' FreeFile値
Dim strREC As String ' 読み込んだレコード内容
Dim GYO As Long ' 収容するセルの行
' FreeFile値の取得(以降この値で入出力する)
intFF = FreeFile
' 指定ファイルをOPEN(入力モード)
Open ThisWorkbook.Path & cnsFILENAME For Input As #intFF
GYO = 1
' ファイルのEOF(End of File)まで繰り返す
Do Until EOF(intFF)
' 改行までをレコードとして読み込む
Line Input #intFF, strREC
' 行を加算しA列にレコード内容を表示(先頭は2行目)
Cells(GYO, 1).Value = strREC
GYO = GYO + 1
Loop
' 指定ファイルをCLOSE
Close #intFF
End Sub
文字列をテキストファイルへ書き出す マクロ
Sub WRITE_TextFile()
Const cnsFILENAME = "\SAMPLE.txt"
Dim intFF As Integer ' FreeFile値
Dim strREC As String ' 書き出すレコード内容
' FreeFile値の取得(以降この値で入出力する)
intFF = FreeFile
' 指定ファイルをOPEN(出力モード)
Open ThisWorkbook.Path & cnsFILENAME For Output As #intFF
' 内容をレコードにセット
strREC = "test"
' レコードを出力
Print #intFF, strREC
' 指定ファイルをCLOSE
Close #intFF
End Sub
処理実行中のカーソルを砂時計にする
Application.Cursor = xlWait
元に戻すには、
Application.Cursor = xlDefault
セルの値を簡易棒グラフで表示する
以下の様な表示。
A列にパーセンテージを入力。
B列に■で棒グラフが作成される。
B列の関数
=LEFT("■■■■■■■■■■",TRUNC($A1/0.1))
※条件書式で、100%を赤く設定してあります。
エクセルで早口言葉?
ユーザーフォームのテキストボックス内での制御プロパティ
SelLength
選択されたテキストの文字数を設定します。
値の取得も可能です。
SelStart
選択されたテキストの開始点を設定します。
値の取得も可能です。テキストが選択されていないときは、
挿入ポインタの位置を示します。
SelText
現在選択されているテキストを含む文字列を設定します。
値の取得も可能です。文字が選択されていないときは、長さ 0 の文字列 ("") を返します。
例)TextBox1.SelStart = 0
カーソル位置を先頭にします。
ユーザーフォームのテキストボックス内で改行する。
EnterKeyBehaviorをTrueに設定します。
MultiLineもTrueに設定しておく必要があります。
Format関数
Format([値],"[書式設定]")
以下は書式設定
カンマ区切り : #,##0 : 1,234
¥マーク入り : \\#,##0 : \1,234
単位付き : #,##0\円 : 1,234円
小数点桁数の指定 : #,##0,0000 : 1,234.5670
小数点桁数の指定2 : #,##0,0### : 1,234.567
日付の書式 : YYYY/MM/DD HH:NN:SS : 2002/11/28 10:18:30
YYYYMMDDをYYYY/MM/DD : @@@@/@@/@@ : 20021128->2002/11/28
西暦を和暦 : GGGEE\年MM\月DD\日 : 2002/11/28->平成14年11月28日
和暦を西暦 : YYYY\年MM\月DD\日 : 平成14年11月28日->2002年11月28日
数値を曜日 : AAAA : 1->日曜日
四半期を返す : Q : 2002/01->1
郵便番号 : @@@-@@@@ : 2510871->251-0871
左に0を充填 : 00000 : 123->00123
左に半角スペースを充填 : @@@@@ : 123-> 123
全部大文字 : > : abc->ABC
全部小文字 : < : ABC->abc
曜日:aaa:2003/01/30 -> 木
カンマ区切りで0なら表示しない : #,### : 1234->1,234 0->(表示しない)
ユーザーフォームをモードレスで表示する
UserForm1.Show vbModeless
vbModelessをつけると、ユーザーフォームを表示しながら、セルの選択などができます。
ユーザーフォームで簡易プログレスバーをつくる。
1.Visual Basic Editerを開く。Alt+11
2.メニューの挿入→ユーザーフォームを選択して、フォームを新規作成する。
3.ツールボックスの、「ラベル」で以下のようにラベルを2つと、「コマンドボタン」でボタンを一つ作成する。
4.作成したコマンドボタン上で右ボタンを押して、プロパティを表示して、Captionを「OK」に変更する。
5.ユーザーフォームを選択した状態で、F7を押して、コードを表示する。
6.表示されているコードをすべて削除して、以下のコードを入力する。
Private Sub UserForm_Activate()
Label2 = "作業中です..."
lb = "■"
For i = 0 To 100
Label1 = lb
DoEvents
lb = lb + "■"
'ここから処理
For w = 1 To 10000
For x = 1 To 100
Next x
Next w
'ここまで処理
Next i
CommandButton1.Enabled = True
Label2 = "完了しました。"
End Sub
Private Sub CommandButton1_Click()
Unload Me
End Sub
7.Visual Basic Editerを閉じる。
8.新規マクロに以下を入力する。
Sub プログレス()
UserForm1.Show
End Sub
9.マクロ「プログレス」を実行する。
DATEVALUE関数とTIMEVALUE関数
指定された文字列からシリアル値を求めるものです。
例)
TIMEVALUE("6:0:0")
DATEVALUE("2008/2/14")
YEAR関数
指定した日付の年を返します。
例)YEAR(Now())
実行中のマクロを強制終了する。
- Dos/V機 [CTRL]+[Break(Pause)]
- PC9800シリーズ [CTRL]+[STOP]
他のシートのセルの内容を取得する マクロ
aaa=Worksheets("Sheet1").Range("A1")
シートがアクティブになったら、指定したマクロを実行する。
Sub Auto_Open()
'Sheet1がアクティブになったら「Macro1」マクロ実行
Worksheets("Sheet1").OnSheetActivate = "Macro1"
End Sub
曜日まで表示する表示形式設定
yyyy"年"m"月"d"日("aaa")"
シート名一覧を取得するマクロ その2
Sub シート一覧()
ct = 1
For I = 1 To Sheets.Count
shname = Sheets(I).Name
Cells(ct, 1) = shname
ct = ct + 1
Next
End Sub
データの最終行を知る マクロ
er = Range("A" & 65536).End(xlUp).Row
フォルダのコピー マクロ
c:\001の内容を%temp%\書庫へコピーします。
Sub FolderCopy()
Dim SourcFolderSpec, DestFolderSpec, TempFolder As String
Dim SourcFolder_Object, DestFolder_Object As Object
Dim FileNamePath As Variant
'環境変数TEMP を取得します
TempFolder = Environ("temp")
'Source Folder をセットします
SourcFolderSpec = "c:\001"
'Destination Folder をセットします
DestFolderSpec = TempFolder & "\書庫"
'フォルダオブジェクトを取得
Set SourcFolder_Object = CreateObject _
("Scripting.FileSystemObject").GetFolder(SourcFolderSpec)
'SourcFolderSpec内の全ファイルをDestFolderSpecにコピー
'サブフォルダも対象になります
SourcFolder_Object.Copy DestFolderSpec
MsgBox "完了しました"
End Sub
文字列の操作
=LEFT(文字列,[文字数])
:文字列の左端から指定した文字数だけ取り出す。
文字数を省略すると1を指定したことになります(1の時は省略できる)。
=RIGHT(文字列,[文字数])
:文字列の右端から指定した文字数だけ取り出す。
文字数を省略すると1を指定したことになります(1の時は省略できる)。
=MID (文字列,開始位置,文字数)
:文字列の指定した位置から指定した文字数だけ取り出す。
=SEARCH(検索文字列,対象,開始位置)
文字列が開始位置から何番目にあるかを返します
英字の大文字と小文字を区別できませんが、ワイルドカード文字を使用できます。
=FIND(検索文字列,対象,開始位置)
文字列が開始位置から何番目にあるかを返します
英字の大文字と小文字を区別できる代わりに、ワイルドカード文字を使用することができません。
選択したフォルダ内のファイル一覧を取得するマクロ
Sub ファイルリスト()
Dim filename As String 'ファイル名
Dim DrvDir As String 'フォルダパス
Dim rw As Long '行カウンタ
Dim ShellApp As Object 'ShellApp
Dim myFolder As Object 'フォルダ名
Set ShellApp = CreateObject("Shell.Application")
Set myFolder = ShellApp.BrowseForFolder(0, "フォルダ選択", 1)
If myFolder Is Nothing Then Exit Sub
DrvDir = myFolder.items.Item.Path & "\" 'フォルダパスをセットする
With Worksheets("Sheet1")
.Range("A2:A65536").ClearContents '表示用のA列をクリア
rw = 1
'フォルダを検索してファイルとフォルダを特定する
filename = Dir(DrvDir & "*.*", vbDirectory)
While filename <> ""
'順にSheet1に書き出していく
rw = rw + 1
.Range("A" & rw) = filename
filename = Dir(, vbDirectory)
Wend
End With
End Sub
ブックの共有操作のマクロ
Sub ブックの共有を解除()
'ブックの共有を解除
Application.DisplayAlerts = False
If ActiveWorkbook.MultiUserEditing Then _
ActiveWorkbook.ExclusiveAccess
End Sub
Sub ブックの共有をする()
'ブックの共有をする
Application.DisplayAlerts = False
ActiveWorkbook.KeepChangeHistory = True
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.FullName, _
AccessMode:=xlShared
End Sub
メッセージボックスのアイコン
vbCritical 警告メッセージ アイコン
vbQuestion 問い合わせメッセージ アイコン
vbExclamation 注意メッセージ アイコン
vbInformation 情報メッセージ アイコン
セル範囲指定で絶対的な座標で指定する
INDIRECT("A1:A100"))
このように設定すると、行が削除されてもA100は変化しない
メッセージボックスで改行する
MsgBox "これは" & vbCrLf & "ペンデス"
ステータスバーに表示するマクロ
Application.StatusBar = "リスト取得中です...(現在 " & rw - 3 & "件)"
実行中の自動計算をオフにするマクロ
Application.Calculation = xlCalculationManual
オンに戻すには以下のマクロ
Application.Calculation = xlCalculationAutomatic
実行中の画面の更新を無効にする
Application.ScreenUpdating = False
有効にするには、FalseをTrueです
指定した文字列が含まれる行以外を削除するマクロ
Sub 行削除()
Dim Rwe As Long
Dim R As Long
Dim delname As String
delname = InputBox("検索対象を入力してください", "検索")
If delname = "" Then
MsgBox "検索を中断します", vbInformation, "検索"
End
End If
Rwe = Range("B" & 65536).End(xlUp).Row
For R = Rwe To 1 Step -1 'To 1では、1行目から検索します
If Application.CountIf(Rows(R), "*" & delname & "*") = 0 Then '=0 を >0にすると、検索対象がある行を削除します
Rows(R).Delete
End If
Next
MsgBox delname & " 以外を除去しました", vbInformation, "検索"
End Sub
24時間を越える場合のマクロでの記述
Sub 24over()
RT = Int(Range("A1") * 24) & ":" & Format(Range("A1"), "nn:ss")
MsgBox "経過時間は" & RT & "です。"
End Sub
アクティブシートの名前を変更するマクロ
ActiveSheet.Name = シート名
アクティブブックのシートをコピーするマクロ
Sheets("シート名").Copy
シート4の後に追加コピー
Sheets("シート名").Copy Before:=Sheets(4)
ワークシートを別のBOOKへ保存するマクロ
あらかじめ、Bookと同じディレクトリに書庫というフォルダを作成しておいてください。
Sub 書庫へ保存()
yesno = MsgBox("シートを保存します よろしいですか?", vbYesNo + vbQuestion, "進捗度表")
If yesno = vbNo Then
End
End If
wpath = ThisWorkbook.Path & "\" 'パスを設定する
sheetname = ActiveWorkbook.ActiveSheet.Name 'シート名を取得する
datenow = Format(Now, "yyyymmdd") '日時を設定
savename = wpath & datenow & "_" & sheetname & ".xls" 'ファイル名設定
savename_msg = datenow & "_" & sheetname & ".xls" '表示用ファイル名設定
Sheets(sheetname).Copy 'シートを新規ブックへコピー
ActiveWorkbook.SaveAs Filename:=savename '新規ブックを保存する
ActiveWorkbook.Close '新規ブックを閉じる
Application.DisplayAlerts = False '警告メッセージオフ
Worksheets(sheetname).Delete
Application.DisplayAlerts = True '警告メッセージオン
MsgBox savename_msg & vbCrLf & "書庫へ保存しました", vbInformation, "シート保存"
End Sub
「はい」「いいえ」ダイアログを表示するマクロ
Sub 問い合わせ()
yesno = MsgBox("シートを保存します よろしいですか?", vbYesNo + vbQuestion, "問い合わせ")
If yesno = vbNo Then
End
End If
End Sub
複数条件のカウント SUMPRODUCT関数 その2
=SUMPRODUCT((A1:A10="初稿"*(MONTH(B1:B10)=3)*(ISNUMBER(FIND("出版",C1:C10)))))
A1:A10が初稿で、B1:B10が3月で、C1:C10の文字列に”出版”という文字を含んでいるならカウントする
(解説)
ISNUMBER(セル番地または計算式)
参照しているセルが数値かどうか調べる。
数値なら TRUE (1)
数値でないなら FALSE (0)
FIND(検索文字列,対象,開始位置)
参照しているセルの検索文字列の位置を調べる
含まれない場合は#VALUEとなる。
複数条件のカウント SUMPRODUCT関数
=SUMPRODUCT((A1:A10="初稿")*(MONTH(B1:B10)=3))
A1:A10が初稿でB1:B10が3月ならカウントする
シリアル値から日付データ「年」「月」「日」を取り出す
=YEAR(シリアル値)
=MONTH(シリアル値)
=DAY(シリアル値)
範囲内の最大値、最小値を求める
範囲内の最大値
=MAX(範囲)
範囲内の最小値
=MIN(範囲)
例)
=MAX(A1:A5)
=MIN(B1:B5)
=MAX(A1:A5)-MIN(B1:B5)
BOOKを開いたら、マクロを自動で実行する
Sub Auto_Open()
MsgBox "自動です" 'ここに必要な処理を記述します
End Sub
ラベルへジャンプするマクロ
GoTo ラベル:
ラベル:
例)
Sub goto001()
If ActiveCell.Value = True Then
GoTo msg1
End If
End
msg1:
MsgBox "Trueですよ"
End Sub
アクティブセルの位置を調べるマクロ
行位置
ActiveCell.Row
列位置
ActiveCell.Column
シートをアクティブにするマクロ
Worksheets("Sheet1").Activate
ワークブックを開くマクロ
Workbooks.Open Filename:=ThisWorkbook.Path & "ファイル名.xls"
アクティブセルの内容を取得するマクロ
bn = ActiveCell.Value
指定したセルに値を代入するマクロ
A5に1を代入
Cells(5,1).Value=1
指定範囲内のセルに値を代入するマクロ
A1 C5の範囲に1を代入
Range("a1:c5").Value=1
シート名の一覧を表示するマクロ
Sub ListSheetsName()
Dim objSheet As Object
Dim intLoop As Integer
intLoop = 1
For Each objSheet In ActiveWorkbook.Sheets
Cells(intLoop, 1).Value = objSheet.Name
intLoop = intLoop + 1
Next
End Sub
(補足)
Cells(intLoop, 1).Value = objSheet.Name
を
Cells(intLoop, 1).Value = objSheet.Range("A1")
にすると、参照シート内のA1の内容を持ってこれる。
セルにアクティブシート名を表示する
=MID(CELL("filename"),FIND("]",CELL("filename"))+1,31)
重複データを削除する
(A1セルにフィールド見出し、A2:A10セルに9個のデータが入力されているときに、重複データを削除した新たなリストをC列に作成する例)
メニュー[データ]-[フィルタ]-[フィルタオプションの設定]をクリック
↓
[フィルタオプションの設定]ダイアログで
[抽出先]欄で[指定した範囲]オプションボタンをOnに
[リスト範囲]欄で「A1:A10」セルを
[抽出範囲]欄で「C1」セルを
[重複するレコードは無視する]チェックボックスをOnに
設定
↓
[フィルタオプションの設定]ダイアログ-[OK]ボタンをクリック
条件にあったものの合計
=SUMIF(B1:B4,"りんご",C1:C4)
B1~B4のりんごに該当するもののみ、C1~C4の合計を計算
クリックした図形のセルの色を変えるマクロ
以下のマクロを、セル上の図形に登録する。
Sub iro001()
Dim button As Range
'セル位置取得 button
Set button = ActiveSheet.Shapes(Application.Caller).TopLeftCell
'セル位置 0,0の色を変更
With button.Offset(0, 0).Interior
.ColorIndex = 10
.Pattern = xlSolid
End With
End Sub
セルに時間を記録するマクロ
A2が開始なら、B2に現在時刻を返す。
A2が終了なら、C2に現在時刻を返す。
Sub jikankiroku()
If Range("A2").Value = "開始" Then
Range("B2") = Now()
End If
If Range("A2").Value = "終了" Then
Range("C2") = Now()
End If
End Sub
=COUNTIF関数
=COUNTIF(A1:A10,"合格")
A1~A10までのセルに「合格」が何個存在するか返す。
=COUNTIF(A1:A10,"合格")+COUNTIF(A1:A10,"不合格")
とすると、合格+不合格の合計数が何個あるか返す。
条件付書式
セルの内容によって、書式を変化させる。
例)セルの値が”合格”なら、セルパターン=赤色、文字色=白
IF関数
=IF(A1="","",IF(A1>50,"○","×"))
A1が空白なら、空白。
空白以外なら、A1>50をチェック。
50以上なら○
50以下なら×。
セルのコピー&貼り付け
セルが別のセルを指している時に そのセルを別の位置にコピーすると、移動した分だけ指していた位置まで移動してしまう。
これを移動させず、指している位置が変わらないままにするには、変えたくない行・列には「$」を前につけて、「$A$1」といった指定をする。
セル内の文字列をリスト形式で選択
1 [▼]を押して選択するためのリストを別の場所に作成。
2 ドロップダウンリストを表示させたいセルを選択して、メニューバー[データ]から[入力規則]をクリック。
3 [設定]タブの[入力値の種類]で[リスト]を選択し、[元の値]に文字カーソルを移します。
4 ドロップダウンリストの元となる、欄外に入力したデータを範囲選択する。
5 [OK]を押す。
最終更新:2010年07月28日 10:07