VBAのメモ書き1(本を基礎で読み返して&少し記述)
メモ。覚書き。
VBA内でワークシート関数を使うときは
WorkSheetFunctionオブジェクトを使用する。
たとえば
WorkSheetFunction.SUM(A1:B5)とか。
以下のようなものを本で実際やってみたので残してみる。
Sub 請求書作成(kokyaku As String) '引数は請求書を作成する顧客名 Const HAN_HIDUKE_CLM As Integer = 1 '日付の列(販売ワークシート) Const HAN_KOKYAKU_CLM As Integer = 2 '顧客の列(販売ワークシート) Const HAN_SYOHIN_CLM As Integer = 3 ' 商品の列(販売ワークシート) Const HAN_TANKA_CLM As Integer = 4 '単価の列(販売ワークシート) Const HAN_SURYO_CLM As Integer = 5 '数量の列(販売ワークシート) Const HAN_KINGAKU_CLM As Integer = 6 '金額の列(販売ワークシート) Const HAN_MIDASHI As Integer = 1 '見出しの列数(販売ワークシート) Dim i As Integer '販売シート用カウンタ変数 Dim cnt As Integer '請求書ワークシート処理用のカウンタ変数 Dim hanKiten As Range '販売ワークシートの表の基点セル Dim seiKiten As Range '請求書ワークシートの表の基点セル cnt = 1 'cntの初期化 'ワークシート請求書雛形をコピー。新規請求書作成。 Worksheets("請求書雛形").Copy after:=Worksheets(Worksheets.Count) '請求書雛形ワークシートを末尾にコピー作成 Worksheets(Worksheets.Count).Name = kokyaku '新規コピー先のワークシート名を設定 Worksheets(kokyaku).Range("A6").Value = kokyaku '請求書の宛先を設定 Worksheets(kokyaku).Range("E2").Value = Date '請求日を設定 Set hanKiten = Worksheets("販売").Range("A4") 'hankitenの初期化 Set seiKiten = Worksheets(kokyaku).Range("A12") '請求書のワークシートの表の基点セルの初期化 '指定した顧客の販売データを請求書へコピー For i = 1 To hanKiten.CurrentRegion.Rows.Count - HAN_MIDASHI If hanKiten.Cells(i, HAN_KOKYAKU_CLM).Value = kokyaku Then seiKiten.Cells(cnt, 1).Value = _ hanKiten.Cells(i, HAN_HIDUKE_CLM).Value '日付 seiKiten.Cells(cnt, 2).Value = _ hanKiten.Cells(i, HAN_SYOHIN_CLM).Value '商品 seiKiten.Cells(cnt, 3).Value = _ hanKiten.Cells(i, HAN_TANKA_CLM).Value '単価 seiKiten.Cells(cnt, 4).Value = _ hanKiten.Cells(i, HAN_SURYO_CLM).Value '数量 seiKiten.Cells(cnt, 5).Value = _ hanKiten.Cells(i, HAN_KINGAKU_CLM).Value '金額 cnt = cnt + 1 End If Next i End Sub Sub フォーム用意() myForm.Show End Sub
読んだのはこの本。
ExcelVBAのプログラミングのツボとコツがゼッタイにわかる本
- 作者: 立山秀利
- 出版社/メーカー: 秀和システム
- 発売日: 2007/10/23
- メディア: 単行本
- 購入: 23人 クリック: 470回
- この商品を含むブログ (20件) を見る
あとなんとなくサンプルとして少し書いてみたの
Sub 店舗出力() Dim i As Integer 'セルのループ用 Dim bCodeRetu As Range '店舗コード列 Dim tempocode As Integer '探す店舗コード Set bCodeRetu = Range("A1") '店舗コード列の指定 tempocode = 1 For i = 1 To bCodeRetu.CurrentRegion.Rows.Count If Cells(i, "A").Value = tempocode Then Cells(bCodeRetu.CurrentRegion.Rows.Count + 1, "A").Value = Cells(i, "A").Value Cells(bCodeRetu.CurrentRegion.Rows.Count, "B").Value = Cells(i, "B").Value Exit For End If Next i End Sub Sub 区分行追加() Dim kCodeRetu As Range '科目コード列 Dim kubun1 As String '区分 Dim kubun2 As String '区分 kubun1 = "売上1" kubun2 = "売上2" Range("A:A").Insert '左端に列を挿入 Range("A1").Value = "区分" For i = 2 To Range("A1").CurrentRegion.Rows.Count If Cells(i, "D").Value = 1 Or Cells(i, "D").Value = 2 Then Cells(i, "A").Value = kubun1 Else Cells(i, "A").Value = kubun2 End If Next i End Sub
こんだけの分だと非常に乏しくてワークシートの方が俄然早い。。。
ワークシート関数で処理書いて処理させているけど、
参照元をたどっていくとややこしくなるのと、
書き方汚いせいで、ずれるたりすると他のデータもまとめて
どんどん計算ずれたりして直したりするのに時間を取られてしまう。。