タグ

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

  • Office TANAKA - Excel VBA Tips[正規表現によるマッチング]

    VBAから正規表現を使うには、VBScriptが便利です。ただし、正規表現をサポートしているVBScriptはVer5.0からですから、IE5.0がインストールされているパソコンでないと使えません。 VBScriptの中で正規表現エンジンを提供しているのはRegExpオブジェクトです。参照設定によるEarly Bindingか、CreateObject関数を使ったLate Bindingで参照します。ここではLate Bindingによるサンプルを紹介します。 まずは、正規表現で使用するオブジェクトとプロパティやメソッドを整理しましょう。 RegExpオブジェクトのプロパティとメソッド

  • Office TANAKA - Excel VBA Tips[フォルダを選択するダイアログ]

    フォルダを選択するダイアログボックスを表示するにはいくつかの方法があります。 1.FileDialogオブジェクトを使う方法 Sub Sample1() With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then MsgBox .SelectedItems(1) End If End With End Sub 2.Shellを使う方法 Sub Sample2() Dim Shell, myPath Set Shell = CreateObject("Shell.Application") Set myPath = Shell.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, "C:\") If Not myPath Is Nothing Then Ms

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

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

  • Office TANAKA - 変数の使い方[型は覚えなくていい]

    よく使う型 最もよく使われる型は、なんといっても長整数型(Long)と文字列型(String)でしょう。整数を格納する型は、長整数型(Long)のほかにInteger(整数型)もありますが、Integer(整数型)は最大で32,767までしか入りませんから、特別な事情がある場合を除いて、整数を入れる変数は長整数型(Long)で宣言すればいいでしょう。また、たとえば月を表す数値(1~12)のように、非常に小さい整数を格納する変数としてバイト型(Byte)を使っているケースをときおり見かけますが、これは相応しくありません。バイト型(Byte)は、バイナリデータという特別な値を格納するために用意された型です。もちろん、単純な数値を格納することも可能ですが、すごく変です。 整数を入れる変数 → 長整数型(Long) 文字列を入れる変数 → 文字列型(String) と覚えておきましょう。ほとんどの

    Office TANAKA - 変数の使い方[型は覚えなくていい]
  • Office TANAKA - ワークシート関数[OFFSET 関数]

    OFFSET関数に関して、詳しい説明や具体的な使い方などを動画で解説しています。ぜひ、ご覧ください。Youtubeでは、ほかにもたくさんの動画を公開しています。チャンネル登録をお忘れなく! Office TANAKAチャンネル 書式 :OFFSET(基準,行数,列数,高さ,幅) 機能 :基準セルを指定した数だけシフトしたセル範囲を返します 解説 :セル範囲を可変にするときに使います OFFSET関数の仕組み OFFSET関数は理解しづらい関数のひとつです。しかし、その仕組みを理解できれば、これほど役に立つ関数はありません。まず、OFFSET関数は何をどうする関数なのかを理解しましょう。 OFFSET関数の構文は次の通りです。 OFFSET(基準,行数,列数,高さ,幅) OFFSET関数に指定する引数は、次の3種類に分類できます。 1.基準となるセルを指定する引数→[基準] 2.基準セルを動

  • Office TANAKA - Excel VBA(エラーに負けない)

    マクロ開発者にとってエラーは嫌なものです。できればエラーメッセージは見たくありませんし、対処のしかたに慣れていないと、エラーの原因を解明するために思わぬ時間が必要だったりもします。もちろんエラーは発生させないのが一番ですが、そうも言っていられません。ここでは、エラーを回避するテクニックをご紹介します。 エラーを無視する たとえば次のコードは、ワークシート名を取得して表示します。 Sub Sample1() Dim i As Long, buf As String For i = 1 To 4 buf = buf & Worksheets(i).Name & vbCrLf Next i MsgBox buf End Sub しかし、For Nextの繰り返しを4回実行しているため、ワークシートが3枚以下だとエラーになります。 For Nextのループ中でエラーが発生してマクロはストップします

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

     VBAのステートメント Home Excel VBA VBAのステートメント AppActivate Beep Call ChDir ChDrive Close Const Date Declare DefBool DefByte DefCur DefDate DefDbl DefDec DefInt DefLng DefObj DefSng DefStr DefVar DeleteSetting Dim Do...Loop End Erase Error Exit FileCopy For Each...Next For...Next Function Get GoSub...Return Goto If...Then...Else Input # Kill Let Line Input # Load、UnLoad Lock、UnLock LSet Mid MidB MkDir Na

  • Office TANAKA - Excel VBA Tips[ループ(繰り返し処理)からの強制脱出]

    仕事がら、他の人が作成したVBAコードをよく見ます。ひと目で「むむ!この人はできるな」と察するコードもありますが、逆のイメージを感じることも少なくありません。ある程度のスキルに達すると、あとはセンスの問題なのかもしれませんが、そうではなく"知らないために損をしている"ケースもあります。ループ(繰り返し処理)から強制的に脱出するテクニックもそのひとつですね。 たとえば次のコードは、セル範囲A1:A1000の中から「合計」と入力されているセルを探しています。「合計」のセルが見つかったら、そのセルを変数Targetに格納して、その後何らかの処理を行うとします。 Sub Sample() Dim i As Long, Target As Range For i = 1 To 1000 If Cells(i, 1) = "合計" Then Set Target = Cells(i, 1) Next

  • Office TANAKA - シートの操作[保護/解除する]

    ProtectメソッドとUnprotectメソッド ワークシートを保護するにはProtectメソッドを実行します。次のコードはアクティブシートを保護します。 Sub Sample07() ActiveSheet.Protect End Sub 保護を解除するにはUnprotectメソッドを実行します。次のコードはアクティブシートの保護を解除します。 Sub Sample07_2() ActiveSheet.Unprotect End Sub パスワード付きの保護 シートを保護するときはパスワードを設定できます。パスワード付きで保護されたシートは、解除するときにもパスワードが必要です。権限を持たないユーザーにはシートの内容を見せたくないときなどに有効ですね。パスワードを付けてシートを保護するには、Protectメソッドの引数Passwordにパスワードを指定します。次のコードはアクティブシー

  • Office TANAKA - Excel VBA Tips[フルパスをパスとファイル名に分ける]

    先日メールで質問されたネタです。「"C:\Sample\Sub\Book1.xls"というフルパスを"C:\Sample\Sub\"と"Book1.xls"に分割するにはどうしたらいいのですか?」と。・・・当サイトではTipsなどで普通にやってますけど、あらためて「よくわからない」と言われたので独立したコンテンツとして解説しましょう。 ここでは次のようなファイルを対象にします。 基的な考え方 まずは古典的なやり方から。この方法は手間がかかりますけど、応用すればいろいろなケースに応用できます。 パス+ファイル名という文字列を「パス」と「ファイル名」に分けるには、どこで分割すればいいかを考えます。パスの区切りは「\」記号で表されますので、(1)文字列を後ろから1文字ずつ見ていって最初に存在する「\」の位置を調べなければなりません。次に(2)その位置から左側(パス)と右側(ファイル名)に分割し

  • Office TANAKA - 変数の使い方[オブジェクトを入れる変数]

    変数は、格納する値によって、型を指定します。たとえば、整数を入れるならLong型、文字列を入れるならString型・・・のように。 Sub Sample47() Dim N As Long, buf As String N = 3 buf = "tanaka" End Sub ほかにも、変数にはオブジェクトを格納できる型というのがあります。たとえば、セルはRangeオブジェクトで表されます。このRangeオブジェクトを格納する変数は、次のようにします。 Sub Sample48() Dim R As Range Set R = Range("A1") R.Font.ColorIndex = 3 End Sub もちろん、ワークシートを格納できるWorksheet型とか、オートシェイプを格納できるShape型なども使えます。また、すべてのオブジェクトを格納できるObject型というのもありま

  • Office TANAKA - Excel VBA Tips[ブックが開かれているかどうか調べる]

    ブックを開くには、WorkbooksコレクションのOpenメソッドを使います。 次のコードは、C:\Book1.xlsを開きます。 Sub Sample1() Workbooks.Open Filename:="C:\Book1.xls" End Sub まったく何てことのない処理ですが、このブックをすでに誰かが開いていたとしたら、いろいろと、やっかいなことが起こります。なお、C:\Book1.xlsは「共有ブックではない」とします。共有ブックを誰が開いているか調べる方法は「共有ブックを開いているユーザーを調べる」をご覧ください。 自動的に[通知]で開かれてしまう 共有ブックではない普通のブックを、すでに誰かが開いていたとき、その同じブックを手動で開こうとすると、次のような確認メッセージが表示されます。 許された選択肢は[読み取り専用]と[通知]の2つです。[読み取り専用]ボタンで開くと、

  • Office TANAKA - Excel VBA関数[Mid]

    構文 引数 string には、文字列を抜き出す元の文字列を示す文字列式を指定します。 引数 start には、文字列を抜き出す先頭位置を指定します。 引数 length は省略可能です。抜き出す文字列の長さを指定します。 解説 引数stringで指定した文字列の、引数startで指定した位置から引数lengthで指定した長さの文字列を返します。 たとえば、Mid("ABCDEFG",3,2)では、CDを返します。 引数lengthを省略すると引数startから後ろのすべての文字列が返ります。 たとえば、Mid("ABCDEFG",3)では、CDEFGが返ります。 サンプル 次の例は、セルB2に入力されている住所の「東京都から後ろ全部」を表示します。 Sub Sample() MsgBox Mid(Range("B2"), 4) End Sub Mid関数に指定する引数は、次の通りです。

  • Office TANAKA - Excel VBA関数[Len]

    Sub Sample4() Dim A As Byte Dim B As Boolean Dim C As Integer Dim D As Long Dim E As Single Dim F As Double Dim G As Currency Dim H As Date Dim I As Object Range("B1") = Len(A) Range("B2") = Len(B) Range("B3") = Len(C) Range("B4") = Len(D) Range("B5") = Len(E) Range("B6") = Len(F) Range("B7") = Len(G) Range("B8") = Len(H) Set I = Range("A1") Range("B9") = Len(I) End Sub オブジェクト変数は、何かのオブジェクトをセットしないと

  • 本来なら文字列として入力されているデータを、計算式の中で使える「セルのアドレス」に変換してくれる - ワークシート関数の解説(INDIRECT関数) excel ★

    書式 たとえば、任意のセルに「=A1」と入力すれば、そのセルからセルA1を参照できます。 INDIRECT関数を使うと、次のように、参照するセルのアドレスを文字列で指定できます。 「なんじゃ、そりゃ?」「はぁ?何に使うの?」と思ったあなた。その通りです。これだけだと、この関数がどれほど便利か分かりませんね。ポイントは、参照するセルのアドレスを文字列で指定できる、というところです。文字列で指定できるということは、参照したいセルのアドレスを、何とかして文字列で作成できれば、どこにあるセルでも参照できるということです。これ、超便利です。てか、INDIRECT関数を使えるようになると、Excelの数式作成スキルが256倍アップします(当社比)。 アドレスを文字列として作れればいいのですから、たとえば、文字列を結合できる&演算子を使って、次のようなこともできます。 文字列の"A"と数値の2を結合して

  • Office TANAKA - Excel VBA Tips[セルのコメントに画像を表示する]

    セルにコメントを挿入するには、次のようにします。 Sub Sample1() With ActiveCell.AddComment .Text "これはコメントです" .Visible = True End With End Sub このように、セルのコメントには一般的に文字列を表示されますが、ちょっと工夫するとコメントに画像を表示することができます。コメント枠を右クリックして[コメントの書式設定]を実行すると[コメントの書式設定]ダイアログボックスが表示されます。このダイアログボックスの[色と線]タブを開くと、コメント枠の背景色を指定できます。この背景色には、グラフの系列などと同じように、グラデーションやテクスチャを設定できるだけでなく、背景に任意の画像を指定することも可能です。 この操作をマクロで実行してやればいいんです。次のコードは、C:\Work\Sample.jpgをコメントで表

  • Office TANAKA - VBA Tips

    VBAコンテンツ Home Excel VBA Excel VBA Tips セル セルが選択されているか判定する アクティブでないシートのアクティブセル 結合セルを調べる 簡単に罫線を引く セルのValue2プロパティ あるセルがセル範囲に含まれるかどうか セル範囲の操作 確実に選択されているセルを操作する 入力されているデータの最終セルを取得する 複数のセルを選択する 特定のセル範囲内を検索する 非表示のセルを検索する すべて検索する 日付を検索する 1と001の問題 Range(左上セル, 右下セル)の使い方 セルの罫線に関すること new オートフィルタ 書き方の基 文字列で絞り込む 数値で絞り込む 日付で絞り込む 色で絞り込む 作業列で絞り込む 絞り込んだ結果をコピーする 絞り込んだ結果を集計する 絞り込んだ結果の行を操作する オートフィルタの状況を判定する 数式のエラーで絞り

  • Office TANAKA - ワークシート関数

     ワークシート関数 Home Excel 機能と数式 ワークシート関数 「#N/A」とか「#NUM!」など、数式エラーの原因と対処法については、下記ページをご覧ください 数式のエラーについて EXPAND 関数 Insider new CHOOSEROWS 関数 / CHOOSECOLS 関数 Insider new TAKE 関数 / DROP 関数 Insider new WRAPROWS 関数 / WRAPCOLS 関数 Insider new TOROW 関数 / TOCOL 関数 Insider new VSTACK 関数 / HSTACK 関数 Insider new TEXTSPLIT 関数 Insider new TEXTBEFORE 関数 Insider new LAMBDA 関数 Insider LET 関数 ProPlus XMATCH 関数 ProPlus XLO

    fukudamasa09
    fukudamasa09 2011/06/02
    この関数は、こう使え!
  • Office TANAKA - BASP21について

    BASP21は、メールの送受信や、HTTP・FTPなどの機能を提供してくれるDLLです。 VBなどのプログラミング言語だけでなく、もちろんVBAからも使用可能です。 BASP21は下記のサイトからダウンロードできます。 BASP21のページ インストールは簡単です。ファイルをダウンロードして実行するだけです。詳しくは上記のページをお読みください。 はっきり言って、これほど素晴らしいDLLがフリーソフトとして公開されているのは驚きです。作者への感謝を忘れずに、ありがたく使わせていただきましょう。当サイトでは、Excel VBAから使うサンプルをご紹介します。ただ、Excel固有の機能はほとんど使いません。中にはセルやワークシートを使っているサンプルもありますが、ほぼ同じコードでVB6からも実行できるでしょう。 メールを送信する メールを受信する FTPで送受信する 上記のサンプルは、「マクロ

  • Office TANAKA - VBAデータベース的活用法[検索の基本はFindメソッド]

    まずは[検索]テクニックです。下のようなデータを対象とします。[商品コード]列から「A007」を検索してみましょう。 Sub Sample01() Dim FoundCell As Variant With Worksheets("Sheet1") Set FoundCell = .Range("A2:A11").Find("A007") If FoundCell Is Nothing Then MsgBox "A007は見つかりません。", vbExclamation Else MsgBox "A007は、" & FoundCell.Address & "です。" & vbCrLf & _ "A007は、" & FoundCell.Row & "行目です。", vbInformation End If End With End Sub Excelをデータベース的に使うとき、何はなくとも検

    fukudamasa09
    fukudamasa09 2011/05/24
    Findメソッド