最近の更新 RSS Toggle Comment Threads | キーボードショートカット

  • admin 8:04 PM on 2010年7月27日 パーマリンク | 返信
    Tags: ExcelVBA, , サンプルコード, シートコピー, シート削除, シート名変更, シート追加, シート選択, スクロール, セルのコピー&ペースト, セル選択, ブックの保存, , 並べ替え, 単純作業, 昇順, 範囲選択, 繰り返し, , 自動記録マクロ, 重複削除, 開発タブ   

    【第7回】ExcelVBA:自動記録マクロの使い方 

    ExcelVBAにはマクロの自動記録という便利な機能があります。今回は、この自動記録マクロを中心に解説してみたいと思います。

    自動記録マクロの使い方は、大きく分けて2通りあります。

    1.Excel上で超単純な作業を1000回くらい繰り返さなければいけないとき。
    2.ある処理をコードで書きたいが、書き方がさっぱり分からないとき。

    まず1の方は、特定セルのコピー&ペースト作業や行・列の並べ替え、重複削除、シートのコピー、ブックの保存などすでに処理のやり方が決まっている繰り返し作業の場合です。こちらは、開発タブや自動記録アイコンから自動記録を起動し、繰り返したい動作を行って記録させ、記録終了後にそれを実行することで目標を実現することが可能です。

    一方、2のほうは、自動記録を終了した後、コードを参照することになります。参考までに代表的な自動記録コードを以下に記してみます。

     ★シート名”Sheet1”を選択
    Sheets(“Sheet1″).Select

     ★シートを追加
    Sheets.Add After:=Sheets(Sheets.Count)

     ★シートの名前を “Sheet1″から”ExcelVBA”に変更
    Sheets(“Sheet1″).Name = “ExcelVBA”

     ★シート名”ExcelVBA”を削除
    Sheets(“ExcelVBA”).Select
    ActiveWindow.SelectedSheets.Delete

     ★21行ぶんウィンドウをスクーロール
    ActiveWindow.SmallScroll Down:=21

     ★セルA1を選択
    Range(“A1″).Select

     ★A1セルをB1セルにコピー&ペースト
    Range(“A1″).Select
    Selection.Copy
    Range(“B1″).Select
    ActiveSheet.Paste

     ★範囲”D1:F8″を範囲”G9:I17″にコピー&ペースト
    Range(“D1:F8″).Select
    Selection.Copy
    Range(“G9″).Select
    ActiveSheet.Paste

     ★列Cを昇順で並び替え
    Columns(“C:C”).Select
    Application.CutCopyMode = False
    ActiveWorkbook.Worksheets(“Sheet2″).Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(“Sheet2″).Sort.SortFields.Add Key:=Range(“C1″), _
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets(“Sheet1”).Sort
    .SetRange Range(“C1:C79″)
    .Header = xlNo
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
    End With

     ★列Cから重複を削除
    Columns(“C:C”).Select
    ActiveSheet.Range(“$C$1:$C$79″).RemoveDuplicates Columns:=1, Header:=xlNo

     ★作業中のファイルを「名前を付けて保存」
    ChDir “C:\Users\amano\Desktop”
    ActiveWorkbook.SaveAs Filename:= _
    “C:\Users\amano\Desktop\マクロファイル名.xlsm”, FileFormat:= _
    xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

    どうやって書けばいいのかわからないコードも、このように処理を逐一書き出してくれるため、コードを書く上でとても参考になります。マクロに触り続けていても、いまだにこの自動記録マクロにお世話になることが多々ありますね。この自動記録マクロとうまく付き合っていくのがVBAのスキルを上達させるコツと言えるかも知れません。

    ちなみに。
    処理中に参照するセルや範囲などが動的に変えたい場合は、この自動記録マクロ書き換える必要があります。VBA初心者が、まず一番最初に直面する壁ですね。長くなってきたので、その話は次回にしたいと思います。

     
  • admin 7:23 PM on 2010年7月27日 パーマリンク | 返信
    Tags: , VBA関数, サンプルプログラム, , , , 高度処理   

    【第6回】VBA関数:条件分岐 

    VBA関数を使いこなす上で、避けては通れないのが条件分岐です。

    この条件分岐というのは、簡単にいうと「A1の場合は、処理Bを実行する。A2の場合は、処理Cを実行する」というように、処理の場合分けをすることを指します。コード上は、以下のように書きます。

    If 論理式1 Then    ´論理式1を満たすとき
     処理A         ´処理Aを実行する
    ElseIf 論理式2 Then  ´論理式2を満たすとき
     処理B         ´処理Bを実行する
    Else           ´それ以外の時には
     処理C         ´処理Cを実行する
    End If

    たとえばサンプルプログラムとしては、

    Sub SampleIF()
    Dim a As Integer
    Dim b As String

    a =Cells(1,1)

    If a < 0 Then
    b = "マイナスの数です"
    ElseIf a >100 Then
     b = “大きい数です”
    Else
     b = “まあまあの数ですね”
    End If

    Cells(1,2) = a & “は、” & b

    End Sub

    条件分岐は、高度な処理になればなるほど必要になる関数ですので、覚えてしまいましょう!

     
  • admin 9:53 PM on 2010年7月9日 パーマリンク | 返信
    Tags: Application.WorksheetFunction.Countif, Application.WorksheetFunction.Left, , , , Instr, Instr関数, , , , WorksheetFunction, 文字列操作関数   

    【第5回】VBAでExcel関数を使うには? 

    前回のVBAの文法を見て、「Excelまでは分かるけど、やっぱりVBAとなると難しいなあ」と感じた方に朗報です。実は、VBAのコードの中で、Excel関数が使えます。

    使い方は、Excel関数の前に

    Application.WorksheetFunction.

    を加えるだけです。

    たとえば、

    Application.WorksheetFunction.Countif(Range(“A:A”),cells(1,1))

    と書けば、アクティブなシートのA1セルの値が、A列に何回出現するかを調べることができたりします。とっても便利ですよね!

    ただ、一点注意しなければならないのは、VBAにもけっこう関数が用意されているということです。

    文字列を左から指定文字数切り取るleft関数は、Application.WorksheetFunction.Left() と書かなくても、Left()で使えますし、他にも検索文字列が対象文字列のどの位置に存在するかを調べる関数はExcel関数ではFindですが、VBAであればInstr関数を使えば同じことを実現できます。

    Application.WorksheetFunction.をコード内で多用するとコードが長く読みづらくなっていくので、できるだけVBAに用意されている関数を使い、それでも足りない所をExcel関数で補完していくと良いのではないでしょうか。

     
  • admin 12:08 PM on 2010年6月28日 パーマリンク | 返信
    Tags: Cells(), Dim, Integer, Object, Range, String, , VBA入門, コメントアウト, シングルクオテーション, , 変数, 宣言, 文法,   

    【第4回】VBAの文法 

    1週間ぶりの更新ですね。この1週間、Excel関数の使い方をいっぱい更新したので、Excel周りでの検索ニーズに応えられたかと思いきや、このサイトへの流入キーワードを見てみると、

    excel columns counta
    excel countblank()=5
    excel vba 累乗
    excel2007 vba 保存をキャンセル
    excel2007 指数計算
    vba セミコロン
    vba 左から 文字 取得 column left
    値の貼り付け マクロ ショートカット vba
    自動記録 マクロ 速度

    というような感じで、VBAのニーズが根強いなあって感じですね。まあ、VBAの実践的な知識ってあまり出回ってないんですよね。僕もVBA作るとき、いつも苦労してます。みなさんのアクセス結果をこのブログのコンテンツにも反映できればいいなーと思ってます。

    それじゃあ、余談はこれくらいにして、VBAのお話に戻ると、今回はVBAの文法について書きたいと思ってます。

    VBAは見た目は難しいですが、とてもシンプルなプログラミング言語です。早速、例を挙げてまとめていきたいと思います。

    1.Subプロシージャの開始と終了

    Sub マクロ1()

    End sub

    この二行を書くと、今から「マクロ1」という名前でプログラミングコードを書きますよという宣言と、「End sub」に書いてあるところで「マクロ1」が終了しますよという宣言になります。ちなみに、プロシージャというのは英語で書くと「procedure」で、日本語では「手順」などの意味になります。Subプロシージャはモジュール(交換可能な、ある機能をもったひとまとまりの部位)となっているので、下記のように別のプロシージャですでに書いたものを参照・読込することができます。

    Sub マクロ1()

    コード1

    コード2

    End sub

    Sub マクロ2()

    マクロ1

    コード3

    End sub

    2.変数の宣言

    Dim 変数 As 型

    「変数をある特定の型として宣言します」という意味です。具体的な例を出してみると、

    Dim a As  String ´変数aを文字列として宣言

    Dim a As  Integer ´変数aを整数として宣言

    Dim a As  Object ´変数aをオブジェクトとして宣言

    こんな感じですね。省略可能なのでわりと急いでる時は変数をそのまま書いちゃうこともありますが、予期せぬエラーに遭遇することもあります。まあ、ここは時間との兼ね合いで、省略するかどうかは好きな方を選んでください。私は変数の名前が紛らわしい時だけ宣言してます。ちなみに、行の後ろについてる´(シングルクオテーション)で、それ以降の文字列をコメントアウトすることができます。あとで自分がつくったコードの作業をコメントアウトで追記しておくと、とても管理がしやすくなるので、できるだけコメントを残していくことをおすすめします。

    3.変数に値を代入

    変数 = 値

    a=15  ´数値を代入

    a=”VBA”  ´VBAという文字列を代入

    a=Range(“A:A”)  ´1行目1列のセルの値を変数aに代入

    a=Cells(1,1)  ´1行目1列のセルの値を変数aに代入

    a=Sheets(“シート1”).Cells(1,1)  ´シート1という名前のExcelシートの1行目1列のセルの値を変数aに代入

    a=b+c ´変数aに変数bと変数cの値を代入

    a=LEN(Cells(1,1)) ´変数aに1行目1列のセルの値の文字列の長さ(LEN関数で計測)を代入

    a=LEN(Cells(b,c)) ´変数aにb行目c列のセルの値の文字列の長さ(LEN関数で計測)を代入

    こんな感じですね。セルの値を代入するときにCells(1,1)と書くやり方は、選択範囲が動的な場合など、あとでとても重宝するので覚えておくとよいでしょう。ちなみに、上記のコードでは色々省略されていますが、変数bやcには、aに代入する前に値を定義しておきましょう。

    4.コードの改行

    a=Sheets(“シート1”).Cells(1,1)+Sheets(“シート1”).Cells(1,2)+Sheets(“シート1”).Cells(1,3)+  _

    Sheets(“シート1”).Cells(2,1)+Sheets(“シート1”).Cells(2,2)+Sheets(“シート1”).Cells(2,3)

    プログラミングコードが長い時は、改行をしたいところで _(スペース+アンダーバー)を使いましょう。

    excel columns counta
    excel countblank()=5
    excel vba 累乗
    excel2007 vba 保存をキャンセル
    excel2007 指数計算
    vba セミコロン
    vba 左から 文字 取得 column left
    値の貼り付け マクロ ショートカット vba
    自動記録 マクロ 速度
     
  • admin 12:29 AM on 2010年6月20日 パーマリンク | 返信
    Tags: , , , , , , IFERROR関数,   

    【Excel関数紹介30】IFERROR関数 

    IFERROR関数は、数式の結果がエラーになった時に、指定した値を返してくれる関数です。検索した文字列の開始位置を教えてくれるFIND関数や、徐数(割り算の分母)が0になってしまう時などに重宝します。エラーがずらっと並ぶとそれだけで目に痛いので、IFERROR関数で事前にエラーを空白値で返しておくとよいでしょう。ただし、Excel2007からの実装のようなので、Excel2003以前で実行しようとするときには注意が必要(というか使えません)です。

    記述例: IFERROR(値,エラーの場合の値)

    IF関数

     
  • admin 12:12 AM on 2010年6月20日 パーマリンク | 返信
    Tags: , , , , , , , , ,   

    【Excel関数紹介29】IF関数 

    IF関数は、条件分岐をさせたい時に使う関数です。論理式が真の場合、偽の場合に指定した値が表示されます。すべての引数がTRUEの時、TRUEを返す関数であるAND関数や、いずれかの引数がTRUEの時、TRUEを返す関数であるOR関数などと一緒によく用いられます。

    記述例:IF(論理式,真の場合,偽の場合)

    IF関数

     
  • admin 11:50 PM on 2010年6月19日 パーマリンク | 返信
    Tags: , , , , , , , ,   

    【Excel関数紹介28】OR関数 

    OR関数は、いずれかの引数がTRUEの時、TRUEを返す関数です。条件分岐の際に使うIF関数と組み合わせることで、効果を発揮します。すべての引数がTRUEの時、TRUEを返す関数であるAND関数との使い分けが重要です。

    記述例:OR(論理式1,論理式2,・・・)

    OR関数

     
  • admin 10:00 PM on 2010年6月19日 パーマリンク | 返信
    Tags: , , , , , , TRUE, , フィルタリング, ,   

    【Excel関数紹介27】AND関数 

    AND関数は、すべての引数がTRUEの時、TRUEを返す関数です。条件分岐の際に使うIF関数と組み合わせることで、効果を発揮します。データ処理時にフィルタリングをする場合によく使ったりします。

    記述例:AND(論理式1,論理式2,・・・)

    AND関数

     
  • admin 9:49 PM on 2010年6月19日 パーマリンク | 返信
    Tags: , , , HYPERLINK関数, , ジャンプ, ハイパーリンク, リンク   

    【Excel関数紹介26】HYPERLINK関数 

    HYPERLINK関数は、ショートカットまたはジャンプを作成すための関数です。Excelではお馴染みの関数、といいたいところですが、僕は結構最近知りました。もっと早くに知ってれば、けっこう短縮できた時間もあるんじゃないかと思う気もしますが、まあそれはまた別の話。

    記述例: HYPERLINK(リンク先,別名)

    HYPERLINK関数

     
  • admin 8:57 PM on 2010年6月19日 パーマリンク | 返信
    Tags: , VLOOKUP関数, , データ検索, , , 行列検索,   

    【Excel関数紹介25】VLOOKUP関数 

    VLOOKUP関数は、2列以上あるデータの1列目の特定の値を検索して、指定した列と同じ行にある値を取得するための関数です。データを検索したり分析したりするときによく使います。似たような関数にHLOOKUP関数というものもありますが個人的にはVLOOKUPのほうがよく使う気がします。

    記述例: VLOOKUP(検索値,範囲,列番号)

    VLOOKUP関数

     
c
新規投稿作成
j
次の投稿 / 次のコメント
k
前の投稿 / 前のコメント
r
返信
e
編集
o
コメントを表示する / 隠す
t
トップへ移動
l
go to login
h
show/hide help
esc
キャンセル