FC2ブログ

今日から4月です

今日から4月ですね。

あの災害から3週間がたとうとしています。

ニュース等見ていると、災害の規模の大きさに驚いてしまいます。

震災に遭われた地域の復興を願っております。
が、それとともに

これから日本の経済はどうなるだろう?

また私はどうなるのだろう?

不安で一杯です。


さてVBAについて

今は仕事が忙しく、勉強している時間がありません^^;
少しずつはやっているのですが・・・
ブログに載せるほどはやっていません。

maikoガンバ!
スポンサーサイト



ワークシートの扱い方

今回はワークシートを複数ある場合にどうしたら良いか?を考えてみました。

こんなシートを3つ用意しました。
007_1.jpg

007_2.jpg

007_3.jpg

それぞれのシートからデータを抽出する方法について

Sub Test1()

  'ワークシート変数を定義
  Dim sht1 As Worksheet
  Dim sht2 As Worksheet
  Dim sht3 As Worksheet

  'ワークシート変数にオブジェクト???を代入
  Set sht1 = Worksheets("顧客")
  Set sht2 = Worksheets("商品")
  Set sht3 = Worksheets("伝票")

  'ワークシート(顧客)のセル3行2列目の値を表示
  MsgBox sht1.Cells(3, 2)

  'ワークシート(商品)のセル3行2列目の値を表示
  MsgBox sht2.Cells(3, 2)

  'ワークシート(伝票)のセル3行2列目の値を表示
  MsgBox sht3.Cells(3, 2)

End Sub


今回のキモは定義方法とその使い方

・定義方法
 Dim sht1 As Worksheet

・定義した変数にオブジェクト???を代入
 Set sht1 = Worksheets("顧客")   ・・・Setを使う必要があるみたいです。

・sht1.Cells(3, 2)
 変数を使ってセルの値を抽出

これはお決まりのパターンとして覚えておくことにしましょう。
あまり突っ込むと、頭がパンクするので^^;

※いままで「sht1」Cellsの前に書かないでいたのに動作していたのは
ActiveSheet.Cellsという風な意味だそうです。
ActiveSheetとは、現在表示しているワークシートという意味?みたいですね!



復習です♪

今回は私の会社で使っているサンプルデータ使って、売上表を作ってみます。

見た目とかは度外視で、売上表を作るのでプログラムを汚くなってしまいました^^;

こんなシートを用意しました。
 006_1.jpg

顧客、商品、伝票というデータが3つあり
顧客毎に売上金額を表示するプログラムを練習がてら作成してみました。


Sub Test1()

  Dim i As Integer
  Dim j As Integer
  Dim k As Integer

  Dim gokei As Integer

  '顧客10件分反復処理
  For i = 4 To 13
    '顧客1件分の合計を入れる(初期値0)
    gokei = 0

    '伝票10件分反復処理
    For j = 4 To 13
      '顧客データのID、伝票データの顧客IDが一致しているかどうか?
      If Cells(j, 9) = Cells(i, 2) Then
        '一致していれば、商品データ10件分の反復処理
        For k = 4 To 13
          '伝票データの商品ID、商品データの商品ID、が一致しているかどうか?
          If Cells(j, 10) = Cells(k, 5) Then
            '一致していれば、商品数量と金額を掛ける
            gokei = gokei + Cells(k, 6) * Cells(j, 11)
            Exit For
          End If
        Next k
      End If
    Next j
    '顧客名を表示
    Cells(i + 13, 2) = Cells(i, 3)
    '合計金額を表示
    Cells(i + 13, 3) = gokei
  Next i

End Sub


今回はいままでの復習な感じです。
が、より実務に近い処理ができたのではないかと思います。

しかし、実務になるとデータの件数が膨大になるので、シートが顧客、商品、伝票と分かれているのが
現状です。次回はシートが分かれている場合にどうしたら良いか?を考えていきたいと思います♪

カレンダーを作る

さて、今回はカレンダーもどきを作ってみました。
流石に今回は調べることが沢山ありまして、
昨日更新ができませんでした。

まずはこんなシートを用意
 005_1.jpg


プログラムをこんな感じのもを作成

Sub Test1()
  Dim dateStr As Date
  Dim dateEnd As Date

  Dim strYear As String
  Dim strMonth As String

  Dim intYobi As Integer

  Dim i As Integer
  Dim j As Integer

  'ここの変数の値によって、カレンダーが作成される
  strYear = 2011
  strMonth = 2

  '月始めを抽出
  dateStr = strYear & "/" & strMonth & "/1"

  '月終わりを抽出
  dateEnd = DateAdd("d", -1, strYear & "/" & strMonth + 1 & "/1")

  '月始めの曜日を求める(日曜日から1,2,3・・・となる)
  intYobi = Weekday(dateStr, vbSunday)

  '行番号4から始める
  i = 4

  '列番号日曜日が2列目
  j = intYobi + 1

  '日付の初期値
  cnt = 1

  'cnt と 月終わりの日付を比べながら反復
  Do While cnt < Day(dateEnd) + 1

    'セルに日付を入れる
    Cells(i, j) = cnt

    '日付を入れ終わったので、一日増やす
    cnt = cnt + 1

    '列番号を1足す
    j = j + 1

    'J=9になったら(土曜日の入力が終わったら)j=2にする(日曜日の列に戻す)
    'よって一行下にずれる。I = I + 1
    If j = 9 Then
      j = 2
      i = i + 1
    End If
  Loop

End Sub



今回のキモは
1、月初めと月終りの日にちを求めるところだと思います。

 ・これでカレンダーに表示したい年月日の月初め
  dateStr = strYear & "/" & strMonth & "/1"

 ・これでカレンダーに表示したい年月日の月終わり
  dateEnd = DateAdd("d", -1, strYear & "/" & strMonth + 1 & "/1")

  処理の内容としては
  カレンダーに表示したい翌月の年月日から1日引いて、
  求めたいカレンダーの月終りを求める

 ここまでやれば、反復処理する条件が設定できます♪

2、文字列の扱い方。
 文字列をくっ付ける場合は「&」で表記すること
 dateStr = strYear & "/" & strMonth & "/1"

 これはそれほど難しくないですね♪






ワークシートにあるデータを使ってみる

今回はワークシートにある、データを使って処理を行ってみたいと思います。
まずは、こんなデータを用意

 004_1.jpg

このシートに表示されているデータ(IDや名前)を取り扱うにはどうしたら良いのか?

インターネットで調べてみました。

Sub Test1

  MsgBox Cells(4, 2)

End Sub

実行結果は1 と表示されます。


MsgBox Cells(4, 2)
これはセル4行、2列目の値をメッセージボックスで表示します

MsgBox Cells(4, 3)
にすれば、セル4行3列目の値(maiko)をメッセージボックスで表示します




次にこのワークシートに値を入れてみます。

Cells(14, 3) = "jyunko"
セル14行3列目に"jyunko"が表示されます。

ちなみに
"jyunko"の部分の"(ダブルコーテーション)で括らないと×です。
jyunkoという文字列を入れると言う意味になるみたいです。


 004_2.jpg

実行結果はこんな感じ♪

これでプログラムから、ワークシートの値を取得する方法&挿入する方法が分かりました♪


とりあえず、VBAが少しずつ分かってきた感じがします♪
業務上で使う上ではスキルがまだまだ足りないですけど、ワークシート上に
値をいれたりすることは出来るようになったので、次回はカレンダーみたいな
機能を試しに作ってみたいと思います♪

またインターネットで調べてみよっと!







ありがとうございます♪
プロフィール

maiko35

Author:maiko35
maikoのExcel2007VBAの部屋をようこそ♪

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
FC2ブログランキング

FC2Blog Ranking

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR