タグ

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

  • Office TANAKA - VBAデータベース的活用法[データをカウントする]

    検索の次はカウントをマスターしましょう。 [商品コード] フィールドの中に「A001」がいくつあるかカウントしてみます。いろんな方法が考えられますね。 1セルずつ順に見ていく いわゆる力技です。A 列を上から順に見ていって、そのセルが「A001」かどうかを数えます。 Sub Sample02() Dim i As Long, cnt As Long For i = 1 To 11 If Cells(i, 1) = "A001" Then cnt = cnt + 1 Next i MsgBox "A001は、" & cnt & "件です。", vbInformation End Sub これは、まあ、解説するまでもありませんね。もしデータが入力されているセル範囲が不明の場合は、次のように Do Loop でループする手もあります。 Sub Sample02_2() Dim i As Long

  • Office TANAKA - シートの操作[シート見出しの色を設定する]

    Excel 2002以降で可能 シート見出しの色を設定するには、Worksheetオブジェクト内のTabオブジェクトのColorIndexプロパティに色を表す数値を指定します。TabオブジェクトはExcel 2002で追加されたオブジェクトですから、Excel 2002より前のバージョンではシート見出しの色を変更できません。次のコードはSheet1のシート見出しを赤色に設定します。 Sub Sample09() Worksheets("Sheet1").Tab.ColorIndex = 3 End Sub シート見出しの色を「色なし」に設定するときは、ColorIndexプロパティに定数xlNoneを指定します。上記のコードで指定した「3」は赤色を表す数値です。どの色が何番になるかは、マクロ記録で確認しましょう。 実用的なサンプルを2つばかりご紹介しましょう。次のコードは、左隣のシート見出

  • Office TANAKA - Excel VBA Tips[ダブルコーテーションの表示]

    画面にメッセージを表示するにはMsgBoxを使います。次のコードは「tanaka」という文字列を表示します。 Sub Sample() MsgBox "tanaka" End Sub このように、VBAでは文字列をダブルコーテーション(")で囲むのが基ルールです。「MsgBox tanaka」では、tanakaという変数名を指定したことになってしまいます。特別な記号であるダブルコーテーション(")ですが、ではダブルコーテーション(")自体を文字列として表示するにはどうしたらいいでしょう。 たとえば、次のようにするとダブルコーテーション(")を表示できます。 Sub Sample() MsgBox """tanaka""" End Sub あるいは、次のように書いても同じ結果になります。 Sub Sample() MsgBox """" & "tanaka" & """" End Sub

    Office TANAKA - Excel VBA Tips[ダブルコーテーションの表示]
  • Office TANAKA - Excel VBA Tips[VBAでファイルの操作]

    FileSystemObjectオブジェクトを使うと、さまざまなファイル操作が可能になります。FileSystemObjectオブジェクトに関しては「FileSystemObjectオブジェクト」をご覧ください。 また、VBAにはファイルを操作するいくつかのコマンドが標準で用意されていますので、ちょっとした操作ならCreateObjectを使うまでもなく、それら標準のコマンドで済むケースもあります。ここでは、VBAコマンドを使った、次の操作について解説します。 ファイルをコピーする ファイルの名前を変更する ファイルを削除する カレントドライブとカレントフォルダについて フォルダの操作 ファイル操作のサンプル ファイルをコピーする ファイルをコピーするには、FileCopyステートメントを実行します。FileCopyステートメントの構文は次の通りです。 FileCopy source, d

    Office TANAKA - Excel VBA Tips[VBAでファイルの操作]
  • Office TANAKA - ファイルの操作[ブックを開く]

    ブックを開くには、WorkbooksコレクションのOpenメソッドを使います。 Excelでは、同時に複数のブックを開くことができます。開いているそれぞれのブックはWorkbookオブジェクトとして操作できます。このWorkbookオブジェクトの集合体がWorkbooksコレクションです。新しいブックを開くということは、この集合体に、新しいメンバーを加えるということです。だからWorkbooksコレクションのOpenメソッドです。 次のコードは、C:\Book1.xlsxを開きます。 Sub Sample1 Workbooks.Open "C:\Book1.xlsx" End Sub Workbooks.Open Filename:="C:\Book1.xlsx" という書き方もできます。 「Filename:=」の意味や、つけるのとつけないのとでは何が違うかについては、下記ページを参考に

  • Office TANAKA - シートの操作[新しいシートを挿入する]

    シートの挿入はAddメソッド ワークシートを挿入するときは、WorksheetsコレクションのAddメソッドを実行します。次のコードは新しいワークシートを1枚挿入します。 Sub Sample03() Worksheets.Add End Sub Addメソッドの構文は次の通りです。 Worksheets.Add(Before, After, Count, Type) 引数Beforeに"Sheet2"を指定すると、新しいシートは[Sheet2]の手前(Before)に挿入されます。逆に、指定したシートの後ろ(After)に挿入したいときは、引数Afterにシート名を指定します。引数Beforeと引数Afterは、どちらか一方だけを指定します。もし両方指定した場合、その位置が矛盾しているとAddメソッドはエラーになります。まぁ、普通は両方同時に指定しませんけどね(^^; 引数Countは挿

  • Office TANAKA - シートの操作[コピー/移動する]

    シートのコピーはCopyメソッド シートをコピーするときはCopyメソッドを使います。ここでは「○○は××メソッドです」と簡単に説明していますが、使用するメソッドやプロパティがわからないときは、まず実際の操作をマクロ記録してくださいね。 さて、WorksheetオブジェクトのCopyメソッドには次の引数があります。 Copy(Before, After) 引数Beforeと引数Afterは、それぞれコピー先の位置を指定します。「Before:=Worksheets("Sheet2")」なら、コピーされた新しいシートがSheet2の直前に挿入されます。Addメソッドとよく似ていますが、1つだけ注意が必要です。Addメソッドと違い、引数Beforeと引数Afterを同時に指定することはできません。たとえ両方で矛盾のない位置を指定してもいけません。 Copyメソッドは異なるブックに存在するシート

  • 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プロパティとは

  • 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(

    NSTanechan
    NSTanechan 2014/02/14
    “.Address”
  • Office TANAKA - ファイルの操作[ファイルの存在を調べる]

    美しいマクロは「頑強性」を持っています。どんな環境でも、ユーザーがどれほど予想外の操作をしても、滅多なことでは停止しないマクロを目指しましょう。それには「○○のはず」という固定概念を払拭するのがポイントです。「ここにファイルがあるはず」「シート名はSheet1のはず」などなど、固定概念が多いマクロほど思わぬトラブルを招くものです。 たとえば、次のコードは、ブックを開く簡単なマクロです。 Sub Sample1() Workbooks.Open "Book2.xlsx" End Sub シンプルですけど、これはマズイですね。「Book2.xls」にパスを指定していませんから、これでは「カレントフォルダのBook2.xls」になってしまいます。カレントフォルダは、Excelでブックを開いたり保存したりするだけでも変わりますから、Book2.xlsxが見つからない場合もあります。明示的にカレント

  • 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 - VBA高速化テクニック[Selectしない]

    セル範囲A1:A5の各セルへ、順に数字を入力する操作をマクロ記録すると、次のようなコードが生成されます。 Sub Macro1() Range("A1").Select ActiveCell.FormulaR1C1 = "1" Range("A2").Select ActiveCell.FormulaR1C1 = "2" Range("A3").Select ActiveCell.FormulaR1C1 = "3" Range("A4").Select ActiveCell.FormulaR1C1 = "4" Range("A5").Select ActiveCell.FormulaR1C1 = "5" Range("A6").Select End Sub それぞれのセルを選択(Select)し、そのアクティブセルに対して数値を入力したのですから、このコードは間違いではありません。ただし、

  • Office TANAKA - ファイルの操作[テキストファイルを操作する(読み込む)]

    ファイルから読み込む 最初は、次のようなテキストファイルを例にします。 ファイルの場所(フルパス)は「C:\Sample\Data.txt」とします。このファイルから、1行ずつ読み込んでセルに代入してみましょう。 テキストファイルから1行ずつ読み込むには、Line Inputステートメントを使います。 Line Input #番号, 変数 Sub Sample1() Dim buf As String Open "C:\Sample\Data.txt" For Input As #1 Line Input #1, buf MsgBox buf Close #1 End Sub Line Inputステートメントは、1行分のデータを読み込むと、読み取りポイントを次の行に移します。つまり、Line Inputステートメントを繰り返すことで、テキストファイルの中を、1行ずつ、すべて読み込むことが

  • 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 - VBAのコンパイルエラー[Sub または Function が定義されていません。]

    Callステートメントで呼び出そうとしたプロシージャが、存在しないときに発生します。プロシージャ名の打ち間違いや、別モジュールにあるプロシージャを呼び出そうとしたけど、その呼び出されるプロシージャがPrivateだったようなケースです。 プロシージャを呼び出そうとして「そのプロシージャ名は分からない」とエラーになるのでしたら、エラーの原因を理解しやすいのですが、下図のように、単純なタイプミスが原因で、このエラーが起こる場合もあります。 RangaではなくRangeです・・・ CellssではなくCellsです・・・ これは、RangaやCellssのように、プロパティ名が間違っているのですが、VBAはここで「○○(~)」を「○○という名前のプロシージャを呼び出している」と誤認します。そして「Rangaなんて名前のプロシージャは見あたらないっス」というエラーになります。同じ打ち間違いでも、「

  • 1