• 締切済み

エクセル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で組み立てるとしたら、どのようになるでしょうか? 詳しい方、お力をお貸し下さい。 よろしくお願いします。

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

>行数は毎回不定です。 最終行、列を見つける方法 行:シート.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)
回答No.1

もしかして、VBAはまったく解らないから、すべて作って欲しい、ということでしょうか? もし、ある程度VBAを解っているなら、ある程度のコードを提示した上で、解らないところを質問しましょう。

関連するQ&A