サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
プライムデーセール
www.moug.net
MsgBox関数の使い方(2) - ユーザーが選択したボタンの処理 (Excel 97/2000/2002/2003/2007/2010/2013/2016) 「MsgBox関数の使い方(1) -メッセージボックスの表示方法」では、メッセージの改行、ボタンやアイコンの指定など、いろいろな表示方法をご紹介しました。 いろいろなボタンを表示できたら、今度はユーザーがどのボタンをクリックしたか、その結果を知りたいところです。 ここでは、ユーザーが選択したボタンを判定する方法をご紹介します。 MsgBox関数はユーザーがどのボタンをクリックしたかを数値で返します。 選んだボタンによって処理を行うには、この戻り値を利用します。 「MsgBox関数の使い方(1)」では、引数をカッコで囲まずに利用してきましたが、関数の戻り値を利用するときは、引数をカッコで囲むのがVBAの基本ルールです。 次のコードは、
ツイート ●概要● 数式も置換え機能の対象となることを利用すると、数式の参照先や、使用している関数を一気に置換えることが可能です。 以下の例では、ワークシート「Sheet1」を参照している数式を、「Sheet2」の同アドレスを参照する数式に置き換えます。 ●詳細● 《Excel 2007、2010、2013、2016バージョン》 [ホーム]タブ-[検索と選択▼]-[置換(R)...]を選択するか、[Ctrl] + [H]のショートカットキーにより、[検索と置換]ダイアログボックスを表示。 《Excel 2003以前のバージョン》 [編集]メニュー-[置換(E)...]を選択するか、[Ctrl] + [H]のショートカットキーにより、[検索と置換]ダイアログボックスを表示。 《各バージョン共通》 [検索する文字列(N)]ボックスに「Sheet1!」を入力、[置換後の文字列(E)]に「Shee
フィルタで抽出したデータの数をカウントする (Excel 97/2000/2002/2003/2007/2010/2013/2016) セルA1から始まり、1行目がタイトル行になっている表があります。 マクロ「Sample」は、この表からオートフィルターで抽出したデータの件数を表示します。 Sub Sample() Dim Count As Long Range("A1").AutoFilter Field:=4, _ Criteria1:="マスター会員" '「マスター会員」を抽出 Count = WorksheetFunction.Subtotal(3, Range("A1").CurrentRegion.Columns(1)) MsgBox Count - 1 & " 件です。" End Sub オートフィルターで抽出したあと、表の1列目のデータの個数をカウントします。 フィルターさ
次のサンプルは、Newキーワードを使用してWshNetworkオブジェクトを作成し、UserNameプロパティでユーザー名を、ComputerNameプロパティでコンピュータ名を取得しています。 なお、WshNetworkオブジェクトを利用するには、「Windows Script Host Object Model」に参照設定する必要があります。 ● サンプル ● Sub Sample() Dim WshNetworkObject As IWshRuntimeLibrary.WshNetwork '---(1) Set WshNetworkObject = New IWshRuntimeLibrary.WshNetwork '---(2) With WshNetworkObject MsgBox "ユーザー名: " & .UserName & vbCrLf _ & "コンピュータ名: "
数値を任意の単位で「切り捨て」「切り上げ」する(FLOOR関数/CEILING関数) (Excel 2000/2002/2003/2007/2010/2013/2016) 数値を任意の単位で切り捨て/切り上げする関数を紹介します。 0.1、1、10、100・・・で切り捨て/切り上げする場合はROUNDDOWN関数やROUNDUP関数を使用しますが、5や20のような単位の場合はFLOOR関数/CEILING関数を使用します。 【FLOOR関数】 書式:=FLOOR(数値,基準値) 「数値」を「基準値」の最も近い値に切り捨てします。 【CEILING関数】 書式:=CEILING(数値,基準値) 「数値」を「基準値」の最も近い値に切り上げします。 【例】商品一覧の「価格」データを200円単位で切り上げして「販売価格」を求めます。 セルC3を選択します。 「=CEILING(B3,200)」と入
一般的なマクロでは、ワークシート上で選択されているセルに対して、何らかの処理を行います。つまり、ユーザーはマクロを実行する前に、処理の対象となるセルを選択しておかなければなりません。 そうではなく、マクロを実行した後で、ユーザーに処理するセルを選択してもらうにはどうしたらいいでしょう。 これには、InputBoxを使うと便利です。InputBoxには2種類あって、ひとつはInputBox関数です。 たとえば次のように使います。 Sub Sample1() Dim buf As String buf = InputBox("名前を入力してください") MsgBox buf End Sub よく見かける使い方ですね。 もうひとつは、ApplicationオブジェクトのInputBoxメソッドです。 こちらはInputBox関数に比べて機能が豊富です。引数Typeを使うと、InputBoxに入力
MsgBox関数の使い方(1) - メッセージボックスの表示方法 (Excel 97/2000/2002/2003/2007/2010/2013/2016) 画面にメッセージを表示するMsgBox関数は、マクロになくてはならない便利な命令です。 たとえば次のように使います。 Sub Sample1() MsgBox "モーグへようこそ!" End Sub 実行すると、[OK]ボタンが1つだけある小さなメッセージボックスが表示されます。 このMsgBox関数は、ほかにもいろいろな使い方ができます。 ここでは、VBAの定番のMsgBox関数の使い方をご紹介します。 MsgBox関数のよく使う引数は次のとおりです。 MsgBox Prompt [,Buttons] [, Title] 引数ButtonsとTitleは省略可能です。 引数Promptには、メッセージとして表示する文字列を指定します
文字列の先頭 / 末尾のスペースを削除する(LTrim / RTrim / Trim関数) (Excel 2000/2002/2003/2007/2010/2013/2016) ツイート LTrim関数は文字列から先頭のスペースを、RTrim関数は末尾のスペースを、それぞれ削除した文字列を返します。先頭と末尾のスペースを両方削除するには、Trim関数を使用します。 いずれの関数も、スペースは半角/全角に関わらずに削除されます。 構文 LTrim(String) 先頭のスペース削除 RTrim(String) 末尾のスペース削除 Trim(String) 先頭と末尾のスペース削除 Sub Sample() Dim myStr As String myStr = " スキルアップ・問題解決なら モーグにおまかせ! " '---(1)LTrim MsgBox "『" & myStr
[Ctrl]キーを使わずに離れたセル範囲を選択する (Excel 2000/2002/2003/2007/2010/2013/2016) ツイート 隣接しない複数のセルやセル範囲を選択する場合、[Ctrl]キーを押しながら次のセルを選択しますが、隣接しないセルを連続して選択していると[Ctrl]キーを押し忘れて、選択が解除されてしまったことはありませんか。 [Shift]+[F8]キーを使うと、[Ctrl]キーを押さずに隣接しない複数のセルやセル範囲を選択できます。 ●詳細● 選択したいいずれかのセル範囲を選択 [Shift]+[F8]キーを押す 追加選択するセルをクリック、またはセル範囲をドラッグで選択する 選択が終わったら、再度[Shift]+[F8]キー、または[Esc]キーを押してセル範囲の追加選択を解除 Excel 2007・2010・2013・2016は、[Shift]+[F8
ツイート ●概要● ヘッダーやフッターに印字させることができるシート名ですが、関数を使って、セルに表示させることもできます。今回は、ユーザー定義関数を使わず、文字列操作関数(RIGHT、LEN、FIND関数)および情報関数(CELL関数)を組み合わせて表示させる方法を紹介します。 ●詳細● シート名を表示したいセルを選択します。 選択したセルに、 =RIGHT(CELL("filename",A1),LEN(CELL("filename",A1))-FIND("]", CELL("filename",A1))) と入力します。 ●補足● 未保存のファイルではエラー値(#VALUE!)を返しますので、一旦保存をしてから[F9]キーで再計算を行ってください。
ショートカットキーを使ってオートSUM数式を挿入する (Excel 2000/2002/2003/2007/2010/2013/2016) ツイート ●概要● SUM関数は、[オートSUM]ボタンを使って簡単に挿入することができますが、合計を求めたい場合は、ショートカットキーを使うと更に簡単に挿入することができます。 ●詳細● 合計を表示したいセルを選択します。 [Alt]+[Shift]+[=]キーを押します。 引数となるセル範囲が自動的に認識され、数式が表示されるので、正しければ[Enter]キーを押して確定します。
複雑な条件分岐にSelect Caseの裏技を使う (Excel 97/2000/2002/2003/2007/2010/2013/2016) セルの値が「100だったら」「そうでなかったら」という二値で処理を分岐するには、Ifステートメントを使います。 Sub Sample1() If Range("A1").Value = 100 Then MsgBox "100です" Else MsgBox "100ではありません" End If End Sub 二値ではない条件で処理を分岐するときはSelect Caseを使います。 Sub Sample2() Select Case Range("A1").Value Case Is < 50 MsgBox "50未満です" Case 50 MsgBox "50です" Case Is > 50 MsgBox "50超です" End Select
ツイート 生年月日を計算するには、DATEDIF関数を利用すると便利です。開始日から終了日までの期間を指定した単位で表します。 ここでは、セルA1に生年月日、セルB1に本日の日付を入力し、セルC1に本日の満年齢を表示する方法を解説します。 ●詳細● セルA1に生年月日を入力します。 セルB1に「=TODAY()」と入力します。 セルC1に「=DATEDIF(A1,B1,"Y")」と入力します。 ●補足● 【書式】 DATEDIF(開始日,終了日,単位) 【単位の引数】 "Y" 期間内の満年数です。 "M" 期間内の満月数です。 "D" 期間内の日数です。 "MD" 開始日から終了日までの日数です。日付の月数および年数は無視されます。 "YM" 開始日から終了日までの月数です。日付の日数および年数は無視されます。 "YD" 開始日から終了日までの日数です。日付の年数は無視されます。 ※ 単位
文字列内の全角数字を半角数字に変換する(ASC関数) (Excel 2000/2002/2003/2007/2010/2013/2016) ツイート ●概要● 複数の人が作成した住所録データなどを集めると、入力方法の違いにより全角数字と半角数字が混ざってしまうことがあります。 今回は、文字列内の全角英数カナ文字を半角英数カナ文字に変換するASC関数を使い、文字列に含まれる数字を半角に統一する方法を紹介します。 ●詳細● 変換後のデータを表示したいセルを選択しASC関数を入力します。 【ASC関数の書式】 =ASC(文字列) 文字列に含まれる英数字が半角で表示されます。 【例】セルE1に含まれる全角英数字を半角に変換する数式を、セルF1に入力する ●補足● ASC関数は、文字列内の全角英数カナ文字を変換する関数のため、文字列に全角アルファベットや全角カナ文字が含まれていた場合は半角に変換され
グラフの操作は理解しにくいマクロのひとつです。 グラフは複数のパーツが重なり合って構成されていますので、マクロ記録だけではどんなプロパティでどのパーツを操作するかがわかりにくいからです。 またグラフの操作をマクロ記録すると、次のように一度グラフを選択してから、選択したグラフに対してのコードが記録されます。 次のコードは、棒グラフの系列色を赤に変更する操作のマクロ記録結果です。 (コメント部分は省略しています) Sub Macro1() ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.SeriesCollection(1).Select ActiveChart.SeriesCollection(1).Points(1).Select With Selection.Interior .ColorIndex = 3 .Pattern
日付関数を活用!土日や祝日を除いた日数を数えるには? エクセルの日付関数には、今日の日付を返す『TODAY関数』や曜日を返す『WEEKDAY関数』以外にも、たくさんの関数が用意されています。 土日や祝日を除いた日数や日付を求める『NETWORKDAYS関数』や『WORKDAY関数』など、ちょっと珍しい関数も覚えておくと便利です。 例えば、給与計算などを行うには土日や祝日を除く実際に働いた日数「稼働日」を求める必要があります 。しかし、それぞれの会社で異なる休業日などを除外し、稼働した日数だけを数えるのは面倒です。 そんなときに『NETWORKDAYS関数』を使うと、指定した期間から土日、祝日を除いた日数を求めることができます。 土日は自動的に、休日は指定した一覧表の範囲を指定すればOKです。それらを除外して、「稼働日」を割り出してくれます。 今回は日付関数を使用して、アルバイトの稼働日数を
確認メッセージを非表示にする(DisplayAlertsプロパティ) (Excel 2000/2002/2003/2007/2010/2013/2016) ツイート Excelは特定の操作を実行した時に、さまざまな確認あるいは警告のメッセージを表示します。 たとえば、シートを削除する際には、「選択したシートに、データが存在する可能性があります。データを完全に削除するには、[削除]をクリックしてください。」といったメッセージを表示します。 確認のボタンが押されるまで処理は中断したままになるので、複数のシートを一括して削除するときなど、確認のメッセージを表示したくない場合はApplicationオブジェクトのDisplayAlertsプロパティにFalseを設定します。
セルをコピーするのは簡単です。 Sub Sample1() Range("A1:E1").Copy Range("G1") End Sub 上記のマクロは、セル範囲A1:E1をセル範囲G1:K1にコピーします。 コピーの操作をマクロ記録すると冗長なコードが記録されますが、Copyメソッドは引数に貼り付け先を指定することができます。 Copyメソッドによるコピーは、セル全体をコピーします。 コピー元のセルに数式が入力されていた場合、貼り付け先のセルに合わせて数式内で参照しているアドレスが自動調整されます。 また、コピー元の書式も貼り付け先に反映されます。 これはこれで便利ですが、ときにはセルの値だけをコピーしたいこともあります。 セルの値だけをコピーするには「形式を選択して貼り付け」を実行します。 マクロ記録すると、次のようなコードが記録されます。 Sub Macro1() Range(Se
文字を複数のセルの中央に配置するときに便利なのが、[セルを結合して中央揃え]です。 リボンやツールバーにボタンがあるので、ワンクリックで設定できます。 でもセルを結合していると、並べ替えやデータのコピーをするときに 「この操作には、同じサイズの結合セルが必要です。」 というエラーが表示されて、あとあと面倒な思いをしたことがあるでしょう。 そんなときにオススメなのが、[選択範囲内で中央]です。 セルの境界線が非表示になり、見た目は[セルを結合して中央揃え]と同じですが、セルは個別に選択できる状態になっています。これなら、結合セルのエラーに悩まされることはありません。 Excelで操作するには、複数のセルを選択した状態で[セルの書式設定]ダイアログボックスを表示します。[配置]タブの[横位置]ドロップダウンリストから[選択範囲内で中央]を選択して設定します。 ただちょっと面倒です。この操作をマ
引数Shiftを省略すると、挿入対象となるセル範囲の形に応じて自動的に移動する方向が決まります。 列が対象の場合は必ず右方向、行が対象の場合には必ず下方向に移動します。 セル範囲が縦長の場合は右方向、横長か正方形の場合は下方向に移動します。 対象が行/列以外の場合は特に、引数Shiftは省略しない方が良いでしょう。 次のサンプル1は、3行目以降の行に1行おきに空白行を挿入します。 ●サンプル1● Sub Sample1() Dim myLastRow As Long Dim i As Long 'データの最終行を取得 myLastRow = Cells(Rows.Count, 1).End(xlUp).Row '最終行から上方向にループ For i = myLastRow To 3 Step -1 Rows(i).Insert Shift:=xlDown Next i End Sub セル
ツイート ●概要● ハイパーリンクの既定の書式は、未表示のハイパーリンクの場合下線付きの青色フォント、表示済みのハイパーリンクの場合は下線付きの紫色フォントとなっています。 これを任意の書式に変更する方法を確認しましょう。 ●詳細● 《Excel 2007、2010、2013、2016バージョン》 [ホーム]タブ-[スタイル]-[セルのスタイル]をクリックします。 スタイルの一覧の「ハイパーリンク」で右クリック、[変更(M)...]を選択し[スタイル]ダイアログボックスを表示します。 [スタイル]ダイアログボックスの[書式設定]ボタンをクリックします。 [書式設定]ダイアログボックスで任意の書式を設定し、[OK]ボタンをクリックします。 [スタイル]ダイアログボックスの[OK]ボタンをクリックします。 《Excel 2003以前のバージョン》 [書式(O)]メニュー-[スタイル(S)...
次のサンプルは、変数ArrayDataを動的配列として宣言し、セルA1:B5の値を代入します。 ワークシートのセル範囲は2次元配列なので、変数ArrayDataは2次元配列となります。 次に、引数dimensionの値を1ずつ増やしながら、次元数をチェックします。 このとき、On Error Resume Nextステートメントを利用して、実行時エラーを回避しておきます。 変数iをインクリメントした後、引数dimensionに指定した次元が存在しない場合、実行時エラーが発生するため、実行時エラーが発生した際の変数iの値から1を引いた数が、配列の次元数になります。 ●サンプル● Sub Sample() Dim ArrayData() As Variant Dim TempData As Variant Dim i As Long ArrayData = Range("A1:B5").Val
ツイート Excelは、配列を一括でセルに代入できます。 たとえば、次のような方法です。 このとき、配列の大きさと、代入するセル範囲の大きさを一致させるのがポイントです。 Sub Sample1() Dim tmp(2) As String tmp(0) = "Excel" tmp(1) = "Word" tmp(2) = "Access" Range("A1:C1") = tmp End Sub ただし、このような一次元配列を一括代入できるセル範囲は、 セルA1・セルB1・セルC1 のように「横方向のセル範囲」です。こうした配列を、 セルA1 セルA2 セルA3 といった「縦方向のセル範囲」に一括代入することはできません。 Sample1の Range("A1:C1") = tmp の部分を、次のように変更すればうまく行きそうなものですが、 Range("A1:A3") = tmp これ
文字列の長さを取得する(Len/LenB関数) (Excel 2000/2002/2003/2007/2010/2013/2016) ツイート Len関数は、引数に指定した文字列の文字数を、LenB関数はバイト数を返します。 次のサンプルは、半角文字列、全角文字列、半角と全角が混在した文字列について、 文字数とバイト数をメッセージボックスに表示します。 ●サンプル1● Sub Sample() Dim HalfStr As String, FullStr As String, MixedStr As String HalfStr = "moug" '半角4文字 FullStr = "モーグ" '全角3文字 MixedStr = "Q&A掲示板" '半角3文字全角3文字 MsgBox HalfStr & " : " & Len(HalfStr) & vbCrLf & _ FullStr &
複数のシートのデータを1つのシートにコピーする (Excel 2000/2002/2003/2007/2010/2013/2016) ツイート ブック内にある複数のシートのデータを1つのシートに集約する方法をご紹介します。 次のサンプルは、「AllData」シートに他のシートのデータをコピーします。 すべてのシートは同じ形式でデータが入力されていて、1行目は見出し行になっているものとします。 最初に、コピー先となる「AllData」シートの2行目以降のセルをクリアします。 各シートの2行目以降のデータを、「AllData」シートの最終行の次の行にコピーします。 この処理を「AllData」シートを除くすべてのシートについて行い、最後に「AllData」シートをA列でソートします。 Sub Sample() Dim sWS As Worksheet 'データシート(コピー元) Dim dWS
挿入済みのコメントをすべて表示させる (Excel 2000/2002/2003/2007/2010/2013/2016) ツイート ●概要● セルに挿入したコメントは、初期設定ではコメントマーク(インジケータ)のみが表示され、コメントの内容はセルを選択したときにのみ表示されるようになっています。 表示オプションを使ってコメントの表示方法を変更すると、挿入済みのコメントを一気にすべて表示させることができます。 ●詳細● 《Excel 2007、2010、2013、2016バージョン》 1.〈Excel 2010、2013、2016〉[ファイル]タブ-[オプション]を選択します。 〈Excel 2007〉[Officeボタン]-[Excelのオプション(I)]ボタンをクリックします。 [Excelのオプション]ダイアログボックスの[詳細設定]をクリックします。 [表示]-[コメントのあるセル
シート数を指定してブックを追加する (Excel 97/2000/2002/2003/2007/2010/2013/2016) ツイート 新規ブック追加時のシート枚数は、次の操作で指定することができます。 【Excel 2007以降】 Officeボタン、または[ファイル]タブから表示される[Excelのオプション]ダイアログ →[基本設定]の[ブックのシート数] 【Excel 2003以前】 [ツール]メニュー→[オプション]から表示される[オプション]ダイアログ →[全般]タブ→[新しいブックのシート数] サンプルではこの機能を一時的に変更してブック追加時のシート枚数を調整します。 ●サンプル● Sub ChageNumofNewSheets() Dim Temp As Integer Dim WB As Workbook Dim Num As Integer '数値型変数に現在の指定
ツイート ■2つの文字列が等しいかどうかを判定する ある文字列が、ある文字列と等しいかどうかを判定するには、「=」「<>」などの演算子を使います。 「=」演算子は「A = B」としたとき、AとBが等しい場合にTrueを返します。 たとえば次のサンプルは、アクティブセルに「新宿」という文字列が入力されているかどうかを判定します。 Sub Sample1() If ActiveCell.Value = "新宿" Then MsgBox "新宿です" Else MsgBox "新宿ではありません" End If End Sub 「<>」演算子は逆に、比較する文字列が等しくないときにTrueを返すので、上記のコードは次のように書くこともできます。 Sub Sample2() If ActiveCell.Value <> "新宿" Then MsgBox "新宿ではありません" Else MsgBo
VLOOKUP関数で#N/Aエラーを表示させない方法 (IFERROR関数など) (Excel 2000/2002/2003/2007/2010/2013/2016) ツイート ● 概要● VLOOKUP関数を使用して完全に一致するデータを検索した場合、falseが返ると#N/Aエラーが表示されます。そこで、Excel 2007以降追加されたIFERROR関数を使用して#N/Aエラーを表示させない方法を紹介します。Excel2003以前のバージョンでは関数とISNA関数/ISERROR関数を用います。 ● 詳細 ● 以下の方法で#N/Aエラーを表示させずに、セルを空白にできます。 《Excel2007/2010/2013/2016バージョン》 VLOOKUP関数を入力したセルを選択する 入力済みの数式に、IFERROR関数を追加します =IFERROR(VLOOKUP(検索値,範囲,列番号
次のページ
このページを最初にブックマークしてみませんか?
『Excel VBA を学ぶなら moug モーグ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く