• ベストアンサー

EXCEL 列と行の変換

今マンションの空室データーが xxxマンション 101 xxxマンション 305 xxxマンション 107 ハイツ○○○  A1 ハイツ○○○  A2 △コーポ    3 というデーターを xxxマンション 101 305 107 ハイツ○○○  A1 A2 △コーポ    3 という風に自動で変換したいのですが、AutoFilterとかでVBAでできるのでしょうか? 名前が各々違うので、ソートの方法がいまいちわかりません。連番なら変数使って次へと処理できるのですが・・・。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

No.1さんの回答のようにVBAでマクロを組めばできそうですね。 A列が、xxxマンションの間はループしながら、行が変わる毎に同一行の右横のセルにB行をコピーする。 xxxマンションからハイツ○○○になったら改行して 次の行に、マンション名、空室番号をコピーするって感じでできそうな気がします。

stand_alone
質問者

補足

返答ありがとうございます。 何となく流れはわかったのですが具体的にVBAにするとどんな感じになるのでしょうか?

その他の回答 (8)

回答No.9

久しぶりに見たらまだ締め切っていないので追加で回答します。(あまり自信がないのですが自分で組むのなら次のようにしてみます) 元データがAシート、編集先をBシート、Aシートの一列目にマンション名、2列目に部屋番号が入っているとします。 変数として、m(Aシート行)、n(Bシート行)、o(Bシート列)に定義 1)Aシートをマンション名(+部屋番号)でソート 2)m=1,n=1,o=2として設定して、mが最終行までループするように設定 3)A(m,1)をB(n,1)、A(m,2)をB(n,o)に代入 4)A(m,1)がA(m+1,1)と比較して  同じ場合は o+1  違う場合は m+1,n+1,o=2 5)上記3)に戻る というような感じでしょうか? 実際に組んで試してみたわけではないので、使用する関数etcは自分で確認してみてください。 といっても、質問者さんはもうこの回答をみることはないかもしれませんが...

  • cockerel
  • ベストアンサー率46% (253/548)
回答No.8

複数のウインドウを開いて入力作業をしていたためか、おマヌケなことに同じ内容で2つ投稿されていました。一方は無視してください(もっともVBAに挑戦中であれば両方とも無視されることになりますね)。 ついでですが、↓について: >ソートの方法がいまいちわかりません。連番なら変数使って次へと処理できるのですが・・・。 連番とソートは関係ありません。カスタムソートが希望でしたら、先ほどのデータ(加工後のもの)であればA列の手前に列を挿入し、希望する順番をそれぞれに振ります(注意:加工前のものは重複データ検出のため名前でソートする必要があります)。作業中に、たとえば、4番目と5番目の間に挿入したいデータが現れたときには、4.1という番号を与えます。同様に、4番目と4.1番目の間に挿入したいデータが現れたときには4.01という番号を与えます。このように番号を振った後、アクティブセルの領域(A1を選択した状態で「編集」から「ジャンプ」を選択し「セル選択」をクリック、「アクティブセルの領域」を選びOK)を選択して、A列でソートします(データ>並べ替え)。最後にA列に連番を振れば完了です(オートフィル)。

  • cockerel
  • ベストアンサー率46% (253/548)
回答No.7

マクロがわからない場合の簡単な方法: 名前       番号 xxxマンション  101 xxxマンション  305 xxxマンション  107 ハイツ○○○   A1 ハイツ○○○   A2 というデータを名前順にソートします(A列に名前、B列に番号と仮定)。 C列に =if(A2=A1,"","改行") D列に =if(A2=A1,"",A2) を入力し、両方をデータの最後までドラッグしてコピー。 B列をコピーしてE列にペースト。 C,D,E列をコピーしてワードにテキストでペースト。 ^p^t^tを^tに全置換(日本語あいまいを外すこと)。 「改行^t」を全消去。 全体をコピーして新しいシートに貼り付ければ終了です。 まったくの初心者でも(データの数とはほぼ無関係に)5分程度でできます。

stand_alone
質問者

お礼

とりあえず、おかげさまでエクセルとワードでうまく変換できました。ありがとうございました。

  • cockerel
  • ベストアンサー率46% (253/548)
回答No.6

マクロがわからない場合の簡単な方法: 名前       番号 xxxマンション  101 xxxマンション  305 xxxマンション  107 ハイツ○○○   A1 ハイツ○○○   A2 というデータを名前順にソートします(A列に名前、B列に番号と仮定)。 C列に =if(A2=A1,"","改行") D列に =if(A2=A1,"",A2) を入力し、両方をデータの最後までドラッグしてコピー。 B列をコピーしてE列にペースト。 C,D,E列をコピーしてワードにテキストでペースト。 ^p^t^tを^tに全置換(日本語あいまいを外すこと)。 「改行^t」を全消去。 全体をコピーして新しいシートに貼り付ければ終了です(5分程度でできます)。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

ロジックを考えましたか。 (1)「データシート」をマンション名+部屋番号で(手操作、VBAでも)ソートして、その後処理に入る方法 (2)ソートしないで処理に入る方法(順番は初出順) ーーーー (2)についてだけ、 (1)「整理シート」のA列に、初出のマンション名を下方向に記録していく (2)「データシート」の1行を上から順に読んだとき   (A)「整理シート」の上から見て行って、どこかの行にそのマ  ンション名があれば、   部屋番号の同じものがないか横方向に探し(あればどうする?)   なければ最後列の次列に質番号を追加   (B)整理シートになければ     最終行の次行にマンション名を追加、B列に部屋番号を追加   (C)そのためには、整理シートの最下行を記憶する変数    、列を変化させるポインタとなる変数     データシートの行を下へ変化させる変数など がいります。 以上は、総なめで探す方法で、データ量が多いと、時間がかかり、初心者的ですが、これ以上のものは、質問者に適当かどうか不安あるので、上記のロジックのコード化をお勧めします。 関数でもできそうですが式が複雑化する見込みです。 >具体的にVBAにするとどんな感じになるのでしょうか 自分で作れれば、今後応用がすごくできる課題ですよ。 ご回答者の厳しい雰囲気?を感じて、自力でまず考えてください。

stand_alone
質問者

お礼

ありがとうございます。 考えていたのは、フィルターをかけて、A列でソートして、b列をコピーしてC列に、列と行を変換してペーストしていた手作業を、どうにかVBAでと考えていたのですが、こういうロジックもあるのですね。 記録したものをLoop処理するぐらいしかVBAはわからないのですが、どう考えてもVBAで処理した方が楽だと思いますので、教えていた流れで考えてみて分からないときにまた、ご迷惑おかけするかもしれませんがよろしくお願いいたします。

noname#14768
noname#14768
回答No.4

自分で考える気は一切なさそうな感じですね。 とりあえずやってみて下さい。

回答No.3

回答ではありませんが...... わたしならExcelじゃなくて、ACCESSに放り込むと思います。 察するところ、かなりの量のデータがありそうなので・・・・

noname#14768
noname#14768
回答No.1

VBAだけで出来そうですね。

関連するQ&A