マクロを使用して表の並びを変更する方法

このQ&Aのポイント
  • 縦に並んでいる表をマクロを使用して横に並び替える方法について説明します。
  • 日付と項目が並んでいる表を横に並び替えるためには、マクロを組む必要があります。
  • 日付ごとに項目数が異なる場合は、マクロ内で条件分岐を行い、処理を行う必要があります。
回答を見る
  • ベストアンサー

縦に並んでいる表をマクロで横に並び替えたい。

以下のような縦に並んだ表を、 (A列には、日付/NO、B列には文字列が入力されています。)    A      B  ------------- 1 │ 10月1日   2 │NO      3 │1      A 4 │2      B 5 │3      C 6 │10月2日 7 │NO 8 │1      D 9 │2      E 10│3      F 11│4      G 12│5      H 13│10月3日 14│1       I 15│2       J 16│10月4日 17│・      ・ 18│・      ・ 19│・      ・ 20│・      ・ 以下のように横に並び替えたい。    A      B    C     D    E     F     G ----------------------------------------------------------------- 1 │ 10月1日     10月2日      10月3日      10月4日 ・・・・   2 │NO         NO          NO          NO       3 │1      A   1      D    1      I 4 │2      B   2      E    2      J 5 │3      C   3      F 6 │           4      G 7 │           5      H 8 │      9 │ 日付ごとに項目数が異なるので、 どのようにマクロを組めばいいのか分からず困っております。。 ご回答よろしくお願い致します><!

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

  • ベストアンサー
  • soixante
  • ベストアンサー率32% (401/1246)
回答No.2

すんごい不細工ですが突貫で書いてみました。いちおう動作確認済みです。 Sub aaa() Dim i As Long, Strow As Long, Edrow As Long Dim LstCol As Long, LstRow As Long Dim Rng As Range i = 1 Do While Cells(i, 1).Value <> "" If TypeName(Cells(i, 1).Value) = "Date" Then Cells(i, 3).Value = 1 End If i = i + 1 Loop LstRow = Cells(Rows.Count, 1).End(xlUp).Row Cells(LstRow + 1, 3).Value = 1 Do Strow = Cells(1, 3).End(xlDown).Row Edrow = Cells(Strow, 3).End(xlDown).Row - 1 Set Rng = Range(Cells(Strow, 1), Cells(Edrow, 3)) LstCol = Cells(1, Columns.Count).End(xlToLeft).Column + 1 Rng.Cut Cells(1, LstCol) If Cells(Rows.Count, 1).End(xlUp).Row <> LstRow Then Exit Do Loop LstCol = Cells(1, Columns.Count).End(xlToLeft).Column For i = LstCol To 3 Step -1 If Cells(1, i).Value = 1 Then Columns(i).Delete End If Next i Set Rng = Nothing End Sub 3列目に日付のフラグを立ててます。 それで上から順に切り取り、貼り付けを繰り返す、という手作業イメージを イメージした動きで。

mtsubasa0511
質問者

お礼

すぐのご回答本当にありがとうございます! うまくできそうです(連桁付き8分音符)

その他の回答 (1)

  • CC_T
  • ベストアンサー率47% (1038/2201)
回答No.1

ベタに処理するなら、別のシートへのコピーで処理していけば良いでしょう。 A列に日付が入ったセルのB列は空白でしょうから、各日付ごとに分けるのにそれが利用できるでしょうね。 別シートへの書き込みを、 sheet2!cells(YY,XX)=sheet1cells(Y,X) としてやるような形。 データのシートでB列を上から見ていって、空白ならA列が日付かを判定させる。  ※例えば日付欄が日付形式のデータならその値が2012/4/1の41000以上かどうか、などで判定出来る。 A列が日付ならXX=XX+2、YY=1。日付でないならYY=YY+1。 元データ行のA列をセル(YY,XX)に入れ、B列のセル内容をセル(XX+1,YY)に書き込む。 以上、A列が空白でない限りYを1つづつ増やしながら繰り返す。 要は、A列が日付だったら次にA列に日付がくるまでを下に入れていき、A列が日付だったら記入列を右に2列ずらして1行目に戻って続ける、ということです。

mtsubasa0511
質問者

お礼

すぐのご回答本当にありがとうございます!! CC_Tさんのおっしゃる通りSheet2に横の表として完成させることがベストです!! なんとなくおっしゃっている事は分かるのですが、 本当に初心者なもので実際にどのような式や VBAを入力すればいいのか。。 申し訳ございません。 可能であればもう少し具体的にご説明いただけないでしょうか><?

関連するQ&A

  • エクセルVBAについて教えてください

    エクセル2003 シート1     A       B      C 1  3月1日 A 100     *A列はカレンダーコントロールより選択としています 2  4月1日 B 100 3  3月1日 C 200     *B列はコンボボックスより選択としています 4  3月1日 D 200 5  4月1日 E 300     *C列は直接入力としています 6  4月1日 F 300 7  3月1日 G 100 8  4月1日 H 200 9  3月1日 I 200 10  4月1日 J 100 上記シート1の表のC列を下記シート2のC列に条件集計する シート2    A       B       C 1  3月1日   A~E     500    *選択した日付ごと及びA・B・C・D・Eの集計  2  3月1日   F~J     300    *選択した日付ごと及びF・G・H・I・Jの集計     3  4月1日   A~E     400    *選択した日付ごと及びA・B・C・D・Eの集計    4  4月1日   F~J     600    *選択した日付ごと及びF・G・H・I・Jの集計  すいませんが上記コードを教えてください 困ってます よろしくお願いします      

  • エクセル マクロでセルを自動移動

    例1のようになっているエクセル表があります。 データは右方向、下方向へ増えます。 Cの列以降は4つ単位でしかデータは増えません。 それを例2の表のように列A,Bのデータはそのままに Cの列以降の4つのセルを区切りに下の行に移動して、 空白の列まで言ったらA2の行以降を最後の行まで繰り返しするという マクロを書くことは可能でしょうか。 出来ましたらそのマクロを教えてください。 例1 A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 K1 L1 M1 N1 A2 B2 C2 D2 E2 F2 G2 H2 I2 J2 A3 B3 C3 D3 E3 F3 G3 H3 I3 J3 K3 L3 M3 N3 例2 A1 B1 C1 D1 E1 F1 A1 B1 G1 H1 I1 J1 A1 B1 K1 L1 M1 N1 A2 B2 C2 D2 E2 F2 A2 B2 G2 H2 I2 J2 A3 B3 C3 D3 E3 F3 A3 B3 G3 H3 I3 J3 A3 B3 K3 L3 M3 N3

  • マクロ作成について

    今、時刻表と合致するセルに色を付けてソートするマクロを作っています。 次のようになっています。(停留所が3つの場合)   A  B  C   D   E   F   G   H   I   J   K   L  1 2 a  0  1059 1145 1858 3 b  1  1030 1100 1130 1146 1510 1859 4 c  2  1000 1031 1101 1131 1147 1412 1511 1900 5  A列のa、b、cはそれぞれバス停名です。C2~J4に書いてある数字はそれぞれのバス停の発車時刻になります。 また、B列の数字はバス停名aを起点としてb、cのバス停までの所要時間です。B列に関してはユーザーの方で入力。以上を踏まえまして、今回実装したいことは、 (1)C2から範囲選択をして色を付け、選択した範囲とB列に入力した数字を足して、それと合致したセルに色を付ける。   A  B  C   D   E   F   G   H   I   J   K   L  1 2 a  0  1059 1145 1858 3 b  1  1030 1100 1130 1146 1510 1859 4 c  2  1000 1031 1101 1131 1147 1412 1511 1900 5 これを行うとセルC2~E2とD3、F3、H3、E4、G4、J4には色が付くことになります。 (2)(1)で色の付いたセルのみをソート(色の付いていない部分は後ろのセルへ移動)   A  B  C   D   E   F   G   H   I   J   K   L  1 2 a  0  1059 1145 1858 3 b  1  1100 1146 1859 1030 1130 1859 4 c  2  1101 1147 1900 1000 1031 1131 1412 1511 5  以上になります。これを実装するためのコードを教えては頂けないでしょうか?よろしくお願いいたします。

  • Excel(2000)のマクロで下記の様にしたいのですが

    Excel(2000)のマクロで下記の様にしたいのですが A1 2009/5/27 (開始) B1 2009/6/3 (終了) A1からB1の日付を 4の行には月 5の行には日を 順に表示させたいのですがどうしたらいいですか? 5 ........ 6 27 28 29 .... 1 2 3 A4 5月 A5 27 B5 28 C5 29 D5 30 E5 31 F4 6月 F5 1 G5 2 H5 3 の様に。 教えてください。お願いします。

  • 上級者の方教えてください。エクセル 縦に連なるデータを横の表に作り変えたい

    初心者なので何を読んでも分かりませんでした。 簡単な方法を教えてください。 縦に、 A列に、 (1)名前 A 3行空白 (2)コードB (3)特徴 C 4行空白 (1)名前 D 3行空白 (2)コードE (3)特徴 F 4行空白 (1)名前 G 3行空白 (2)コードH (3)特徴 I ・ ・ のように並んでいます。 全ての空白を除いて、 横に         A  B  C   名前AコードB特徴C   名前DコードE特徴F   名前GコードH特徴I    ・    ・ のような表に作り変えたいと思いますが、 どうしたら良いでしょうか? 仕事で何時間もかかって入力が嫌になります、よろしくお願いいたします。

  • 作成したいマクロがあります。。。

    どなたか教えてください。 マクロで、ある作業を自動化したいです。 【内容】 ある文字列の括弧内のみを取り出したいです。 【パターン1】   列1                  列2           列3    ・・・ 1 A123(D234,E567,・・・) 【パターン2】   列1                  列2           列3    ・・・ 1 B456(G785,H652, 2 C789,i951,j753 3 F963,K852・・・) 上記のように1つのセル内に( )が存在したり、また行をまたいで( )が存在したりします。 ※列は一定です。 その括弧内の文字のみをセルに分けて下記のように表示したいです。  列1                  列2               列3   ・・・ 1 B456(G785,H652,         G785              H652 2 C789,i951,j753           C789              i951        j753 3 F963,K852・・・)           F963             K852 抜き出したい文字列についてですが、1桁から10桁くらいまであります。 たとえば U2,R965482 等 以上です。どなたか教えてください。

  • 次のデータを入力したとき条件に合う行だけ抜き出したい。

    こういう風にデータを縦に入力してます。 book 1とbook 2とあります。 book 1 A B C D  E  F G H  I      J   no.0001 3 3月28日 水  1 名目1 名目2  数字1  数字2 数字3 book 2 A B C D E F    G H   I J no.1202 3 3月30日 1 朝 数字1 名目1   数字1  数字2 数字3 no.は6000ぐらいまであります。 これで、次のようにしたいです。 book 1は、Fの名目1の特定のものを、Cの日付順に行を抜き出したいです。 A B 3月1日 3月2日 3月3日 3月4日 ・ ・ ・ book 2は、Gの名目1の特定のものを、Cの日付順に行を抜き出したいです。 A B 3月1日 3月2日 3月3日 3月4日 ・ ・ ・ 可能でしょうか? できるのでしたら教えてください。 よろしくお願いいたします。

  • 勤務表の計算式で困っています

    勤務表で A列に日付 B列に曜日 ---------- Xさん C列 出勤は◎ 休みは空欄 D列 D1=IF(C1=0,"",COUNTIF(C1,"◎")+COUNTIF(E1,"◎")+COUNTIF(G1,"◎") ---------- Yさん E列 出勤は◎ 休みは空欄  F列 F1=IF(E1=0,"",COUNTIF(C1,"◎")+COUNTIF(E1,"◎")+COUNTIF(G1,"◎") ---------- Zさん G列 出勤は◎ 休みは空欄 H列 H1=IF(G1=0,"",COUNTIF(C1,"◎")+COUNTIF(E1,"◎")+COUNTIF(G1,"◎") ---------- といった表での計算式につきまして 日付行の例えば1日(A1行)の出勤が 3名出勤の場合 C1◎E1◎G1◎となり D1F1H1にはそれぞれ「3」と出力 2日(A2行)の出勤が Xさん1名の場合 C2◎ 、E2と G2 は空白となり D2には「1」と出力 F2H2は空白 とさせる場合 D1セルの計算式を =IF(C1=0,"",COUNTIF(C1,"◎")+COUNTIF(E1,"◎")+COUNTIF(G1,"◎") としていますが計算式エラーとなり数字だけ残って表示されてしまう場合があります その場合には下記の式に書き換えると表示が消えることもあるのですが =IF(C1="","",COUNTIF(C1,"◎")+COUNTIF(E1,"◎")+COUNTIF(G1,"◎") 毎回手作業でエラーを見つけて式を入れなおしています 計算式が違うのか根本が間違っているのか改善策をご教授ください ◎自体は別シートの方から参照コピーしております

  • 3つの表を1つに縦に連結する

    3つの表W、X、Yがあって、 これらの列を縦に連結して表Zに するにはどのようにすれば良いでしょうか? ちなみにDBはAccess2000です。 宜しくお願いします。 表W F1|F2 ----- A |B A |B 表X F1|F2 ----- C |D C |D 表Y F1|F2 ----- E |F E |F 表Z F1|F2 ----- A |B A |B C |D C |D E |F E |F

  • Excelマクロ 表の書き換え方法教えてください

    2日くらいあれこれやってみたのですが、全くできないためお教えいただけますでしょうか。 1 2 3 4 5 6 7 A a b c d e f g B h i j k l m n C o p q r s t D u v w x y z (以下続く) 注)A1セルは空白、1、a、h、o、uは同じ列になります という表(Book1.xls)を下記(Book2.xls)へ変更するマクロを作りたいと思っています。 A 1 a A 2 b A 3 c A 4 d A 5 e A 6 f A 7 g B 1 a B 2 b (以下略) Book1の行数は任意、1~7は固定、abcde…は空白セルもあります。 いいマクロがありましたらぜひご教授ください。 よろしくお願い致します。

専門家に質問してみよう