VBAに詳しい方、たすけてください。
Excel2010のVBAで下記のように動くプログラムを組んではいただけないでしょうか。
①ExcelのBook全体のD列をユーザーが入力した任意の文字で検索する(テ
キストボックスを表示する)
②検索結果の文字の1個下の行に入った数値の合計を、検索した時に入力した文字数と一緒に「計算結果」というシートに貼り付ける。
例:検索した名前が「たまねぎ」で、その名前がsheet1のD3にあったら4行目の可視セルに入った数値の合計と名前をシート「計算結果」に貼り付ける。
※sheet2のD7にも同名の「たまねぎ」があった場合、8行目の可視セルの合計を加算して、総計を返す。返す値はブック全体の名前検索結果の1つ下の行の可視セルの合計。
シート「計算結果」
A1 B1
たまねぎ 合計(全シートのD列にたまねぎが入った行の、
1つ下の行の可視セルの合計)
貼り付けの際、A1とB1に既に別の文字と数値が入っていた際は
次の空白の行A2とB2に貼り付ける(空白のセルに貼り付ける)
No.3ベストアンサー
- 回答日時:
続けてお邪魔します。
結局各シートのD列を検索し、D列に対象品名があればその1行下のK~BT列の数値を合計すれば良いのですね?
↓のコードにしてみてください。
Sub Sample2()
Dim k As Long, myRow As Long, myFlg As Boolean
Dim myStr As String, wS As Worksheet
Dim myRng As Range, myFound As Range, myFirst As Range
myStr = InputBox("検索品名を入力")
With Worksheets("計算結果")
myRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1
For k = 1 To Worksheets.Count
If Worksheets(k).Name <> .Name Then
Set wS = Worksheets(k)
Set myFound = wS.Range("D:D").Find(what:=myStr, LookIn:=xlValues, lookat:=xlWhole)
If Not myFound Is Nothing Then
.Cells(myRow, "A") = myStr
myFlg = True
Set myFirst = myFound
GoTo 処理
Do
Set myFound = wS.Range("D:D").FindNext(after:=myFound)
If myFound.Address = myFirst.Address Then Exit Do
GoTo 処理
処理:
Set myRng = Range(wS.Cells(myFound.Row + 1, "K"), wS.Cells(myFound.Row + 1, "BT"))
With .Cells(myRow, "B")
.Value = .Value + WorksheetFunction.Sum(myRng)
End With
Loop
End If
End If
Next k
If myFlg = False Then
MsgBox "該当品目なし"
End If
End With
End Sub
今度はどうでしょうか?m(_ _)m
おはようございます。
ご返信が遅くなってしまい、申し訳ありません。
幾つか品名を検索し、求めていた合計値が出ることが確認できました!
本当に助かりました、ありがとうございます。
作業効率が上がり、他の作業に手を回せるようになって嬉しい限りです!
No.2
- 回答日時:
No.1です。
回答ではありません、確認です。
質問文では
① >①ExcelのBook全体のD列をユーザーが入力した任意の文字で検索する。
とありますが、画像ではJ列になっていますね?
J列で間違いないのでしょうか?
② 画像のような配置のシートが複数ブック内に同じ配置で存在している。
③ 一般的に考えると、J列に同じ「品名」が複数存在するのは考えにくいのですが、
質問文では複数存在する場合もある。と読み取れます。
これで間違いないでしょうか?
上記のコトが正確に判断できないと
ココでコードを載せても無意味になるようなので・・・m(_ _)m
No.1
- 回答日時:
こんばんは!
>検索結果の文字の1個下の行に入った数値の合計を・・・
というコトは↓の画像のように「品名」と「数量」がD列に交互にある!というコトでしょうか?
そういうコトだとしての一例です。
標準モジュールにしてください。
Sub Sample1()
Dim k As Long, wS As Worksheet
Dim myRow As Long, myStr As String
Dim myFound As Range, myFirst As Range
myStr = InputBox("検索品名を入力")
With Worksheets("計算結果")
myRow = .Cells(Rows.Count, "A").End(xlUp).Row + 1
.Cells(myRow, "A") = myStr
For k = 1 To Worksheets.Count
If Worksheets(k).Name <> .Name Then
Set wS = Worksheets(k)
Set myFound = wS.Range("D:D").Find(what:=myStr, LookIn:=xlValues, lookat:=xlWhole)
If Not myFound Is Nothing Then
Set myFirst = myFound
With .Cells(myRow, "B")
.Value = .Value + myFound.Offset(1)
End With
Do
Set myFound = wS.Range("D:D").FindNext(after:=myFound)
If myFound.Address = myFirst.Address Then Exit Do
With .Cells(myRow, "B")
.Value = .Value + myFound.Offset(1)
End With
Loop
End If
End If
Next k
End With
End Sub
上記マクロを実行すると
画像の一番左側Sheetのような感じになります。m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Excel(エクセル) エクセル 関数について質問です。 2 2022/10/03 11:14
- Visual Basic(VBA) VBA 検索と入力 Excel ブック ぶぶぶ シート ししし 列V 検索対象の列です 最終行は、お 6 2023/05/17 01:40
- Excel(エクセル) 複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください) 1 2022/12/14 15:08
- Excel(エクセル) 前の(左隣の)シートを連続参照するように、あとから変更したい 1 2023/02/22 00:51
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
- Excel(エクセル) 条件に合った数値の合計を表示させたい関数と条件指定の方法 3 2023/05/13 16:07
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
i=cells(Rows.Count, 1)とi=cel...
-
Excelのハイパーリンクにマクロ...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
DataGridViewのセル編集完了後...
-
【Excel VBA】指定行以降をクリ...
-
EXCELで変数をペーストしたい
-
Excel vbaで特定の文字以外が入...
-
【VBA】指定したセルと同じ値で...
-
特定行の色を変えたい(FlexGrid)
-
VBAでセルをクリックする回...
-
EXCELのVBA-フィルタ抽出後の...
-
スプレッドシートの数値列に対...
-
VBAの計算で@が出てしまう件
-
セル色なしの行一括削除
-
3桁または4桁の数値を時刻に...
-
”戻り値”が変化したときに、マ...
-
TODAY()で設定したセルの日付...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
特定の文字を条件に行挿入とそ...
-
Excel VBA、 別ブックの最終行...
-
EXCELで変数をペーストしたい
-
Excelのプルダウンで2列分の情...
-
Excel vbaで特定の文字以外が入...
-
TODAY()で設定したセルの日付...
-
screenupdatingが機能しなくて...
-
DataGridViewの各セル幅を自由...
-
Sub 要具ライフ() ActiveSheet....
-
【EXCEL VBA】Range("A:A").Fi...
-
VBAを使用した時間管理
-
VBAでセルをクリックする回...
-
セル色なしの行一括削除
-
エクセルVBAでコピーして順...
おすすめ情報
tom04様、マクロ構築ありがとうございます。
説明不足で申し訳ありませんでした。
各シートの表は画像のような感じになっておりまして、K列から数値が入っております。
検索した文字列の1行下のK列からBT列までの数値データの合計が
計算結果に出るのが望ましいのですが、可能でしょうか。
tom04様
こんにちは、補足へのご返信ありがとうございます。
確認の3つの項目の補足を送ります。
①ExcelのBook全体のD列をユーザーが入力した任意の文字で検索する。
とありますが、画像ではJ列になっていますね?
>申し訳ありません、画像ではJ列になっておりますが、検索する列は「D」列です。
②画像のような配置のシートが複数ブック内に同じ配置で存在している。
>はい、そうです。入っている情報は違いますが、表の配置は同じです。
③一般的に考えると、J列に同じ「品名」が複数存在するのは考えにくいのですが、質問文では複数存在する場合もある。と読み取れます。これで間違いないでしょうか?
>お察しの通りです。D列に同じ「品名」が複数存在する場合もあります。
分かりづらくて本当に申し訳ありません。
お手数をおかけいたしますが、よろしくお願いいたします。