投稿

4月, 2022の投稿を表示しています

VBA記事9. 表示形式 背景色操作

イメージ
  まず上記のような表を用意してください。( ------> は’ ------> と打つことで入力できます。) ************************************** Sub sample10() Dim i As Variant For i = 3 To 5 Cells(i, 4) = Cells(i, 3) * Cells(i, 2) Cells(i, 4).NumberFormatLocal = "#,##0" Next Columns(1).NumberFormatLocal = "yyyy/mm/dd" Columns(2).Interior.Color = vbYellow End Sub ************************************** そして上記のコードを打ち込むと図の左のようになります。 Column(1) と Column(2) は縦列全てに適用されますが、 Cells(i,4) だとこの場合 i は3~5なので 6行目以降には# , ##0が適用されていないのがわかります。 また、 cells(i,4) は For ~ Next の間に入っていないと機能しません。 これは For ~ Next の外だと i に値が入らないからです。

VBA記事8. MsgBox

イメージ
  ************************************** Sub 合計計算 () Dim i As Variant ' variant でなく Long でも可能 Dim SUMRANGE As Variant ' variant でなく Range でも可能 Dim x As Variant Set SUMRANGE = Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp)) ' Set SUMRANGE = Range(Cells(1, 1), Cells(10, 1)) x = (Application.WorksheetFunction.Sum(SUMRANGE)) MsgBox x End Sub ************************************** ボップアップでメッセージが出るようになります。 ************************************** Sub 合計計算 () Dim i As Variant ' variant でなく Long でも可能 Dim SUMRANGE As Variant ' variant でなく Range でも可能 Dim x As Variant Set SUMRANGE = Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp)) ' Set SUMRANGE = Range(Cells(1, 1), Cells(10, 1)) x = (Application.WorksheetFunction.Sum(SUMRANGE)) MsgBox " 合計値は " & x & " です " & vbLf & _ "x" & x, vbOKOnly, " 合計結果 " End Su...

VBA記事7. WorkSheetFunction.Sum(合計値計算)

イメージ
  ************************************** Sub 合計計算 () Dim i As Variant ' variant でなく Long でも可能 Dim SUMRANGE As Variant ' variant でなく Range でも可能 Set SUMRANGE = Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp)) ' Set SUMRANGE = Range(Cells(1, 1), Cells(10, 1)) Cells(i,2) =Application.WorksheetFunction.Sum(SUMRANGE)) End Sub ************************************** 上記のようなコードになります。 注意点として、最終行を取得するのが Cells(Row.count,1).End(xlUP).End(xlUP) となっており、これまでと違って .Row を付けるとエラーになります。 これは変数 SUMRANGE が範囲であるためです。 いままでは Dim i As Long もしくは variant で Long は大雑把に言うと整数でした。 しかし SUMRANGE にはセルのここからここまでという情報が格納されており、それは整数でなく、範囲です。 なので、 最後に .Row を付けると、縦列の数を整数として表現するので、エラーとなります。 また、 set = という文章を使って SUMRANGE に範囲を格納していますが、 これは範囲がオブジェクトといわれるものだからです。 VBA ではシートやセル(範囲)、ブックなどはオブジェクトと呼ばれています。オブジェクトは直訳すると、物体という意味ですが、簡単に言うと、人間の目にもシートやセルやブックは物体として見えるからです。 これも覚えてしまうしかありません。

VBA記事6.select文

イメージ
  **************************************** Sub sample4() Dim i As Variant For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row Select Case Cells(i, 1) Case 4 To 6 Cells(i, 2) = " 4から6です " Case Is = 10 Cells(i, 2) = "10 です " Case Is >= 14 Cells(i, 2) = "15 以上です " End Select Next End Sub **************************************** 上記のようなコードになります。 If では 4to6 などの文章は使えません。 If 文で同じことを行うなら下記の書き方になります。 If と select の使い分けとしては If の中に select を書くような使い方をしている人が多いようです。 また select の方が可読性とメンテナンスが良いと考えている人が多く、 select の方が良く使われますが、プログラムの目的は乱暴な言い方をすれば狙い通り動けばよいので、書きやすい方、必要に応じたほうを使っていけば大丈夫です。 後述の MsgBox は If とセットで使われることが多いです。

VBA記事5. IF文 文字色の変更

イメージ
**************************************** Sub sample3() Dim i As Variant For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 1) = 5 Then Cells(i, 2) = "5 です " End If Next End Sub **************************************** 実行すると A 列の5に反応して、横の B 列のセルに5ですと入力します。 数字を変えたり、ダブルコーテーション( “ )の中の言葉を変えることが出来ます。 更に追加で上記のようなコードを付け加えると、図の左のような結果になります。 Else ~ End If までには5以外の処理が入ります。 また If ~ Else ~ End If の間は何行書いても良いので行いたい処理を複数処理させることもできます。 Cells(i,2).Font.Color = vbRed で文字を赤色に変更しています。  また、 If~Else ~ End If の中に更に if 文を書いたり、 上記のように And を使うことで、5であり赤字ならばという複数条件を指定することもできます。 この if 文の中に if 文を書くなどの構造をネスト構造といい、何層にもなるネスト構造は混乱しやすい(読みづらい)ので避けるのが無難と言われていますが、プログラム的に正しく書いた処理ならネスト構造でも機能はします _ (アンダーバー)はコード内で改行するときに使用します。 今回の場合は And の後ろにアンダーバーをつけることで見やすくなると考えて、付けていますが、付けない場合は同じ行に5であり赤字であるなら Then と書くことも可能です。 また文章でなく、数式での処理をすることも可能です。 また、 Elseif 文を使って下記の書き方もできます。 この書き方をすると End if が一つ...

VBA記事4.二重ループと横列の最終行取得

イメージ
  ★6.二重ループ処理 と横列の最終列取得 **************************************** Sub sample3() Dim i As Variant Dim j As Variant For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row For j = 2 To Cells(1, Columns.Count).End(xlToLeft).Column Cells(i, j) = Cells(i, 1) * Cells(1, j) Next Next End Sub **************************************** **************************************** Sub sample3() Dim i As Variant Dim j As Variant For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row For j = 2 To Cells(1, Columns.Count).End(xlToLeft).Column Cells(i, j) = Cells(i, ”A”) * Cells(1, j) Next Next End Sub **************************************** 上記のようなコードになります。 また列の構成のしかたも真似たほうが読みやすくなりますので、コードを書いてる最中にタブキーを入力して上記の画像のような形になるようにしてみてください。 これにより、対応する For と Next のセットなどがわかりやすくなります。基本的には同じ横列の位置にあるものがセットになっていると考えてもらって OK です。 また、 2 重ループ処理は最初のうちは...

VBA記事3.最終行の取得のコード

イメージ
  最終行の取得     売上金額 単価 売り上げ個数 商品 1 1100 110   商品 2 100 100   商品 3 300 150   商品 4 400 200   商品 5 900 150   商品 6 1050 150   商品 7 2000 20   商品 8 500 ...