タグ

ブックマーク / officetanaka.net (20)

  • Office TANAKA - Excel VBA Tips[複数のUserFormでデータを受け渡す]

    UserFormで入力(または選択)された情報を、別のUserFormに反映させる方法です。これには、2つのやり方があります。なお、ここでは、UserForm1のTextBoxに入力された文字列を、UserForm2のLabelに表示するという動作を例にします。 【UserForm1】 【UserForm2】 直接別のコントロールに設定する 難しく考えることはありません。UserForm1のコードから、UserForm2のコントロールを直接操作してやればいいんです。 【UserForm1】のコード Private Sub CommandButton1_Click() ''[UserForm2を開く]ボタン UserForm2.Label1.Caption = Me.TextBox1.Text UserForm2.Show End Sub 【UserForm2】のコード Private Su

  • Office TANAKA - 変数の使い方[Setを使うケース]

    変数に値を入れるには「=」記号を使います。次のマクロは、文字列型の変数tmpに"tanaka"という文字列を格納します。 Sub Sample13() Dim tmp As String tmp = "tanaka" MsgBox tmp End Sub このように、変数に値を格納するときは「変数名 = 値」とします。これは、右辺を左辺に代入するという意味で「変数名 ← 値」のようなイメージです。 ところが、ときおり「Set 変数名 = 値」のように、Setという命令を使って変数に"何か"を代入しているコードがあります。 Sub Sample14() Dim ws As Worksheet Set ws = Sheets("Sheet1") MsgBox ws.Name End Sub Set ws = Sheets("Sheet1") は、変数wsにシート[Sheet1]を代入する命令で

  • Office TANAKA - Excel VBA関数[Replace]

    Replace関数は文字列を置換する関数ですが、任意の文字列を空欄に置換することで、結果的に特定の文字列を除去することができます。 サンプル1 次の例は、セル範囲A2:A10に入力されている名前のうち「土屋 直美」を「田中 直美」に置き換えます。 Sub Sample1() Dim i As Long For i = 2 To 10 If Cells(i, 1) = "土屋 直美" Then Cells(i, 1) = Replace(Cells(i, 1), "土屋", "田中") End If Next i End Sub サンプル2 次の例は、セルB2に入力されている数式「=Sheet2!A1」の"Sheet2"を"Sheet3"に置き換えます。 Sub Sample2() Range("B2").Formula = Replace(Range("B2").Formula, "She

  • Office TANAKA - セルの操作[背景色の設定]

    セルの文字色を設定するには、FontオブジェクトのColorIndexプロパティかColorプロパティを使います。 Sub Sample1() Range("B2").Font.ColorIndex = 3 ''色パレットの3番を設定します Range("B3").Font.Color = RGB(0, 0, 255) ''青色に設定します End Sub セルの背景色(塗りつぶし色)を設定するには、Rangeオブジェクト配下のInteriorオブジェクトを操作します。 Sub Sample2() Range("B2").Interior.ColorIndex = 3 ''色パレットの3番を設定します Range("B3").Interior.Color = RGB(0, 0, 255) ''青色に設定します End Sub ColorIndexプロパティとは何か Colorプロパティとは

  • セルの操作(罫線の設定):VBA講座

    BorderオブジェクトとBodersコレクション セルに罫線を引くにはどうしたらいいでしょう?いつものようにマクロ記録してみます。次のコードは、セル範囲A1:C3に格子罫線を引いた操作を記録したものです。ツールバーの[罫線]ボタンで操作しました。 Sub Macro1() Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle

  • Office TANAKA - Excel VBA Tips[重複しないリストを作る(1)]

    「キー」と「値」がセットになっていて、「神奈川県」というキーで「横浜市」という値を検索できるような仕組みです。Dictionaryオブジェクトでは、こうした連想配列にデータ(キーと値のセット)を追加したり、検索したり、任意のキーがすでに存在しているかどうかを調べことなどができます。なお、連想配列では同じキーを登録できません。 Dictionaryオブジェクトを使って重複しないリストを作成するには、次のように考えます。 セルA2からセルA8まで順にデータを取得します 取得したデータが連想配列に登録されていなかったら登録します 取得したデータが連想配列に登録されていたら何もしません 流れはこんな感じです。さて登録するデータですが、連想配列では「キー」と「値」の二つが必要です。今回のケースでは「名前」データしかありません。「名前」を「キー」にするとして、「値」には何を登録したらいいのでしょう。

  • Office TANAKA - ファイルの操作[作業用ブックを開く]

    ここでは、ユーザーに分からないようにブックを操作する方法をご紹介します。たとえば、Book1を表示している状態で、裏で開いたBook2を操作するような使い方です。 見えないように開く ブックを開くときは、WorkbooksコレクションのOpenメソッドを使います。これは、難しくないですね。 Sub Sample1() Workbooks.Open "Book2.xlsx" End Sub もちろん、ブックを開くと、開いたブックがアクティブになります。ユーザーに分からないようにブックを開くには、開いたあとで、アクティブブックを切り替えなければなりません。 Sub Sample1() Workbooks.Open "Book2.xlsx" ''別のブックをアクティブにする End Sub もし、このマクロが書かれているブックをアクティブにするのなら、ThisWorkbookをアクティブにしてや

  • Office TANAKA - Excel VBA Tips[オートフィルタ[状況の判定]]

    FilterオブジェクトのOperatorプロパティが返すのは、これら"実体"の数値です。つまり、Operatorプロパティで取得できる数値から、上記のいずれかを導かなければなりません。項の冒頭で「設定されている条件を調べるのは大変です」と書いたのは、こういう理由です。ちなみに「1列目が"田中"と等しい」のように、1つの列に1つの条件しか指定していないとき、つまり引数Operatorを指定していないときは、Operatorプロパティが0を返します。 以上をふまえた上で、少しだけ実用的なコードをご紹介します。下図は「1列目が"田中"または"広瀬"である」と「3列目が"40より大きい"かつ"80より小さい"」で絞り込んでいます。 Sub Macro7() Range("A1").AutoFilter 1, "田中", xlOr, "広瀬" Range("A1").AutoFilter 3,

  • Office TANAKA - Excel VBA Tips[Split関数で文字列を区切る]

    ※文字列を、区切り文字ではなく、位置で分割するやり方は「文字列を位置で分割する」をご覧ください。 Split関数は、ある区切り文字で区切られた文字列を、その区切り文字で区切り、区切られた各文字列を、一次元配列として返します。言葉で表すとややこしいですが、要するに次のような処理をしてくれます。 Split関数の書式は次の通りです。 Split(元の文字列 , 区切り文字) 上の例なら、次のようになります。 Split("123,田中,tanaka" , ",") Split関数は配列を返します。したがって、それを受け取る変数は、バリアント型変数か、動的配列でなければいけません。一般的にはバリアント型変数に受けます。Split関数の返り値(配列)を受け取ったバリアント型変数は、それ以降、配列として操作できます。 このとき注意しなければいけないのは、Split関数が返す配列の要素は0から始まると

  • Office TANAKA - VBAのステートメント[Const]

    Constステートメント 構文 [Public|Private]Const constname[As type]=expression キーワードPublicは省略可能です。宣言する定数をプロシージャレベルにします。 キーワードPrivateは省略可能です。宣言する定数をモジュールレベルにします。 引数constnameには、定数の名前を指定します。 As type節は省略可能です。定数の型を指定します。 引数expressionには、定数が示す値を指定します。 解説 定数を宣言します。 キーワードPublicまたはキーワードPrivateを省略した場合には、その定数はPrivateが指定されたものとみなされます。 As type節を省略すると、引数expressionで指定した値に適した型が採用されます。 引数expression内では、VisualBasicの組み込み関数を使用すること

  • Office TANAKA - Excel VBA Tips[すべて検索する]

    下図のような表があったとき、検索機能で"田中"を探してみます。 このとき、[すべて検索]ボタンをクリックすると、次のように、条件に一致したすべてのセルがリストアップされます。 このように、検索したいセルが複数存在したとき、それらをすべて検索するにはどうしたらいいでしょう。 まず、1つだけ検索する、一般的なやり方を試してみましょう。 Sub Sample1() Dim FoundCell As Range Set FoundCell = Cells.Find(What:="田中") If FoundCell Is Nothing Then MsgBox "見つかりません" Else FoundCell.Activate End If End Sub 検索の基とも言えるコードです。特に難しくはありませんね。 さて、Findメソッドには引数Afterがあります。この引数Afterに、見つかった

  • Office TANAKA - Excel VBA Tips[最終セルの下にSUM関数を自動挿入する]

    たとえばA列に、下図のようなデータが入力されていたとします。 A列には全部で6個の数値が入力されていて、最終セルの「52」はセルA7です。このように数値が入力されている表の最終行にSUM関数を挿入してみましょう。つまり、次のような感じです。 セルに数式を挿入するだけなら簡単ですね。今回のケースなら Sub Sample1() Range("A8") = "=SUM(A2:A7)" End Sub でOKです。しかし、データが入力されている最終セル(ここではセルA7)がマクロを実行するたびに異なる場合はどうでしょう。 まず、SUM関数を挿入するセルを特定します。SUM関数を挿入するのは「最終セルの1つ下」のセルですね。データが入力されている最終セルは、Endモードで取得できます。 最終セル → Range("A2").End(xlDown) ここは、後の処理を楽にするため、あえてRange(

  • Office TANAKA - セルの操作[セルの検索]

    何はなくともFindメソッド 下のようなデータを例に、セルの検索を解説します。 いつものように、まずマクロ記録してみましょう。次のコードは、このリストで「土屋」を検索した操作を記録しました。 Sub Macro1() Cells.Find(What:="土屋", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ , MatchByte:=False, SearchFormat:=False).Activate End Sub こりゃまた、ややこしいコードが記録されました。順を追って解説しましょう。ワークシート上でセルを検索するには、Findステートメントを使います。Findステートメントの構文

  • Office TANAKA - Excel VBA関数[MsgBox]

    MsgBoxで、どんなときに括弧を使うのかと、メッセージを改行する"改行コード"について、詳しい解説を動画で公開しています。ぜひ、こちらもご覧ください。Youtubeでは、ほかにもたくさんの動画を公開しています。チャンネル登録をお忘れなく! Office TANAKAチャンネル ■VBAのコードで、括弧はどんなときに使うのか 構文 引数promptは必ず指定します、ダイアログボックスに表示するメッセージを指定します。 引数buttonは省略可能です。ダイアログボックスに表示する、ボタンの種類やタイプなどを指定します。 引数titleは省略可能です。ダイアログボックスのタイトルバーに表示する文字列を指定します。 引数helpfileは省略可能です。ダイアログボックスの[ヘルプ]ボタンから開くヘルプファイルを指定します。引数helpfileを指定する場合は、引数contextも必ず指定しなけれ

  • Office TANAKA - Excel VBA Tips[実は奥が深いInputBox]

    マクロ実行中にユーザーから文字列や数値を受け取るとき、最も簡単な方法のひとつはInputBoxを使うことです。次のコードは、ユーザーに名前を入力してもらい、入力された文字列をセルA1に書き込みます。 Sub Sample1() Dim buf As String buf = InputBox("名前を入力してください") Range("A1") = buf End Sub 特に難しいテクニックでもなく、ややもするとVBAの解説でさえ紹介されないこともある基ワザですが、実はこのInputBoxは意外と奥が深いんです。 InputBoxは2つある まず衝撃的な事実からお話ししましょう。Excel VBAで使えるInputBoxには次の2種類があります。 InputBox関数 ApplicationオブジェクトのInputBoxメソッド ひとつはInputBox関数です。文字列の左端を抜き出

  • Office TANAKA - Excel VBA Tips[オートフィルタ[絞り込んだ結果を集計する]]

    大量のデータを絞り込むには、オートフィルタが便利です。ここでは、VBAからオートフィルタを使い倒すテクニックをご紹介します。なお、ボリュームがありますので、以下の項目にページを分けて解説します。なお、ここで解説するオートフィルタは、通常のワークシートに設定されているとします。テーブルでオートフィルタを操作するときは、また別の考え方が必要です。VBAでテーブルを扱う方法に関しては「VBAでテーブルの操作」をご覧ください。 書き方の基 文字列で絞り込む 数値で絞り込む 日付で絞り込む 色で絞り込む 作業列で絞り込む 絞り込んだ結果をコピーする 絞り込んだ結果を集計する (←このページ) 絞り込んだ結果の行を操作する オートフィルタの状況を判定する 数式のエラーで絞り込む ワークシート関数を使う ここで解説する"集計"とは、主に"カウント"のことです。マクロでオートフィルタを活用するときは、絞

  • Office TANAKA - 今さら聞けないVBA[Withって何ですか?]

    マクロ記録をすると、たとえば次のようなコードが記録されます。 With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 255 .TintAndShade = 0 .PatternTintAndShade = 0 End With マクロの内容はともかく、今回はこの「With」の話です。Withって、いったい何でしょう? 主語を省略する書き方 Withはステートメントの一種です。マクロ記録で記録されるステートメントは、唯一このWithだけです。Withの働きは、われわれの日常会話を考えれば容易に理解できます。 たとえば、私の友人に「鈴木さん」という人がいたとします。私があなたに、この鈴木さんのことを紹介するとき、次のような言い方はしませんよね。 鈴木さんの出身は横浜で 鈴木さんの

  • Office TANAKA - Excel VBA Tips[オートフィルタ[書き方の基本]]

    大量のデータを絞り込むには、オートフィルタが便利です。ここでは、VBAからオートフィルタを使い倒すテクニックをご紹介します。なお、ボリュームがありますので、以下の項目にページを分けて解説します。なお、ここで解説するオートフィルタは、通常のワークシートに設定されているとします。テーブルでオートフィルタを操作するときは、また別の考え方が必要です。VBAでテーブルを扱う方法に関しては「VBAでテーブルの操作」をご覧ください。 書き方の基 (←このページ) 文字列で絞り込む 数値で絞り込む 日付で絞り込む 色で絞り込む 作業列で絞り込む 絞り込んだ結果をコピーする 絞り込んだ結果を集計する 絞り込んだ結果の行を操作する オートフィルタの状況を判定する 数式のエラーで絞り込む まずは、オートフィルタを操作するマクロの基的な書き方を解説します。 対象には1つのセルを指定する オートフィルタを操作す

  • Office TANAKA - Excel VBA Tips[オートフィルタ[日付で絞り込む]]

    大量のデータを絞り込むには、オートフィルタが便利です。ここでは、VBAからオートフィルタを使い倒すテクニックをご紹介します。なお、ボリュームがありますので、以下の項目にページを分けて解説します。なお、ここで解説するオートフィルタは、通常のワークシートに設定されているとします。テーブルでオートフィルタを操作するときは、また別の考え方が必要です。VBAでテーブルを扱う方法に関しては「VBAでテーブルの操作」をご覧ください。 書き方の基 文字列で絞り込む 数値で絞り込む 日付で絞り込む (←このページ) 色で絞り込む 作業列で絞り込む 絞り込んだ結果をコピーする 絞り込んだ結果を集計する 絞り込んだ結果の行を操作する オートフィルタの状況を判定する 数式のエラーで絞り込む 「と等しい」で絞り込む 日付を「と等しい」で絞り込むのは超難しいです。というか、いろいろなところに"落とし穴"があります。

  • If OpenFileName <> "False"とIf OpenFileName <> Falseの違い

    開くブックをユーザーに選択してもらう場合は、[ファイルを開く]ダイアログボックスを表示するといいでしょう。 Sub Sample1() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") Workbooks.Open OpenFileName End Sub [ファイルを開く]ダイアログボックスを表示するには、ApplicationオブジェクトのGetOpenFilenameメソッドを使います。GetOpenFilenameメソッドによる[ファイルを開く]ダイアログボックスは、ユーザーが選択したファイルのフルパスを返すだけで、自動的には開きません。GetOpenFilenameメソッドの書式は次の通りです。 GetOpenFilename Fil

  • 1