- 締切済み
エクセルVBAについてアドバイスお願いします。
見出し列A1からG1かけてあり A1→大分類 B1→小分類 C1~G1→A×Bの情報 となっています。 A B C D E F G ア 1 ア 2 ア 2 ヒ 1 ・ ・ ・ ヒ 2 ヤ 1 ヤ 1 ヤ 3 ちなみに A列昇順→B列昇順に並んでおり、行数は毎回不定です。 ここから、A×Bの組合せが同じ行ごとにまとめて、新規のブックを作成し、そこに張り付けて、A見出し+B見出しの名前で、csvファイル形式で保存したいです。 今は、オートフィルターをかけて、A列選択→B列選択をしてコピー、を全ての組み合わせごと行っています。 大分類も小分類も、数は不定で、名称も毎回様々です。 この作業をVBAで組み立てるとしたら、どのようになるでしょうか? 詳しい方、お力をお貸し下さい。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- nda23
- ベストアンサー率54% (777/1415)
>行数は毎回不定です。 最終行、列を見つける方法 行:シート.Cells.SpecialCells(xlLastCell).Row 列:シート.Cells.SpecialCells(xlLastCell).Column >A×Bの組合せが同じ行ごとにまとめて ファイルを開いて、テキスト出力したらどうですか? 直前のA×Bと、現在のA×Bが異なったらファイルを閉じて、新たに 別の名前のファイルを開けばよいわけです。 以下はイメージコード Dim 最終行位置, 最終列位置 Dim 行, 列, 前回A, 前回B, 現在A, 現在B 最終行位置 = 略 最終列位置 = 略 行 = 1 Do Until 行 > 最終行位置 '★最終行までのループ 前回A = Cells(行, 1) 前回B = Cells(行, 2) Open "C:\xx\" + 前回A + 前回B + ".csv" For Output As #1 Do '★同じ組合せが続く間のループ For 列 = 1 To 最終列位置 If 列 > 1 Then Print #1, vbTab; '★区切りのタブ出力 Print #1, Cells(行, 列); '★項目の出力 Next Print #1, "" '★改行の出力 If 行 = 最終行位置 Then Exit Do '★最終行なら終了 行 = 行 + 1 If Cells(行, 1) <> 前回A Then Exit Do '★前回値と違えば終了 If Cells(行, 2) <> 前回B Then Exit Do '★前回値と違えば終了 Loop Close #1 Loop
- nattocurry
- ベストアンサー率31% (587/1853)
もしかして、VBAはまったく解らないから、すべて作って欲しい、ということでしょうか? もし、ある程度VBAを解っているなら、ある程度のコードを提示した上で、解らないところを質問しましょう。