🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

800閲覧

別シートの単語と一致する2カ所のセルを見つけ出し、その場所から右に1つだけセルを動かす。 動かした先にあるセルの数値を返し、それぞれの間に挟まれた数値の合計を得るマクロを行いたいです。

vpbyau

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2021/02/07 14:29

前提・実現したいこと

【vba】
別シートの単語と一致する2カ所のセルを見つけ出し、その場所から右に1つだけセルを動かす。
動かした先にあるセルの数値を返し、それぞれの間に挟まれた数値の合計を得るマクロを行いたいです。

[ 画像1 ]
イメージ説明

[ 画像2 ]
イメージ説明

実現したい事の詳細ですが、
①まず資料2の(E1)黄色背景のセルと(G1)オレンジ背景のセルに書かれた単語を、資料のA列から探し出す。
(今回の例ではE1がAさん、G1はHさん)
②見つけたセルから1つ右のセルをそれぞれ選択させる。
(今回の例では1.5と2.8)
③選択した2つのセルの間の数値を合計する。
④資料のE1に値を入力する。

AさんとHさんの数値の足し算は出来たのですが、その間の合計を導き出すコードが
どうしてもわかりません。
82.7という結果が出てほしいのですが・・・

発生している問題

それぞれ対応するセルを導き出すことまでは出来ましたが、その間の数値の合計が上手くいきません。

該当のソースコード

vba
ソースコード

Sub foundcell()

Application.ScreenUpdating = False

Dim Tango1 As Range Dim Tango2 As Range Dim One As Range Dim Two As Range Dim Kekka As Single Set Tango1 = Worksheets("資料").Range("A:A").Find(Worksheets("資料2").Range("E1")) Set One = Tango1.Offset(0, 1) '"資料"ワークシートのA列から"資料2"ワークシートのセル(E1)に書いてある単語と同じものを見つけ、その場所を"Tango1"とする '"Tango1"から右に1つセルを移動させた場所を"One"とする Set Tango2 = Worksheets("資料").Range("A:A").Find(Worksheets("資料2").Range("G1")) Set Two = Tango2.Offset(0, 1) '"資料"ワークシートのA列から"資料2"ワークシートのセル(G1)に書いてある単語と同じものを見つけ、その場所を"Tango2"とする '"Tango2"から右に1つセルを移動させた場所を"Two"とする Kekka = WorksheetFunction.Sum(One + Two) Worksheets("資料").Range("E1") = Kekka 'セルOneからセルTwoまでの値を合計したものを"Kekka"とする '"資料"ワークシートのセル(E1)に"Kekka"の値を反映させる

End Sub

試したこと

Kekka = WorksheetFunction.Sum(One + Two)
Worksheets("資料").Range("E1") = Kekka

sum(One + Two)の部分を直せばうまくいくのかなと
思っておりますが、VBAの勉強は最近始めたばかりで、
頓珍漢なコードになっているかもしれません。
もっと実用的なコードに書き直せるのであれば、
ぜひとも勉強したいです。

ご教授頂けましたら幸いです。

補足情報(FW/ツールのバージョンなど)

初めて質問させてもらいます。
読みづらくて申し訳ありません。

どうかよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

VBAはhatena19さんの回答で良いと思います。
数式でも対応可能なのでそちらを回答します。

excel

1=SUM(INDIRECT(ADDRESS(MATCH(資料2!E1,A:A,0),2,1) & ":" & ADDRESS(MATCH(資料2!G1,A:A,0),2,1)))

投稿2021/02/08 00:05

radames1000

総合スコア1925

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

vpbyau

2021/02/08 08:33

迅速な対応ありがとうございます。 数式でも可能なんですね!今回教えて貰ったことを違う形で試してみます。 ありがとうございました!
guest

0

ベストアンサー

vba

1 Kekka = WorksheetFunction.Sum(One + Two)

上記の部分を下記に修正すればいいでしょう。

vba

1 Kekka = WorksheetFunction.Sum(Range(One, Two))

Range(開始セル, 終了セル) で開始セルから終了セルまでの矩形範囲を返します。

投稿2021/02/07 15:15

hatena19

総合スコア34073

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

vpbyau

2021/02/08 08:31

迅速な対応ありがとうございます。 エラーも起きずに処理することができました! 別のデータでも応用することが出来、一歩前に進めました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問