| |
|
|
2) 指定回数繰り返した文字列を作る |
 |
 |
'=========================================================================================
Sub 文字列を指定回数繰り返した文字列を作成する()
文字列 = "★☆" '※1
回数 = 5 '※2
作成文字列 = Application.WorksheetFunction.Rept(文字列, 回数)
End Sub
'-----------------------------------------------------------------------------------------
Sub 文字を指定数だけ並べた文字列を作成する()
文字 = "☆" '※3
指定数 = 5 '※2
文字列 = String(指定数, 文字)
End Sub
'=========================================================================================
<コメント>
'※1 1文字以上の文字列を指定
'※2 正の数値で記入する(整数でない場合は小数点以下が切り捨てされる)
'※3 複数の文字を指定しても先頭の文字だけが対象になる
サンプルブックのダウンロードは ここをクリック (YNxv208_REPT.xls 38KB) ※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。
|
|
3) セルの値を取り出す |
 |
 |
'=========================================================================================
Sub アクティブシートのセルの値を取り出す()
Windows("BBB.xls").Activate 'ブックをアクティブにする ※1
Sheets("SSS").Select 'シートを選択する ※2
年 = Cells(2, 1) 'A2セルの値を取り出す ※3
月 = Cells(2, 2) 'B2 〃 ※3
日 = Cells(2, 3) 'C2 〃 ※3
End Sub
'-----------------------------------------------------------------------------------------
Sub 同じブックの他のシートのセルの値を取り出す()
Windows("BBB.xls").Activate 'ブックをアクティブにする ※1
Sheets("SSS").Select '"SSS"シートを選択する ※2
年 = Sheets("TTT").Cells(2, 1) '"TTT"シートのA2セルの値を取り出す ※4
月 = Sheets("TTT").Cells(2, 2) ' 〃 B2 〃 ※4
日 = Sheets("TTT").Cells(2, 3) ' 〃 C2 〃 ※4
End Sub
'-----------------------------------------------------------------------------------------
Sub セルに入力された値と表示された値を取得する()
Windows("BBB.xls").Activate 'ブックをアクティブにする ※1
Sheets("SSS").Select 'シートを選択する ※2
入力された値 = Range("A1").Value '※5
表示された値 = Range("A1").Text '※5
'-----------------------------------------------------------------------------------------
' ダブルクリックされたセルの値を取得する '※6
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
ダブルクリックされたセルの値 = Target.Value 'ダブルクリックされたセルの値を取得する
Cancel = True 'イベントを無効にする
End Sub
'=========================================================================================
Sub セル内改行文字を含んだセルの値を分けて取得する() '※7
セル = "A1" '※8
値1 = Split(Range(セル).Value, vbLf)(0)
値2 = Split(Range(セル).Value, vbLf)(1)
値3 = Split(Range(セル).Value, vbLf)(2)
End Sub
'=========================================================================================
Sub セルの値を配列に取得し配列の値をセルに設定する()
Dim 配列() As Variant
取得セル範囲 = "A1:C4" '※9
設定セル範囲 = "A11:C14" '※9
配列 = Range(取得セル範囲).Value 'セルの値を配列に取得
Range(設定セル範囲).Value = 配列 '配列の値をセルに設定
End Sub
'=========================================================================================
<コメント>
※1 BBBにはブック名を記入
※2 SSSにはシート名を記入
※3 年,月,日は変数名で自由にネーミング
※4 "TTT"には同じブックの他のシート名を記入
※5 下図のように書式設定されたセルでは、入力された値と、表示された値が異なる

※6 ワークシートのコード画面で作成する
※7 ここで言う「セル内改行文字」とはラインフィード文字(vbLf)
※8 A1セルに "1行目{Alt}+{Enter}2行目{Alt}+{Enter}3行目" と入力されている場合、
変数「値1」は "1行目"、変数「値2」は "2行目"、変数「値3」は "3行目" となる
※9 A1:C4 には取得するセル範囲、A11:C14 には設定するセル範囲を記述
|
4) セルの数式を値として取得する |
 |
 |
'=========================================================================================
Sub セルの数式を値として取得する()
数式セル = "A3" '※1
値セル = "B3"
数式 = Range(数式セル).Formula '※2 変数に代入する場合
Range(値セル).Value = "'" & Range(数式セル).Formula '※2 セルにセットする場合
End Sub
'=========================================================================================
<コメント>
※1 A3セルに =SUM(A1:A2) のような数式がセットされている前提
※2 FormulaR1C1 とすれば R1C1形式の数式になる
|
5) セル間で値を写す |
 |
 |
'=========================================================================================
Sub 同じブックの異なるシート間でセルの値を写す()
Windows("BBB.xls").Activate 'ブックをアクティブにする ※1
Sheets("SSS").Cells(2, 1) = Sheets("TTT").Cells(2, 1)
'"TTT"から"SSS"シートへA2セルの値を写す ※2,3
Sheets("SSS").Cells(2, 2) = Sheets("TTT").Cells(2, 2)
'"TTT"から"SSS"シートへB2 〃 ※2,3
Sheets("SSS").Cells(2, 3) = Sheets("TTT").Cells(2, 3)
'"TTT"から"SSS"シートへC2 〃 ※2,3
End Sub
'=========================================================================================
<コメント>
※1 BBBにはブック名を記入
※2 SSSにはシート名を記入
※3 "TTT"には同じブックの他のシート名を記入
|
6) アラビア数字をローマ数字に変換する |
 |
 |
'=========================================================================================
Private Sub アラビア数字をローマ数字に変換する()
ローマ数字 = 0 '※1
アラビア数字 = Application.Roman(ローマ数字, 0) '※1、※2
End Sub
'=========================================================================================
<コメント>
※1 変換したい数字を変数 "ローマ数字" にセットしておく、この場合は「0」
※2 ( )の中の"0"にはローマ数字の書式を数値で指定する、0または省略:正式(古典的書式)
|
7) 半角数字を漢数字に変換する |
 |
 |
'=========================================================================================
Sub 半角数字を漢数字に変換する()
半角数字 = 123 '※1
関数式 = "=NUMBERSTRING(" & 半角数字 & ",1)" '※2
漢数字 = Evaluate(関数式)
End Sub
'=========================================================================================
<コメント>
※1 123 には変換したい数字を記入
※2 NUMBERSTRING関数の第2引数には、1、2、3 がある
|
8) 文字の大小・全角変換 |
 |
 |
'=========================================================================================
Sub 数値以外を全角にする()
Sheets("SSS").Select '※1
Range("A1") = "123" '初期値のサンプル:数値
Range("A2") = strconv(Range("A1"), vbWide) 'このケースは数値のため全角にならない
Range("A4") = "AbHアイウ" '初期値のサンプル:数値以外
Range("A5") = strconv(Range("A4"), vbWide) 'この場合は全角になる
Range("A7") = "愛" '初期値のサンプル:全角
Range("A8") = strconv(Range("A7"), vbWide) 'この場合はもともと全角
Range("A10") = "123AbHアイウ" '初期値のサンプル:数値でない数字と英カナ
Range("A11") = strconv(Range("A10"), vbWide) 'この場合は全角になる
End Sub
'-----------------------------------------------------------------------------------------
Sub すべて全角にし小文字を大文字にする()
Sheets("SSS").Select
Range("C1") = "123Ab愛" '初期値のサンプル:小文字混じり
Range("C2") = strconv(Range("C1"), vbWide + vbUpperCase)
End Sub
'-----------------------------------------------------------------------------------------
Sub 文字列中の小文字を大文字に変換する()
Sheets("SSS").Select
Range("C4") = "123Ab愛" '初期値のサンプル:小文字混じり
Range("C5") = LCase(Range("C4"))
End Sub
'-----------------------------------------------------------------------------------------
Sub アルファベットの大文字を小文字に変換する()
Sheets("SSS").Select
Range("C7") = "123Ab愛" '初期値のサンプル:大文字混じり
Range("C8") = UCase(Range("C7"))
End Sub
'-----------------------------------------------------------------------------------------
Sub 半角の英数カナを全角にする() '※4
Worksheets("SSS").Select '※1
Range("B1").FormulaR1C1 = "=DBCS(RC[-1])" '※5、6
End Sub
'=========================================================================================
<コメント>
※1 SSSにはシート名を記入
※2 A1、A2、C1などのセル名は適宜記入
※3 StrConv関数の構文: StrConv(変換する文字列式, conversion)
※4 A1セルの半角英数カナがB1セルにセットされたJISワークシート関数で全角に変換された

※5 右辺の""中にある DBCS とはワークシート関数の JIS に相当する
※6 Mac版Excel2001では、右辺を "=JIS(RC[-1])" と記述する
|
9) 英字単語の先頭文字を大文字に変換 |
 |
 |
'=========================================================================================
Sub 英字単語の先頭文字を大文字に変換する()
セル = "A1" '※1
式 = "PROPER(" & セル & ")"
MsgBox Evaluate(式)
End Sub
'=========================================================================================
<コメント>
※1 ""内には変換対象のセル名を記入
|
10)スペースを削除する |
 |
 |
'=========================================================================================
Sub 先頭末尾のスペースを削除する()
Sheets("SSS").Select
Range("E1") = " 123 Ab 愛 " '初期値のサンプル
Range("E2") = LTrim(Range("E1")) '先頭のスペース削除
Range("E3") = RTrim(Range("E1")) '末尾のスペース削除
Range("E4") = Trim(Range("E1")) '先頭末尾のスペース削除
End Sub
'-----------------------------------------------------------------------------------------
Sub 選択されたセルのスペースをすべて削除する()
Sheets("SSS").Select
Range("G1") = "1 2 3 A b 愛" '初期値のサンプル
Cells.Replace what:=" ", replacement:="" 'スペースを削除する
End Sub
'-----------------------------------------------------------------------------------------
Sub すべてのセルの先頭と末尾のスペースを削除する()
For Each セル In ActiveSheet.UsedRange '現在シートの使われたセル範囲の各セルの
セル.Value = Trim(セル.Value) '先頭と末尾の両方のスペースを削除する
Next '繰り返す
End Sub
'=========================================================================================
|
11)スペースを付けて文字数を揃える |
 |
 |
'=========================================================================================
Sub スペースを末尾に付けて文字数を揃える()
上端行 = 2 '元データが入っている上端行 ※1
元データ列 = 1 '元データが入っている列名 ※2
答データ列 = 2 '答データを格納する列名 ※3
仕上文字数 = 10 '答を仕上げる文字数 ※4
下端行 = Range(Cells(65536, 元データ列), Cells(65536, 元データ列)).End(xlUp).Row '※5
For 行 = 上端行 To 下端行
長さ = 仕上文字数 - Len(Cells(行, 元データ列))
Cells(行, 答データ列) = Cells(行, 元データ列) & Space(長さ)
Cells(行, 答データ列 + 1) = Cells(行, 元データ列) & Space(長さ) & "." '※6
Next
End Sub
'=========================================================================================
<コメント>
※1 2には元データが入っている上端行(見出し行を除く)番号を記入
※2 1には元データが入っている列名を数字で記入
※3 2には答データを格納する列名を数字で記入
※4 10には答を仕上げる文字数を記入
※5 このコードはExcel97以上用(Excel95なら65536を16384に変更する)
※6 答を分かりやすく表示するために末尾に '.' を付けた例示
|
12)文字列の文字数を取得する |
 |
 |
'=========================================================================================
Sub 文字列の文字数を取得する()
Range("A1") = "永井善王": Range("A2") = "1234": Range("A3") = "3行" 'テストデータ
MsgBox "A1セルの文字数は " & Len(Range("A1").Value)
MsgBox "A2セルは " & Len(Range("A2").Value)
MsgBox "A3セルは " & Len(Range("A3").Value)
End Sub
'-----------------------------------------------------------------------------------------
Sub 文字列の半角換算文字数を取得する()
Range("A1") = "永井善王": Range("A2") = "1234": Range("A3") = "3行" 'テストデータ
MsgBox "A1セルの半角換算文字数は " & LenB(StrConv(Range("A1").Value, vbFromUnicode))
MsgBox "A2セルは " & LenB(StrConv(Range("A2").Value, vbFromUnicode))
MsgBox "A3セルは " & LenB(StrConv(Range("A3").Value, vbFromUnicode))
End Sub
'-----------------------------------------------------------------------------------------
Sub 文字列のバイト数を取得する()
Range("A1") = "永井善王": Range("A2") = "1234": Range("A3") = "3行" 'テストデータ
MsgBox "A1セルのバイト数は " & LenB(Range("A1").Value)
MsgBox "A2セルは " & LenB(Range("A2").Value)
MsgBox "A3セルは " & LenB(Range("A3").Value)
End Sub
'=========================================================================================
|
13) スラッシュを除去する |
 |
 |
'=========================================================================================
Sub スラッシュを除去する()
Worksheets("SSS").Activate '※1
Range("A2:A30").Select '※2
Selection.Replace What:="/", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False '※3 置換する
End Sub
'=========================================================================================
<コメント>
※1 "SSS"には、ワークシートの名前を記入する
※2 A2:A30には除去するデータのセル範囲を記入
※3 What:="/"でスラッシュを指定し、Replacement:=""でヌルに置換している
|
14) 改行を除去する |
 |
 |
'=========================================================================================
Sub 改行を除去する()
Worksheets("SSS").Activate '※1
Range("A2:A30").Select '※2
Selection.Replace What:=vbLF, Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False '※3 置換する
End Sub
'=========================================================================================
<コメント>
※1 "SSS"には、ワークシートの名前を記入する
※2 A2:A30には除去するデータのセル範囲を記入
※3 What:=vbLFでセル内の改行を指定し、Replacement:=""でヌルに置換している
|
15) インプットボックスで入力する |
 |
 |
'=========================================================================================
Option Explicit
Dim 入力値 As String 'InputBoxで入力された値
Dim 初期値 As String 'InputBoxへ表示する初期値
Dim 水平位置 As Integer 'InputBoxを表示する水平方向の距離
Dim 垂直位置 As Integer 'InputBoxを表示する垂直方向の距離
Dim タイプ As Variant 'InputBoxメソッドで返されるデータの型
Dim セル範囲 As Range 'InputBoxメソッドで入力されたセル範囲
Dim タイトル As String 'InputBoxとMessageBoxへ表示するタイトル
Dim メッセージ As String 'InputBoxまたはMessageBoxへ表示するメッセージ
'-----------------------------------------------------------------------------------------
Sub インプットボックスで入力する() 'InputBox関数にて
入力値 = InputBox(メッセージ, タイトル) '※1
If 入力値 = "" Then '※8
MsgBox "[キャンセル] または [×]ボタンがクリックされました。", , "すぐマク"
End If
End Sub
'=========================================================================================
Sub インプットボックスへ初期値を表示する() 'InputBox関数にて
入力値 = InputBox(メッセージ, タイトル, 初期値) '※1、2
End Sub
'=========================================================================================
Sub インプットボックスの表示位置を設定する() 'InputBox関数にて
入力値 = InputBox(メッセージ, タイトル, , 水平位置, 垂直位置) '※1、2、3、4
End Sub
'-----------------------------------------------------------------------------------------
Sub インプットボックスの表示位置を設定する_2() 'InputBox関数にて
入力値 = InputBox(Prompt:="お客様名を入力してください。", _
Title:="新規作成", XPos:=4500, YPos:=4000)
If 入力値 = "" Then MsgBox "キャンセルされました。", , "すぐマク"
End Sub
'=========================================================================================
Sub インプットボックスで文字列を入力する() 'InputBoxメソッドにて
入力値 = Application.InputBox("入力してください")
If VarType(入力値) = vbString Then '※5
MsgBox "入力された文字列 … " & 入力値, , "すぐマク"
Else
MsgBox "[キャンセル]または[×]がクリックされました。", , "すぐマク"
End If
End Sub
'-----------------------------------------------------------------------------------------
Sub IMEがオンでなければオンにしてからInputBoxを表示する() 'InputBoxメソッドにて
If IMEStatus = vbIMEModeOff Then
SendKeys "{kanji}" '※9 [全角/半角]キー
入力値 = InputBox("日本語入力です。")
SendKeys "{kanji}"
Else
入力値 = InputBox("日本語入力です。")
End If
End Sub
'-----------------------------------------------------------------------------------------
Sub IMEをオンにしてInputBoxを表示する() 'InputBoxメソッドにて
Application.ScreenUpdating = False
With Worksheets.Add '(仮の)ワークシートを挿入
ActiveCell.Validation.Add Type:=xlValidateInputOnly '入力規則を追加
ActiveCell.Validation.IMEMode = xlIMEModeOn '入力規則のIMEモードを[ひらがな]に
入力値 = InputBox("日本語入力です。")
Application.DisplayAlerts = False
.Delete '(仮の)ワークシートを削除
Application.DisplayAlerts = True
End With
Application.ScreenUpdating = True
End Sub
'-----------------------------------------------------------------------------------------
Sub インプットボックスでセル範囲を入力する() 'InputBoxメソッドにて
タイプ = 8 'セル参照(Rangeオブジェクト)
Set セル範囲 = Application.InputBox(prompt:=メッセージ, Title:=タイトル, Type:=タイプ)
'※6、7
End Sub
'=========================================================================================
<コメント>
※1 「入力値」はInputBoxで入力された値を格納する変数、変数名は自由(以下同じ)
※2 「初期値」はInputBoxへ表示するための初期値を格納する変数
※3 「水平位置」はInputBoxを表示する水平方向の距離(省略すると画面中央)、
単位は twip(トゥウィップ、1440twips=1インチ、567twips=約1cm)
※4 「垂直位置」はInputBoxを表示する垂直方向の距離(省略すると画面上端から約 1/3の位置)
※5 VarType関数で変数の内容(vbString, vbBoolean)を取得して判別
※6 「セル範囲」はInputBoxメソッドで入力されたセル範囲
※7 「タイプ」でInputBoxメソッドで返されるデータの型を設定
| 値 |
意味 |
値 |
意味 |
値 |
意味 |
| 0 |
数式 |
1 |
数値 |
2 |
文字列(テキスト) |
| 4 |
論理値(TrueまたはFalse) |
8 |
セル参照 (Range オブジェクト) |
16 |
#N/Aなどのエラー値 |
| 64 |
数値配列 |
|
|
|
|
InputBox関数で入力した値は文字列、InputBoxメソッドは引数Typeで指定したデータ型
※8 [キャンセル]した時の戻り値: InputBox関数は長さ0の文字列("")、InputBoxメソッドはFalse
※9 [かな入力]が[ローマ字入力]に切り替わる場合がある
サンプルブックのダウンロードは ここをクリック (YNxv208_InputBox.xls 40KB) ※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。
|
|
16) データフォームを表示する |
 |
 |
'=========================================================================================
Sub データフォームを表示する()
ActiveSheet.ShowDataForm
End Sub
'=========================================================================================
|
17) ふりがな |
 |
 |
'=========================================================================================
Private Sub PHONETICでふりがなの文字列を取り出す()
Dim ふりがな As String
Dim 取出元範囲 As Range '※1
Dim 行 As Long
Dim 列 As Integer
'
列 = 4 '※2
行 = 1 '※3
Set 取出元範囲 = Range(Cells(行, 列), Cells(行, 列))
ふりがな = Application.WorksheetFunction.Phonetic(取出元範囲)
Range(Cells(行, 5), Cells(行, 5)).Value = ふりがな
End Sub
'-----------------------------------------------------------------------------------------
Sub ふりがなを作成する() 'SetPhoneticメソッドを利用する方法
Range("G9").SetPhonetic
End Sub
'-----------------------------------------------------------------------------------------
Sub ふりがなを表示する() 'Phoneticsプロパティを利用する方法
Range("G9").Phonetics.Visible = True '※4、5
End Sub
'-----------------------------------------------------------------------------------------
Sub ふりがなを削除する()
Range("G9").Phonetics.Delete
End Sub
'-----------------------------------------------------------------------------------------
Sub ふりがなを削除する_裏技()
Range("G9").Value = Range("G9").Value
End Sub
'-----------------------------------------------------------------------------------------
 |
'-----------------------------------------------------------------------------------------
Sub ふりがなを取得する() 'Phoneticプロパティを利用する方法
MsgBox "D9セルのふりがなは " & Range("D9").Phonetic.Text
End Sub
'-----------------------------------------------------------------------------------------
Sub ふりがなの表示または非表示()
Range("G9").Phonetic.Visible = True '表示する
Range("G9").Phonetic.Visible = False '非表示にする
End Sub
'-----------------------------------------------------------------------------------------
Sub ふりがなの文字種を設定する()
Range("G9").Phonetic.CharacterType = xlHiragana 'ひらがな
Range("G9").Phonetic.CharacterType = xlKatakana 'カタカナ
Range("G9").Phonetic.CharacterType = xlKatakanaHalf '半角カタカナ
End Sub
'=========================================================================================
|
<コメント>
※1 取り出すセルを指定する変数、必ず As Rangeとする
※2 取り出すセルの列を指定する、この場合は D列となる
※3 〃 行を指定する、この場合は 1行となる
※4 "G9"にはセル範囲を記入
※5 非表示にするなら False
サンプルブックのダウンロードは ここをクリック (YNxv208_PHONETIC_1.xls 39KB) ※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。
|
|
18) データを移動する |
 |
 |
'=========================================================================================
Sub アクティブシートの中でデータを移動する()
Worksheets("SSS").Activate 'シートをアクティブにする ※1
ActiveSheet.Range("A1:A3").Cut _
Destination:=ActiveSheet.Range("C1") 'A1:A3セルの内容をC1セルを先頭にして移動 ※2
End Sub
'-----------------------------------------------------------------------------------------
Sub アクティブシートから指定したシートへデータを移動する()
Worksheets("SSS").Activate '※1
ActiveSheet.Range("C1:C3").Cut Destination:=Worksheets("SS2").Range("A1") 'C1:C3セルの
' 内容をSSSシートのA1セルを先頭にして移動する ※1、2
End Sub
'-----------------------------------------------------------------------------------------
Sub 指定したシートからアクティブシートへデータを移動する()
Worksheets("SSS").Activate '※1
Worksheets("SS2").Range("A1:A3").Cut Destination:=ActiveSheet.Range("A1") 'SS2シートの
' A1:A3セルの内容をアクティブシートのC1セルを先頭にして移動する ※1、2
End Sub
'=========================================================================================
<コメント>
※1 SSS、SS2にはシート名を記入
※2 A1:A3、C1:C3には移動元範囲を、A1、C1、には移動先範囲を記入する
|
19) オートフィルタの基本制御 |
 |
 |
'=========================================================================================
Private Sub オートフィルタの状態を調べて表示する()
If Worksheets("SSS").AutoFilterMode Then '※1 オートフィルタモードなら
MsgBox "オートフィルタはオンです"
Else
MsgBox "オートフィルタはオフです"
End If
End Sub
'-----------------------------------------------------------------------------------------
Private Sub オートフィルタの状態を調べて切り替える()
If Worksheets("SSS").AutoFilterMode Then 'オートフィルタモードなら
MsgBox "オートフィルタは現在オンです。[OK]ボタンをクリックするとオフにします"
オートフィルタのオンオフを切り替える
Else
MsgBox "オートフィルタは現在オフです。[OK]ボタンをクリックするとオンにします"
オートフィルタのオンオフを切り替える
End If
End Sub
'-----------------------------------------------------------------------------------------
Private Sub オートフィルタのオンオフを切り替える()
Worksheets("SSS").Range("A2").AutoFilter '※1、2、3
End Sub
'-----------------------------------------------------------------------------------------
Private Sub オートフィルタモードを解除する()
Worksheets("SSS").Range("A2").AutoFilterMode = False '※1
End Sub
'-----------------------------------------------------------------------------------------
Private Sub オートフィルタされていればリストの全ての行を表示する()
If Worksheets("SSS").AutoFilterMode Then '※1 オートフィルタモードなら
MsgBox "オートフィルタは現在オンです"
If Worksheets("SSS").FilterMode = True Then 'リストに非表示の行があれば
MsgBox _
"現在フィルタされています。[OK]ボタンをクリックすると全ての行を表示します"
Worksheets("SSS").ShowAllData '※1 全ての行を表示する
Else
MsgBox "オートフィルタは現在オンですがフィルタされていないので" & Chr(13) _
& "全ての行が表示されています"
End If
Else
MsgBox "オートフィルタは現在オフですから、何もしません"
End If
End Sub
'=========================================================================================
<コメント>
※1 SSSにはシート名を記入または、Worksheets("SSS")に代えてActiveSheetとしても可
※2 A2にはリスト内のセル名を記入
※3 オートフィルタがオンの時はリセットされ、オフの時はセットされる
※4 オートフィルタをオンにすると下向き矢印は黒色、フィルタすると青色に変わる
サンプルブックのダウンロードは ここをクリック (YNxv208_AutoFilter.xls 35KB) ※ 一旦、ブックをハードディスクに保存し、開き直してから実行してください。
|
|
20) オートフィルタで抽出された件数を表示 |
 |
 |
'=========================================================================================
Sub オートフィルタで抽出された件数を表示する()
抽出件数 = ActiveSheet.Range("A1").CurrentRegion.Columns(1) _
.SpecialCells(xlCellTypeVisible).Cells.Count - 1
MsgBox "抽出件数は " & 抽出件数 & " です"
End Sub
'=========================================================================================
|
21) 定数を宣言する |
 |
 |
'=========================================================================================
Option Explicit
Public Const 最大行数 As Long = 1 '※1、2、3
Const タイトル As String = "定数の宣言" '※1、2、3
'-----------------------------------------------------------------------------------------
Sub 宣言した定数の利用例()
MsgBox "最大行数は " & 最大行数, vbInformation, タイトル
End Sub
'=========================================================================================
<コメント>
※1 「最大行数、タイトル」には任意の定数名を、「1、定数の宣言」には定数の値を記入
※2 Publicを指定すると全てのモジュールから参照可能
Privateまたは省略すると、宣言したモジュールだけで参照可能
※3 「As long」、「As String」などのデータ型の宣言は省略可能
※4 宣言した定数はマクロの実行中に値を変えることはできない
|
22) 配列で定数を指定する |
 |
 |
'=========================================================================================
Option Explicit
Dim 対象番号 As Variant '配列を代入するための変数 ※1
Dim 最小次元 As Long '※2
Dim 最大次元 As Long '※2
'-----------------------------------------------------------------------------------------
Sub 配列で定数を指定する()
対象番号 = Array(1, 4, 6) '配列を変数に代入する ※3
MsgBox 対象番号(2) '※4
End Sub
'-----------------------------------------------------------------------------------------
Sub Array配列の最小最大次元を取得する()
最小次元 = LBound(対象番号) '最小次元を取得する ※5
最大次元 = UBound(対象番号) '最大次元を 〃
End Sub
'=========================================================================================
<コメント>
※1 この変数はバリアント型で指定する、変数名「対象番号」は自由にネーミング可能
※2 〃 長整数型で指定する、変数名「最小次元、最大次元」は自由にネーミング可能
※3 Array関数の()の中の引数には、値のリストを , で区切って記入
※4 配列の要素を参照するには、変数名の後の( )の中にインデックス番号を記入
インデックス番号は 0から始まる(Option Baseステートメントの影響を受けない)
※5 LBoundまたはUBound関数の( )の中には配列変数の名前を記入
|
23) 文字列が条件を満たすか調べる |
 |
 |
'=========================================================================================
Sub 文字列が1桁の数字か調べる()
文字列 = "1" '※1
If 文字列 Like "#" = True Then '※2
MsgBox "1桁の数字です。", , "すぐマク"
End If
End Sub
'-----------------------------------------------------------------------------------------
Sub 文字列が3桁の数字か調べる()
文字列 = "123" '※1
If 文字列 Like "###" = True Then MsgBox "3桁の数字です。", , "すぐマク" '※2
End Sub
'=========================================================================================
Sub 文字列の頭文字が範囲内の数値か調べる()
文字列 = "37" '※1
頭文字範囲 = "[2-4]*" '※6、7、8
If 文字列 Like 頭文字範囲 Then MsgBox "範囲内の数値です。", , "すぐマク"
End Sub
'-----------------------------------------------------------------------------------------
Sub 文字列の末尾が所定の文字か調べる()
文字列 = "幸田町" '※1
末尾文字 = "*[町,村]" '※6、7、8
If 文字列 Like 末尾文字 Then MsgBox "所定の文字です。", , "すぐマク"
End Sub
'-----------------------------------------------------------------------------------------
Sub 文字列に所定文字を含むか調べる()
文字列 = "東京都三宅村" '※1
文字列 = "東京都港区" '※1
所定文字 = "*都*区" '※6、7、8、9
If 文字列 Like 所定文字 Then
MsgBox "所定文字を含みます。", , "すぐマク"
Else
MsgBox "所定文字を含みません。", , "すぐマク"
End If
End Sub
'=========================================================================================
Sub 文字列が1桁の半角英字か調べる()
文字列 = "a" '※3
If 文字列 Like "[A-Z]" = True Or 文字列 Like "[a-z]" = True Then '※4
MsgBox "1桁の半角英字です。", , "すぐマク"
End If
End Sub
'-----------------------------------------------------------------------------------------
Sub 文字列が1桁の全角英字か調べる()
文字列 = "a" '※3
If 文字列 Like "[A-Z]" Or 文字列 Like "[a-z]" Then '※5
MsgBox "1桁の全角英字です。", , "すぐマク"
End If
End Sub
'=========================================================================================
<コメント>
※1 変数「文字列」には決められた桁数の任意の文字を代入する(全角も可)
※2 全角数字でも条件満足する
※3 変数「文字列」には1桁の任意の文字を代入する(全角も可)
※4 半角の大文字・小文字とも条件満足するように or演算子を使って組み立てている
※5 全角の 〃 〃
※6 Like演算子はワイルドカード(*、?、等)が使用可能
※7 []内の区切りはand条件なら「-」、or条件なら「,」
※8 2-4 または 町,村 は例示
※9 * は数カ所に挿むことも可能
|
24) 日付・日数・月数・年数・四半期など |
 |
 |
'=========================================================================================
Sub 指定時間間隔が経過した日付を取得する()
時間間隔 = "m" '※1
加算日数 = 3 '※2
起算日 = "2008/1/31" '※3
加算後日付 = DateAdd(時間間隔, 加算日数, 起算日)
End Sub
'-----------------------------------------------------------------------------------------
Sub 日数を取得する()
時間間隔 = "d" '※1
開始日 = "2008/2/28" '※3
終了日 = "2008/3/1" '※3
日数 = DateDiff(時間間隔, 開始日, 終了日)
End Sub
'-----------------------------------------------------------------------------------------
Sub 指定日が属する四半期を取得する()
時間間隔 = "q" '※1
指定日 = "2008/2/29" '※3
四半期 = DatePart(時間間隔, 指定日)
End Sub
'=========================================================================================
<コメント>
※1 ""内の DateAdd、DateDiff、DatePart関数の引数Intervalの値
| 設定値 |
意味 |
設定値 |
意味 |
設定値 |
意味 |
設定値 |
意味 |
設定値 |
意味 |
| yyyy |
yyyy |
q |
四半期 |
m |
月 |
y |
年間通算日 |
d |
日 |
| w |
週日 |
ww |
週 |
h |
時 |
n |
分 |
s |
秒 |
※2 3には将来の日時を取得するには正の数、過去の日時を取得するには負の数を指定
※3 ""内に年月日を記入するか、Range("A1").Valueのようにセルを指定
|
25) 区切り文字で列を分ける |
 |
 |
'=========================================================================================
Sub 区切り文字で列を分ける()
元データ範囲 = "A1:A3" '※1
Range(元データ範囲).TextToColumns DataType:=xlDelimited, _
ConsecutiveDelimiter:=True, Space:=True '※2
End Sub
'=========================================================================================
<コメント>
※1 1列に限る(分けた頭部がその列、後部は右側の列に順にセットされる)
※2 区切り文字にはタブ(Tab:=True)、セミコロン(Semicolon:=True)、カンマ(Comma:=True)、
スペース(Space:=True)、および、その他の文字を指定することも可能
|
26) オートコレクト項目を設定する |
 |
 |
'=========================================================================================
Sub オートコレクト項目に追加する()
修正文字列 = "."
修正後の文字列 = ":"
Application.AutoCorrect.AddReplacement What:=修正文字列, _
Replacement:=修正後の文字列
End Sub
'-----------------------------------------------------------------------------------------
Sub オートコレクト項目から削除する()
修正文字列 = "."
Application.AutoCorrect.DeleteReplacement What:=修正文字列
End Sub
'-----------------------------------------------------------------------------------------
Sub オートコレクト項目を検索して置換文字列を表示する()
検索文字列 = "こんにちわ"
項目 = Application.AutoCorrect.ReplacementList
For I = 1 To UBound(項目)
If 項目(I, 1) = 検索文字列 Then
MsgBox "修正文字列 '" & 検索文字列 & "' の置換文字列は '" & 項目(I, 2) & "'" _
, , "すぐに役立つエクセルVBAマクロ集"
End If
Next
End Sub
'-----------------------------------------------------------------------------------------
Sub オートコレクト項目の一覧表を作成する()
ActiveSheet.Cells.Clear
Range("A1") = "修正文字列"
Range("B1") = "修正後の文字列(置換文字列)"
オートコレクト項目 = Application.AutoCorrect.ReplacementList
For I = 1 To UBound(オートコレクト項目)
Range("A" & I + 1) = オートコレクト項目(I, 1)
Range("B" & I + 1) = オートコレクト項目(I, 2)
Next
Columns("A:B").EntireColumn.AutoFit
End Sub
'=========================================================================================
|
|
|
|