閲覧したい項目をクリックすると表示されます。
このページで紹介しているマクロを実行したことによるトラブルについては
ページ管理者は責任を負えませんので自己の責任においてご使用ください。
| データ操作系 | |||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 001.データの最終行番号を取得する
Range("A65536").End(xlUp).Row
End(xlUp)で上・End(xlDown)で下に向かってジャンプ(データのあるセルの行番号を取得)する EXCEL2003までは最大行数が65,536行のためこれを基準に取得する。
EXCEL2007以降は最大行数が1,048,576行となる。
ちなみに
EXCEL2003までの最大列数が256列で
EXCEL2007以降の最大列数は16,384列となる。 使用例
データの最終行にカーソルを移動し対象行をいちばん上に表示させる Sub IDO
Dim GYO As Long
GYO = Range("A65536").End(xlUp).Row
ActiveWindow.ScrollRow = GYO + 1
Cells(GYO + 1,1).Select
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 002.データの並び替え
Cells.Sort _
Key1:=Range("A2"), Order1:=xlAscending, _
Key2:=Range("B2"), Order2:=xlAscending, _
Key3:=Range("C2"), Order3:=xlDescending, _
Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlSortRows, _
SortMethod:=xlPinYin, DataOption1:=xlSortNormal _
DataOption2:=xlSortNormal, DataOption3:=xlSortNormal
・Cellsの部分はrange("A1:H10")のように範囲をしてもよい。
・Key指定は3つまで。例えばKeyが1個でよい場合は「Kei1:=~」の部分だけ記述すればよい。
・なお、各引数に指定する定数は次のとおり
ツール・マクロに関わらずデータの見出しを中途半端につけると
並び替えがうまくいかない場合があるので見出しをつける場合は
全項目にきちんとつけるよう心がけてください。
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 003.フィルターで抽出したデータをコピーする
With Worksheets("データを抽出するシート名").Range("A1")
.AutoFilter Field:=1, Criteria1:=">0", Operator:=xlAnd
.AutoFilter Field:=2, Criteria1:=1, Operator:=xlAnd
.CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("抽出結果を貼付するシート名").Range("A1")
.AutoFilter
End With
・AutoFilter ・・・・ オートフィルターの起動・解除。
・CurrentRegion ・・・・ 連続した領域を返すプロパティ。
・SpecialCells() ・・・・ 指定された条件を満たしているすべてのセル(Rangeオブジェクト)を返すメソッド。
・xlCellTypeVisible ・・・・ すべての可視セルを対象とさせるクラス。
※見出行も抽出の対象となる(対象データがなくても見出行項目は抽出される)。
使用例
「マスタ」シートのA列の値が「100」のものだけ「抽出」シートにコピーする。 Sub CYUSYUTU
With Worksheets("マスタ").Range("A1")
.AutoFilter Field:=1, Criteria1:=100
.CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("抽出").Range("A1")
.AutoFilter
End With
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 004.セルに数式が入力されているかどうかの判断
Range("A1").HasFormula または
Cells(行番号,列番号).HasFormula
使用例
セル[A1]に数式が入っているかどうかチェックする Sub test
If Range("A1").HasFormula Then
MsgBox "数式が入力されています"
Else
MsgBox "数式が入力されていません"
End If
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 005.セルの関数がエラーかどうかの判断
IsError(Range("A1")) または
IsError(Cells(行番号,列番号))
使用例
セル[A1]の関数がエラーかどうかチェックする Sub test
If IsError(Range("A1")) Then
MsgBox "A1の関数はエラーです"
Else
MsgBox "A1の関数はエラーではありません"
End If
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 006.セルの値が空白かどうかの判断
IsEmpty(Range("A1")) または
IsEmpty(Cells(行番号,列番号))
使用例
セル[A1]の値が空白かどうかチェックする Sub test
If IsEmpty(Range("A1")) Then
MsgBox "A1は空白です"
Else
MsgBox "A1は値が入っています"
End If
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 007.セルの値が日付かどうかの判断
IsDate(Range("A1")) または
IsDate(Cells(行番号,列番号))
使用例
セル[A1]の値が日付かどうかチェックする Sub test
If IsDate(Range("A1")) Then
MsgBox "A1は日付です"
Else
MsgBox "A1は日付ではありません"
End If
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 008.セルの値が数値かどうかの判断
IsNumeric(Range("A1")) または
IsNumeric(Cells(行番号,列番号))
使用例
セル[A1]の値が数値かどうかチェックする Sub test
If IsNumeric(Range("A1") Then
MsgBox "A1は数値です"
Else
MsgBox "A1は数値ではありません"
End If
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 009.現在の日付・時刻を取得する
日時の取得: Now()
時刻を取得: Time()
日付を取得: DateValue(Now())
年のみ取得: Year(Now)
月のみ取得: Month(Now)
日のみ取得: Day(Now)
使用例
セル[A1]に現在の日時を出力する Sub test
Range("A1") = Now()
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 010.日付データから曜日を取得する
※戻り値を「月曜日」・「火曜日」・・・で取得する場合
WeekdayName(Weekday(日付の値))
※戻り値を数値(日曜日は1、月曜日は2・・・)で取得する場合
Weekday(日付の値)
使用例
日付の値(12/1等、セル[A1]に入っている)に対する曜日をセル[B1]に出力する Sub test
Range("B1") = WeekdayName(Weekday(Range("A1")))
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 011.特定の値の入ったセルを検索する
列を指定して検索する場合:
Range("A1:A100").Find(what:="検索する値")
シート全体から検索する場合:
Range("A1").CurrentRegion.Find("検索する値") ・CurrentRegion ・・・・ 連続した領域を返すプロパティ。
・検索結果の戻り値はセルのアドレス(行[Row]・列[Column]番号)で
対象セルがない場合は"Nothing"という特別な戻り値となる。
使用例
セルA1からセルA100の間から「東京」と入っているセルを検索する。 Sub test
Dim FoundCell As Variant Set FoundCell = Range("A1:A100").Find(what:="東京")
If FoundCell Is Nothing Then
MsgBox "「東京」は存在しません"
Else
MsgBox "「東京」は" & FoundCell.Address & "のセルです"
End If
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 012.左端列データを基準としたデータの統合(明細の合計等)
Range("A1").Consolidate _
Sources:="対象データのあるシート名!C1:C10", _
Function:=xlSum, TopRow:=False, LeftColumn:=True, _
CreateLinks:=False
・Sources はA列はC1、B列はC2・・・で表し、C1:C10はA列からJ列までの値を統合することになる。
使用例
「データ」シートのA列からJ列のデータを左端列データ基準で統合(明細の合計)し
「統合」シートへ出力する(上端行・左端列は見出、リンクなし) Sub test
Sheets("統合").Range("A1").Consolidate _
Sources:="データ!C1:C10", _
Function:=xlSum, TopRow:=False, LeftColumn:=True, CreateLinks:=False
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 021.全角文字を半角文字にする
StrConv(文字列, vbNarrow)
・StrConv は第1引数で変換したい文字列を指定し、第2引数でどう変換するのかを指定する
使用例
セル[A1]に含まれる全角文字列を半角にしてセル[B1]に出力する Sub test
Range("B1") = StrConv(Range("A1"), vbNarrow)
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 022.半角文字を全角文字にする
StrConv(文字列, vbWide)
・StrConv は第1引数で変換したい文字列を指定し、第2引数でどう変換するのかを指定する
使用例
セル[A1]に含まれる半角文字列を全角にしてセル[B1]に出力する Sub test
Range("B1") = StrConv(Range("A1"), vbWide)
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 023.ひらかなをカタカナにする
StrConv(文字列, vbKatakana)
・StrConv は第1引数で変換したい文字列を指定し、第2引数でどう変換するのかを指定する
使用例
セル[A1]に含まれるひらかなをカタカナにしてセル[B1]に出力する Sub test
Range("B1") = StrConv(Range("A1"), vbKatakana)
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 024.カタカナをひらかなにする
StrConv(文字列, vbHiragana)
・StrConv は第1引数で変換したい文字列を指定し、第2引数でどう変換するのかを指定する
使用例
セル[A1]に含まれるカタカナをひらかなにしてセル[B1]に出力する Sub test
Range("B1") = StrConv(Range("A1"), vbHiragana)
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 025.アルファベットの大文字を小文字にする
StrConv(文字列, vbLowerCase)
・StrConv は第1引数で変換したい文字列を指定し、第2引数でどう変換するのかを指定する
・アルファベットは全角でも半角でもすべて小文字に変換されます
使用例
セル[A1]に含まれるアルファベットを小文字にしてセル[B1]に出力する Sub test
Range("B1") = StrConv(Range("A1"), vbLowerCase)
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 026.アルファベットの小文字を大文字にする
StrConv(文字列, vbUpperCase)
・StrConv は第1引数で変換したい文字列を指定し、第2引数でどう変換するのかを指定する
・アルファベットは全角でも半角でもすべて大文字に変換されます
使用例
セル[A1]に含まれるアルファベットを大文字にしてセル[B1]に出力する Sub test
Range("B1") = StrConv(Range("A1"), vbUpperCase)
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 027.文字列を数値にする
格納するセルまたは変数 = Val(文字列の入っているセルまたは変数)
・テキストファイルのデータをコピーしたとき等に数値の先頭に"’"が
ついていてエクセルで文字列として認識してしまっている場合に使用すると便利。
使用例
セル[B1]の文字列を数値にしてセル[A1]に出力する Sub test
Range("A1") = Val(Range("B1"))
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 030.小数点以下を切捨てする
Fix(計算式またはセル他)
使用例
セル[A1]に100÷30の計算結果を小数点以下切捨てて出力する Sub test
Range("A1") = Fix(100 / 30)
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 031.小数点以下を四捨五入する
CInt(計算式またはセル他)
使用例
セル[A1]に100÷55の計算結果を小数点以下四捨五入して出力する Sub test
Range("A1") = CInt(100 / 55)
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
| 031.小数点以下を切上げる
-Sgn(計算式またはセル他)*Int(-Abs(計算式またはセル他))
使用例
セル[A1]に100÷30の計算結果を小数点以下切上げして出力する Sub test
Range("A1") = -Sgn(100 / 30)*Int(-Abs(100 / 30))
End Sub
|
|||||||||||||||||||||||||||||||||||||||||||||||||||
