Excel VBA質問箱 IV

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

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


2937 / 13646 ツリー ←次へ | 前へ→

【65163】異なるブックからの2つの条件に合致した値の検索 八家九僧陀 10/4/21(水) 14:00 質問[未読]
【65164】Re:異なるブックからの2つの条件に合致し... Jaka 10/4/21(水) 15:35 発言[未読]
【65165】Re:異なるブックからの2つの条件に合致し... 八家九僧陀 10/4/21(水) 17:40 質問[未読]
【65171】Re:異なるブックからの2つの条件に合致し... Jaka 10/4/22(木) 14:15 発言[未読]
【65184】Re:異なるブックからの2つの条件に合致し... 八家九僧陀 10/4/24(土) 16:41 お礼[未読]

【65163】異なるブックからの2つの条件に合致した...
質問  八家九僧陀  - 10/4/21(水) 14:00 -

引用なし
パスワード
   Book"A"のSheet"A"のUserFormにText年月日、Text品目、Text価格があります。
Book"B"のSheet"B"には、A列〜CL列の数百行(1行目は見出しです)
のリストデータ"納品履歴"があり、A列には年月日、D列には品目、CA列には価格の各データがあります。
Book"B"を非Activeのまま、"納品履歴"のデータから、Text年月日とText品目に合致した価格を、Text価格に取り込むVBAを教えてください。

【65164】Re:異なるブックからの2つの条件に合致...
発言  Jaka  - 10/4/21(水) 15:35 -

引用なし
パスワード
   エクセル関数のSUMPRODUCTしか思いつまませんでした。
環境に合わせて、Shikiの文字列を変えてください。

Dim 日 As String, Shiki As String, 品名 As String

日 = "2010/4/20"
品名 = "ああ6"

Shiki = "SUMPRODUCT(([Book1]Sheet1!A2:A10=DATEVALUE(""" & 日 & """))*(" & _
          "[Book1]Sheet1!D2:D10=""" & 品名 & """),(" & _
          "[Book1]Sheet1!CA2:CA10" & "))"
'MsgBox Shiki
MsgBox Application.Evaluate(Shiki)

【65165】Re:異なるブックからの2つの条件に合致...
質問  八家九僧陀  - 10/4/21(水) 17:40 -

引用なし
パスワード
   Excel関数(Excel97ですが)は使いこなしてきたつもりでしたが、sumproductなる関数は初めて知りました。使い慣れた本にも掲載されていませんでした。ネットで調べて、なるほどこんな関数があったのかと勉強させていただきました。他にも活用させていただきます。
ところで、今回のuserformで活用するには、

Dim 日 As String, Shiki As String, 品名 As String

日 = text年月日.value
品名 = text品名.value
text価格.value=application.Function "SUMPRODUCT(([Book1]sheet1A2:A10=DATEVALUE(""" & 日 & """))*(" & _"[Book1]Sheet1!D2:D10=""" & 品名 & """),(" & _"[Book1]Sheet1!CA2:CA10" & "))"
とすればいいんでしょうかね?
それとA2:A10等は、数百行あった場合はどうすれば?

【65171】Re:異なるブックからの2つの条件に合致...
発言  Jaka  - 10/4/22(木) 14:15 -

引用なし
パスワード
   SUMPRODUCTは、ワークシート関数でありますが、
WorkSheetFunctionの類では使えません。

使うには、
Application.Evaluate("数式バーに書く数式と同じ文字列")

例えば、SUM関数で書くと
セルには、「=SUM(A1:A10)」と書きます。
Evaluateで使うには、
Application.Evaluate("SUM(A1:A10)")
のようにします。

SUM(A1:A10)などは、単に文字列ですから、下のように文字連結をして、

Application.Evaluate("SUM" & "(A1" & ":" & "A" & 10 & ")")
                           ↑
                  この辺は、最終行を取得して使えば良いです。

最終的に数式バーに入れるのと同じ文字列を使用状況に合わせて作ります。

【65184】Re:異なるブックからの2つの条件に合致...
お礼  八家九僧陀  - 10/4/24(土) 16:41 -

引用なし
パスワード
   ▼Jaka さん:
>SUMPRODUCTは、ワークシート関数でありますが、
>WorkSheetFunctionの類では使えません。
>
>使うには、
>Application.Evaluate("数式バーに書く数式と同じ文字列")
>
>例えば、SUM関数で書くと
>セルには、「=SUM(A1:A10)」と書きます。
>Evaluateで使うには、
>Application.Evaluate("SUM(A1:A10)")
>のようにします。
>
>SUM(A1:A10)などは、単に文字列ですから、下のように文字連結をして、
>
>Application.Evaluate("SUM" & "(A1" & ":" & "A" & 10 & ")")
>                           ↑
>                  この辺は、最終行を取得して使えば良いです。
>
>最終的に数式バーに入れるのと同じ文字列を使用状況に合わせて作ります。

Evaluate関数、教えていただきありがとうございました。
早速、他にも活用させてもらいます。

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