Excel VBA質問箱 IV

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

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


20737 / 76732 ←次へ | 前へ→

【61408】Re:同じ処理の簡略化
発言  りん E-MAIL  - 09/5/6(水) 7:42 -

引用なし
パスワード
   たけ さん、おはようございます。

>AccessVBAについては,IfやSelectCaseの構文を改変した程度として
>捉えてください.

Funcionの一例です(標準モジュールに以下を記述)。

Sub test()
  Dim RR As Long
  For RR = 3 To 10
   With Application.ActiveSheet.Cells(RR, 1)
     If .Value = "" Then Exit For 'A列がカラだと抜ける
     MsgBox Format(GetMeals(.Offset(0, 1)), " 0点"), vbInformation, .Value & "得点"
   End With
  Next
End Sub
'
Function GetMeals(arg1 As Range) As Integer
  Dim NN(1 To 3) As Integer
  Dim RR As Long, CC As Long, TP As Integer
  RR = arg1.Row '行番号取得
  '
  With arg1.Parent
   For TP = 1 To 3
     NN(TP) = 0 '初期化
     CC = 2 + (TP - 1) * 3 '列初期位置
     '食べるか否か
     If .Cells(RR, CC).Value = 1 Then
      '食べる人は10点
      NN(TP) = NN(TP) + 10
      CC = CC + 1 '食べる人数:2人以上で10点
      If .Cells(RR, CC).Value >= 2 Then NN(TP) = NN(TP) + 10
      CC = CC + 1 '食事時間(複数に分岐)
      Select Case .Cells(RR, CC).Value
        Case Is >= 20: NN(TP) = NN(TP) + 10 '20分以上で10点
        Case Is >= 10: NN(TP) = 5      '10〜19分で5点
      End Select
     Else
      '否と無回答はスルー
     End If
   Next
  End With
  '例:夜は2倍
  NN(3) = NN(3) * 2
  '結果
  GetMeals = NN(1) + NN(2) + NN(3)
End Function

ちなみに、ワークシート関数としても使えます。
[K3セルの数式]=GetMeals(B3)
※参照するセルは同じ行ならどの列でもかまいません。

0 hits

【61398】同じ処理の簡略化 たけ 09/5/5(火) 23:07 質問
【61401】Re:同じ処理の簡略化 neptune 09/5/5(火) 23:42 発言
【61403】Re:同じ処理の簡略化 たけ 09/5/6(水) 0:38 発言
【61405】Re:同じ処理の簡略化 ゆみこん 09/5/6(水) 7:10 発言
【61408】Re:同じ処理の簡略化 りん 09/5/6(水) 7:42 発言
【61411】Re:同じ処理の簡略化 neptune 09/5/6(水) 11:17 回答
【61412】Re:同じ処理の簡略化 たけ 09/5/7(木) 6:27 お礼

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