Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


19424 / 76736 ←次へ | 前へ→

【62744】Re:データベースに蓄積していきたい
発言  kanabun  - 09/8/26(水) 23:44 -

引用なし
パスワード
   ▼ema さん:

Sheet4(入力シート)ですが、ぼくはテストのために
入力補助を設定しておきました。

[B1]セルには[データ]-[入力規則]で 1,2,3,4,...10,11,12
  のリストをセットしておきました。
[B2]セルにも、Sheet2のA列(CD)リストから選べるよう、範囲に
  「顧客コード」と名前定義をしておいて、この範囲を入力規則の
  リスト範囲にセットしておきました。

また、
上のコードですが、何をしているか、以下に、少しコメント付けてみました。

> '--------------------------------------------------------- Sheet4
 「このModule内で使用する変数は必ず宣言してから使う」ことを宣言
> Option Explicit
>
 このワークシートのセル範囲に変更があったとき
> Private Sub Worksheet_Change(ByVal Target As Range)
   使用する変数を宣言します
   まず注目するセル範囲[B1,B2,B4]の3つのセル範囲用変数
>   Dim myRange As Range
   もうひとつRangeオブジェクト変数(使用法はすぐあと)
>   Dim c As Range

   注目するセル範囲[B1,B2,B4]の3つのセル範囲をmyRangeに
   セットします。
>   Set myRange = [B1,B2,B4]
   つぎに、変化のあったセルが[B1,B2,B4]のセルかを調べます
   Intersectメソッドは重なるセル範囲を返します
>   Set c = Intersect(Target, myRange)
   変化のあったセルTargetが[B1,B2,B4]のどれかのセルと
   重なっていれば 変数c にはセルが歳入されます。
   ↓逆に myRange[B1,B2,B4] のどのセルとも一致しないときは
   c は Nothing(セルなし)となりますので、すぐ処理を抜けます
>   If c Is Nothing Then Exit Sub

   また、myRange(すなわち[B1,B2,B4])の3つとも値が入力
   されていなければ、以下の処理は無駄なので しません。
>   If WorksheetFunction.CountA(myRange) < 3 Then Exit Sub
 
 ここまで来たときは、変化のあったセルは[B1,B2,B4]のどれかであり、
  かつ[B1,B2,B4]のどのセルにも値が入力されています。

>   Dim mon As Long
>   Dim m
   [Sheet2]のA列(顧客コード)データ範囲を参照するための変数
>   Dim RefRange As Range

   [B1]セルを見て、何月分の値かを取得します
>   mon = Val([B1].Value)
   [B1]セルの数値が 1〜12であれば有効な月数ですので、
    このときだけ処理を続けます。
>   Select Case mon
>    Case 1 To 12

      [Sheet2]のA列(顧客コード)データ範囲を変数にセット
>      With Worksheets("Sheet2")
>        Set RefRange = .Range("A2", _
>             .Cells(.Rows.Count, 1).End(xlUp))
>      End With
      [B2]セルの値が RefRangeの何番目(何行目)にあるか
      調べます
      m = Application.Match([B2].Value2, RefRange, 0)
      MATCHワークシート関数は検索して見つかった時
      検索範囲の上から何番目かを数値で返します
      (見つからなかったときはエラー値が返ります)
       数値が返ってきたときだけ [B4]セルの値を
>      If IsNumeric(m) Then
        Sheet2のRefRange(A列)のm行目の (2+mon)列目の
        セルに転記します
>        RefRange(m, 2 + mon).Value = [B4].Value
>      End If
>   End Select
> End Sub

0 hits

【62737】データベースに蓄積していきたい ema 09/8/26(水) 19:47 質問
【62739】Re:データベースに蓄積していきたい ponpon 09/8/26(水) 21:18 発言
【62741】Re:データベースに蓄積していきたい ema 09/8/26(水) 22:04 回答
【62740】Re:データベースに蓄積していきたい kanabun 09/8/26(水) 21:32 発言
【62742】Re:データベースに蓄積していきたい ema 09/8/26(水) 22:07 回答
【62743】Re:データベースに蓄積していきたい kanabun 09/8/26(水) 22:36 発言
【62744】Re:データベースに蓄積していきたい kanabun 09/8/26(水) 23:44 発言
【62746】Re:データベースに蓄積していきたい ema 09/8/27(木) 5:38 お礼

19424 / 76736 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free