• ベストアンサー

エクセルVBAによるマトリクス表の縦配列

エクセルVBAで以下のような処理を行うプログラムを作成したいのですが、 シロウトなんで、なかなかスマートに作れません。 どのようにすればいいかご教示いただけたら有り難いです。 (1)下記のように、縦横のマトリクス表にデータが入力されている。   A B C ・・ 1 2 3 ・ ・ (2)これを別シートに縦に2列にデータを並べるように処理する。  左列には"列項目&行項目"、右列には該当するデータをセットする。 A1  A1のデータ A2  A2のデータ  A3  A3のデータ ・   ・ B1  B1のデータ ・   ・ ・   ・ (3)尚、列項目(A.B.C...)と行項目(1.2.3...)の項目数は不定で、セルが空白になるまで、 処理を繰り返すかたちにする。 以上のような条件ですが、よろしくお願い致します。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 >(2)これを別シートに縦に2列にデータを並べるように処理する。 > 左列には"列項目&行項目"、右列には該当するデータをセットする。 そうしたら、事実上、データは1列ではありませんか? >左列には"列項目&行項目"  >A1  A1のデータ 単に、アドレスのことではありませんか? 列項目&行項目として、例が挙げれている内容とは違うのでしたら、ご指摘ください。 もし、項目として別にあるのでしたら、データの左端上の部分のデータはないことになりますね。 >列項目(A.B.C...)と行項目(1.2.3...)の項目数は不定で、セルが空白になるまで、 よく意味がわかりません。マトリックスで取得したら、もし、項目が別にあるのなら左端上の空白以外には、空白セルはないことになりますが、データの中間地で空白があったら、そこでデータの取得は終わりだということですか? とりあえず、一旦、マトリックスで取得して、2次元配列で、アドレスと値を入れなおして、その配列を、別のシートに貼り付けるという方法です。256*256 以上のデータは取得しても、2列のセルには入りません。 アドレスを入れるところで、時間的なロスが生じています。数値からアドレスに変換するのは、面倒なので、そのままセルにアクセスしてしまいました。 '<標準モジュール> Sub Matrix2Vertical() Dim ArBuf As Variant, myArray As Variant, MaxNum As Long Dim j As Long, i As Long, k As Long, Sh2 As Worksheet '===設定:移し変えるシート================ Set Sh2 = Worksheets("Sheet2") '======================================= With Range("A1").CurrentRegion  If .Count = 1 Then _  MsgBox "データがありません。", vbInformation: Exit Sub  MaxNum = Application.Min(.Count, Rows.Count)  ArBuf = .Value  ReDim myArray(.Count - 1, 1) '2次元配列を入れなおし For j = LBound(ArBuf, 2) To UBound(ArBuf, 2)  For i = LBound(ArBuf, 1) To UBound(ArBuf, 1)   myArray(k, 0) = Cells(i, j).Address(0, 0)   myArray(k, 1) = ArBuf(i, j)   k = k + 1  Next i   If k > MaxNum Then Exit For '多少のズレはあっても問題ないはず Next j End With   Application.ScreenUpdating = False    Sh2.Range("A1").Resize(MaxNum, 2).Value = myArray   Application.ScreenUpdating = True   Set Sh2 = Nothing   Beep End Sub

ayaka_ikeike
質問者

お礼

ご丁寧にありがとうございました。 本当に助かりました! なんとか自分でやろうと、一日やってましたが、 少しずつみえてきました。ご教示頂いた内容を参考に させていただくと、おそらくできると思います。

その他の回答 (1)

  • haukappu
  • ベストアンサー率15% (46/296)
回答No.1

(CurrentRegionとか使って)範囲を取得してコピーした後、「形式を選択して貼り付け→行列を入れ替える」で駄目でしょうか?

ayaka_ikeike
質問者

お礼

ご回答ありがとうございます。 参考にさせて頂きます。

関連するQ&A

  • Excel(VBA)マトリクスの解体方法について

    VBAで、以下のようなマクロを作成したいのですが、どのように作成したら良いのか検討がつきません。 どのようにすれば良いか、ご教授いただけたらと思います。 (過去の質問No.1488981を参考に記入させていただきます) (1)下記のように、縦横のマトリクス表にデータが入力されている。     A B C ・・ 1   X Y Z 2 a ○ × ○ 3 b × ○ ○ 4 c ○ ○ ○ (2)これを別シートに【"○"のついたデータのみ】縦に3列にデータを並べるように処理する。  左列には"項番"(1~)、中列には"行データ"、右列には"列データ" 1 a X 2 a Z 3 b Y 4 b Z  ・  ・  ・ (3)列データと行データの数は不定で、一番右下となるセルまで、処理を繰り返すかたちにする。(空白セルが10個以上になる等の条件で) 以上のような条件です。ご回答よろしくお願い致します。

  • エクセル2003のVBAを教えて

    エクセル2003のVBAを教えてください。 次の対象データで、(1)(2)(3)の作業が出来るエクセルVBAを教えて下さい。 (1)(2)(3)個々のVBAでお願いします。 ●対象データ:種類(A列)、文字(B列)、    データの行数:不特定なので、データのある最終行までとします。 ●教えていただきたい項目  (1):種類だけを(C列)に取り出す。  (2):種類の先頭に空白の行を3行入れて、追加の2行目の種類(A列)に文字(B列)を入れる。  (3):種類が5行以上あるときは、5行ごとに空白行を追加する。 ●対象データ 種類(A列)   文字(B列) AA       あああ BB       いいい BB       いい BB       いいい CC       うう CC       うう DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ ●(1)のVBAの結果(このようになるVBAを教えてください。) (C列) AA BB CC DD ●(2)、(3)のVBAの結果(このようになるVBAを教えてください。) 種類(A列)    文字(B列) あああ AA        あああ いいい BB        いいい BB        いいい BB        いいい うう CC        うう CC        うう ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ

  • ExcelのVBAで連番を振る。

    A列が空白で、B列に1行目から***行目(毎回変わる)までデータが入力されている時、 A列に、1から***まで(B列のデータが終わるまで、連番を振るにはどんなVBAを かいたらいいのでしょうか? お願いします。

  • エクセルVBAで質問です。

    エクセルVBAで質問です。 A列   B列 AAAA  1111 BBBB  2222 CCCC  3333 とあります。 上記を AAAA (空白) (空白) 1111 (空白) BBBB (空白) (空白) 2222 (空白) CCCC (空白) (空白) 3333 (空白) A列にB列を挿入し、2・3・5行目に空白のセルを入れていきたいのです。 9000行ぐらいあります。 他の列に A列、B列のものを取得していく形でも構いません。 とにかく、縦1列に並べたいです。 どなたか、ご教授お願い致します。

  • エクセルでマトリックス表を作るとき・・・

    よろしくお願いします。 マトリックス表をエクセルで作るときなどに 下記のようなことをしたいのですがうまく出来る方法はないでしょうか     A  B  C  D A B     ○  C        ○    D 上記のように行と列に同じ文字があり、クロスするところに○を入れたい、と思うのですが。。。。 (すいません、わかりますでしょうか・・・) 目検では出来ないぐらい数が多く、、、うまく出来る方法があれば教えてください。 よろしくお願いします。

  • Excel VBAでデータを自動処理したい

    Excelで大量のデータ処理をしなくてはならないのですが、以下の処理をExcel VBAで自動処理できないでしょうか? どなたかお知恵をお貸しください。 (1)A、B、C列からなるリストがあります。A,B列にはそれぞれオートフィルタが設定してあり、C列は空白です。A列、B列にそれぞれ条件を設定し、抽出したデータのC列(空白)に特定のデータを入力します。A列、B列2つの条件の組み合わせが100通りくらいあり、現在手動でオートフィルタを設定し、C列にデータを入力しております。例えばA,B列の条件の組み合わせと、それに対応するC列に入力するデータを表にしたテーブルを別に作り、A,B列の条件を自動に設定して、抽出し、C列にデータを自動に入力することを、テーブルの一番上の行から最後の行まで繰り返す、というようなことをVBAでExcelにしてもらいたいのです。自分でちゃんと勉強し、調べて、それでも分からなかったらお聞きするというのが筋だと思うのですが、今この仕事に追われて、時間がありません。(ほとんど毎日午前様です。)この仕事が片付いたら、じっくりVBAを勉強したいと思っております。どうぞよろしくお願いいたします。

  • マトリックスを書くときの考え方として正しいですか?

    よく、板書やメモ帳などにマトリックス書きませんか? マトリックスを書く際の考え方として、以下は正しいですか? 考え方:2つの異なる変数(項目)を行と列で取り、それ等の変数(項目)が交差する部分に、適切なデータを書く。

  • Excel VBAによる検索処理?

    Excelで以下の例のように、A列・B列に入力されているとします。A列を検索して、C列にB列の値を返す式を考えてますが、さっぱりわかりません。VBAとかも正直素人ですが、サンプルもしくは考え方を教えていただければと思います。以下の処理内容です。 ・AXセルが「B」であった場合、次のセル(A(X+1))を検索し、次が空白になるまで検索し、空白になる前の最後の行のB列の値をCXセルに返す。該当しない場合は空白のまま 下記の例ですと3行目、8行目のB列の値を2・3、6-8行目のC列のセルに返すことになります。よろしくお願いいたします。 (処理前) ___A__B__C ------------- 1 2__B__2 3__B__3 4______4 5______5 6__B__6 7__B__7 8__B__8 9______9 (処理後) ___A__B__C ------------- 1 2__B__2__3 3__B__3__3 4______4 5______5 6__B__6__8 7__B__7__8 8__B__8__8 9______9

  • エクセル マクロ VBA

    エクセルのマクロについて質問です。 『集計』というブックの『集計開始』というシートに     A列    B列     C列 1行目 見出し  見出し   見出し      (商品名)  (支店)  (個数)         2行目 コメント  空白     空白   3行目 空白   空白     空白 4行目 商品名  支店     個数  5行目 空白   空白     空白 6行目 空白   空白   コメント1 7行目 空白   空白     空白 8行目 空白   空白   コメント2 9行目以降    上記のデータ(見出しを除く)の繰り返し というデータが入っています。 B列の中に『AAA』という文字が含まれていたら、そのセルを空白に置換し、 含まれていなかったら、そこで処理がとまったりエラーが出たりしないで次のステッップへ進み、 C列の中に『B』という文字が含まれていたら、そのセルを空白に置換し、 含まれていなかったら、そこで処理がとまったりエラーが出たりしないで次のステッップへ進み、 (今は、手作業で編集→置換→検索する文字列の中に『B*』と入力し、 置換後の文字列を空白にしてすべて置換ということをやっています。)                            ABC列(データーの入っている行まで)の空白を含む行を一括削除し、 以下のような形にしたいのです。     A列    B列     C列 1行目 見出し  見出し   見出し      (商品名)  (支店)  (個数)         2行目 商品名  支店     個数  3行目 商品名  支店     個数          ・         ・ このようにするマクロ文はどのようになりますでしょうか?

  • ワードの表の中にマス目を入れたい

    こんにちは いつもお世話になっています。 ワード・エクセル(ともに2010、2007)を使っています。 エクセルでA列に文字データB列は空白の2列10行の表があります。罫線を外枠、内側縦横にひいてあります。 この表をワードにはりつけ、行の高さを30ミリにしてあります。右側の空白セルにマス目(10列、3行)を一括して入れる方法を教えてください。1つのセルにカーソルを置いて「セルの分割」でマス目になりますが右列を一括選択して一度にセルの分割をしたいのです。 セルの中に表をいれるとマス目にならないのです。 添付した画像のようなイメージです。 よろしくお願いします。

専門家に質問してみよう