- 締切済み
VBAの繰り返し試行と変数代入を使ったマクロ
変数の行列(サンプル) シート名 型番 sheet1 1 Sheet1 2 Sheet2 3 Sheet3 4 Sheet3 5 ・ ・ ・ をプログラムに代入して型番をシートごとに分けていく マクロを作りたいのですが何かいい方法があれば 教えてくれませんでしょうか。宜しくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Masa2072
- ベストアンサー率51% (94/182)
回答No.1
もう少し詳しく状況と希望する結果を説明されると回答もつきやすいと思います。 A列にシート名が、B列に型番が入っており、A列シート名に該当するシートの型番の列末尾に型番を追加していくということでよろしいでしょうか? マクロを作りたいとのことですので、ヒントだけ 1、A列を上から順に処理していく ・For Each Rangeオブジェクト in セル範囲 ~ Nextで処理 ・先頭を選択、選択したセルの値取得、一つしたのセルを選択 を選択したセルが空白になるまで繰り返す 等の方法があります。 2、選択セル内にある文字列でシートを指定 Sheets(Selection.Value)で可能です。 3、指定列の末尾にデータを追加する Range(先頭行のセル番地).End(xlDown).Offset(1,0).Select とするとデータが入力された最終行の1つ下のセルを指定できます。 作成する上での不明点等はソースとともに質問してください。
お礼
どうも返信ありがとうございます。 結果から言いますとマクロを導き出すことができました。 それと実際のシートの方はちょっと複雑なのでうまく伝わる か分かりませんが、実際には 在庫シート 品番 品名 当月在庫 当月在庫金額 1 △△△ 3 600 2 ××× 5 1200 ・・・ みたいなシートが毎月あがってきます。 本当はこの商品には大品目がありまして 例えると 大品目:魚 品番:1 品名:サンマみたいな。 ただ実際の商品は多い上に品名と大品目がぱっとみただけ で判断出来ないモノが多いので 番号対応表シート 大品目 品番 魚 1 魚 2 鳥 3 ・・・ を結びつきが分かる者が作っていきます。 そして下のマクロを試行します。 Sub 仕分君2号() Sheets(在庫シート).Select Dim R As Long Dim x Dim y For R = 1 To Cells(Rows.Count, "A").End(xlUp).Row x = Sheets("番号対応表シート").Cells(R, "A").Value y = Sheets("番号対応表シート").Cells(R, "B").Value Sheets(在庫シート).Select Rows("1:1").Select Selection.AutoFilter Field:=1, Criteria1:=y Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy Sheets(x).Select Sheets(x).Cells(Cells(Rows.Count, "A").End(xlUp).Row + 1, "A").Select ActiveSheet.Paste Next R End Sub すると、在庫シートから魚シート、鳥シート等に項目が自動的に 区分けされて行きます。 そこから魚シートの統計、鳥シートの統計をしていきます。 このマクロの利点は商品が増えても番号対応表シートをアップデートしていけばマクロをいじらなくていい点です。 その為マクロに疎い者が操作しても比較的簡単に操作 できます。 悩んでいた点は結局のところ、シートセレクトのマクロが うまくいっておらず途中でマクロが止まっていたようです。 1回試行ならどこが悪いのか分かりやすいのですが繰り返し 試行の際に1回目はうまくいっても2回目以降に繋がらない というデバッグが発生した際の問題点がなかなか見つかりません でした。 大変ありがとうございました。
補足
訂正 ×Selection.AutoFilter Field:=1, Criteria1:=y ○Selection.AutoFilter Field:=2, Criteria1:=y