ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

EXCEL VBAコミュのセルをクリックすると現在の月に対応したセルの値が増えるように

  • mixiチェック
  • このエントリーをはてなブックマークに追加
現在、写真のような表を作っております。
地域別の月別の客数をまとめる目的なのですが、
来店のお客様の住所に対応したセル(男性だと水色・女性だとオレンジ色)をクリックすると
現在の「月」に対応したセルの値が1増えるようにしたいのです。

例、4月15日に 佐賀市 → 大和 の男性客の場合には E5 (R5,C5)セルをクリックします。
すると、J5(R10,C5) のセルが1増えるようにです。

現在、他からお知恵を拝借したりして作ったコードが



Private Sub Worksheet_SelectionChange(ByVal Target As range)

Dim arr(8, 2) As Integer
Dim mm As Integer
Dim cRow As Integer
Dim cCol As Integer

'月と男女の出力位置の定義
'(月,性別) = 出力列番号

arr(5, 1) = 10
arr(5, 2) = 11
arr(6, 1) = 12
arr(6, 2) = 13
arr(7, 1) = 14
arr(7, 2) = 15
arr(8, 1) = 16
arr(8, 2) = 17


'現在の月を取得
mm = Month(Now)

'現在のクリックされた行番号を取得
cRow = Target.Row
'現在のクリックされた列番号から設定する列を取得
Select Case Target.Column
Case 5
cCol = arr(mm, 1)
Case 7
cCol = arr(mm, 2)
Case Else
cCol = 0
End Select

If (cRow > 4 And cRow < 72 And cCol > 0) Then
Cells(cRow, cCol).Value = Cells(cRow, cCol).Value + 1

End If

End Sub



なのですが、当該セルをクリックしても反応しないのです。
VBAはまだまだいまいち理解できていないのですが、早急に完成させなくてはならず…
アドバイスいただけましたら幸いです。

コメント(9)

このマクロだと、5月〜8月の間しか動かないですよ!


以下に解説おば・・
因みに「'# 」で始まるコメントは例題です。

>>---------------------------------------------------------<<


'月と男女の出力位置の定義 【 arr(月,性別) = 出力列番号 】
arr(5, 1) = 10 '5月-男
arr(5, 2) = 11 '5月-女
arr(6, 1) = 12 '6月-男
arr(6, 2) = 13 '6月-女
arr(7, 1) = 14 '7月-男
arr(7, 2) = 15 '7月-女
arr(8, 1) = 16 '8月-男
arr(8, 2) = 17 '8月-女


'現在の月を取得
'# クリックした日の日付が 2009/6/1 の場合 ⇒ 6 が返る
mm = Month(Now)

'現在のクリックされた行番号を取得
'# 佐賀市、大和、女をクリックした場合 ⇒ 5 が返る
cRow = Target.Row

'現在のクリックされた列番号から設定する列を取得
Select Case Target.Column
'男の場合
'# 今回は女なので、False が返り、次のケース選択へ
Case 5
  cCol = arr(mm, 1)
'女の場合
'# 今回は女なので、True が返り、処理へ
Case 7
  '# 今回は arr(6,2) になるため、13 が返る
  cCol = arr(mm, 2)
Case Else
  'その他の場合
  cCol = 0
End Select

'5行目以下・71行以内・上記のその他の場合じゃない時は処理実行
If (cRow > 4 And cRow < 72 And cCol > 0) Then
  '対象セルに 1 を加算
  '# この場合、Cells(5,13) となり M5 に 1 を加算
  Cells(cRow, cCol).Value = Cells(cRow, cCol).Value + 1
End If

>>---------------------------------------------------------<<
>マリ男さん
PCのシステム時計を5月にして動かしてみたのですが。。。(汗)

もしくは、

arr(5, 1) = 10
arr(5, 2) = 11

の部分を

arr(4, 1) = 10
arr(4, 2) = 11

とすれば 今の4月でも出てくると思ったのですが…

↑あ、そういうオチだったのでしょうか。

ちゃんとコードを見ていないのですが
シートモジュールになってるのかな?と
気になっていました。

早く解決するといいですね >トピ主様
すみません。ほぼ同時に他の方からのコメントがあったみたいで。。

私の No.4の1行目の↑は 1のマリ男さんのコメントを
差しています <(_ _)>
すみません!

>くく さん
ご指摘が正解でした(汗)
標準モジュールにせっせと作ってしまってました。。。お恥ずかしい限りです。



>魔流さん
詳しい解説ありがとうございます。
結果として、基本的な間違いだったのですが、例題を出しての解説を
今、じっくりと読ませていただいたのですが、詳しく説明していたただいていたため
このコードをよく理解することができました。
ありがとうございました。

>マリ男さん
こちらが直感的には分かりやすいですね。
今からVBAでいろいろ作る必要がありそうなので大変参考になります。
ありがとうございます。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

EXCEL VBA 更新情報

EXCEL VBAのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。