こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

[VBA]他シートから、検索した文字の左隣の数値を合計したい

エクセルのシートの
G列に検索対象の文字列があり、
F列にその文字列に対応した数値があります。

以下のような感じです
・・・ F列 G列 ・・・
    100 AAA
    200 AAA
    500 BBB
    800 BBB
    700 BBB

このシート(ここでは「シートX1」と呼ぶ)に対して、
別シートのセルから
kensaku1というユーザ定義関数を使って
該当する検索文字列の左隣(F列)の値を合計したいと
思ってます。また引数は以下のように
"シート名"と"検索文字列"を想定してます。
=kensaku1("シート名","検索文字列")

したがって、やりたいことは何かといいますと、
=kensaku1("シートX1","BBB")とすると、
500+800+700で2000がセルに入ればOKです。

ネットで調査してある程度のコードを見つけることは
できました。
コードは一番下にのせております。
しかし、コードの★1からデバッグすると、
うまく合計した値が返ってくるのですが、
いざシートに
=kensaku1("シートX1","BBB")とすると、
合計値が返ってきません。
デバッグすると★2の場所でNothingになってしまいます。

どなたか
原因を教えていただけないでしょうか?

環境はWindows XP SP2
Excel2000です。

-------------------------------------------
Function kensaku1(sheetName As String, myKey As String) As String

  Dim c As Range
  Dim FirstAdd As String
  Dim Gokei As Long
  Gokei = 0
  Worksheets(sheetName).Activate
  Set c = ActiveSheet.Columns("G").Find( _
    What:=myKey, _
    LookIn:=xlValues, _
    LookAt:=xlPart, _
    MatchCase:=False)

  If Not c Is Nothing Then ←★2
    FirstAdd = c.Address
    Do
      Gokei = Gokei + c.Offset(, -1).Value
      Set c = ActiveSheet.Columns("G").FindNext(c)
      If c.Address = FirstAdd Then Exit Do
    Loop Until c Is Nothing
  End If

  kensaku1 = Gokei
End Function
Sub test()  ←★1
  Call kensaku1("シートX1","BBB")
End Sub
-------------------------------------------

投稿日時 - 2009-05-30 17:21:04

QNo.5003026

困ってます

質問者が選んだベストアンサー

#1です。

Function kensaku1(sheetName As String, myKey As String) As Long
 With Worksheets(sheetName)
      kensaku1 = Application.SumIf(.Range("G:G"), myKey, .Range("F:F"))
 End With
End Function

こんな感じではダメでしょうか?

投稿日時 - 2009-05-30 21:17:09

お礼

うまくいけました!
ありがとうございます。
非常に助かりました。

教えていただいた Application.SumIf の使い方は勉強したいと思います。
今回は本当にありがとうございました。
ためになりました。m(_ _)m

投稿日時 - 2009-05-30 21:36:47

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

ActiveSheet

Worksheets(sheetName)
に置き換えてみるとか?

>Set c = ActiveSheet.Columns ~
Set c = Worksheets(sheetName).Columns ~

投稿日時 - 2009-05-30 18:03:28

補足

Set c = Worksheets(sheetName).Columns ~
でも同様にうまくいきません。

回答ありがとうございました。

投稿日時 - 2009-05-30 19:55:49

あなたにオススメの質問