• ベストアンサー

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…は空白セルもあります。 いいマクロがありましたらぜひご教授ください。 よろしくお願い致します。

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

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

こんにちは。 >いいマクロがありましたらぜひご教授ください。 いいマクロとは言いませんが、こんに風にしたらいかがでしょうか? コメントブロックしたところをはずせば、行の右端のところがブランクの場合は、無視されます。シート1 のA1は空白でも、A1の隣のセルからデータが始まっていれば、データは、自動的に取れます。 Sub ReplacingLocation() Dim c As Variant Dim rng As Range Dim rngData As Range Dim i As Long Set rng = Worksheets("Sheet1").Range("A1").CurrentRegion With rng  Set rngData = .Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1) End With i = 1 For Each c In rngData  'If c.Column <= rngData.Cells(rngData.Count).Column And c.Value <> "" Then  With Worksheets("Sheet2")    .Cells(i, 1).Value = rng.Cells(c.Row, 1).Value    .Cells(i, 2).Value = rng.Cells(1, c.Column).Value    .Cells(i, 3).Value = c.Value  End With  i = i + 1  'End If Next Set rngData = Nothing: Set rng = Nothing End Sub

sarayuri1
質問者

お礼

ありがとうございました。 表がきれいにできました! 同じことをするにも色々な組み方があって面白いなと思いました。 私もマクロについて基礎からきちんと勉強しなおします。

その他の回答 (3)

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

問題にミスタイプがありませんか? B 1 a B 2 b は B 1 h B 2 i でしょう。 >A1セルは空白 この意味は? ーーー 下記でどうですか。 例  A1:H4 A a b c d e f g B h i j k l m n C o p q&nbsp; r s t uu D u v&nbsp; w x y z zz コード Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet '-- Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") '--- k = 1 For i = 1 To 4 For j = 2 To 8 sh2.Cells(k, "A") = sh1.Cells(i, "A") & j - 1 & sh1.Cells(i, j) k = k + 1 Next j Next i End Sub 結果 A1a A2b A3c A4d A5e A6f A7g B1h B2i B3j B4k B5l B6m B7n C1o 以下略 >マクロがありましたらぜひご教授ください マクロ(プログラム)は、既にあるものを、どこかから、見つけるのでなく、自分で作り出すものです。

sarayuri1
質問者

お礼

仰る通り、ミスタイプがございました。申し訳ございません。 A1は空白、と書きましたのは 質問を書いているときに空白を入れても、確認画面になると空白が無視されてしまいAの上に1があるかのような表になってしまいましたので 誤解を招いてしまうかと思い、書いたものです。 マクロは自分で作り出すもの、仰る通りです。 私もまだまだ修行が足りません・・・ ありがとうございました。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

Sub Macro1() Dim RG As RAnge Set RG = Workbooks("BOOK1.xls").Sheets("Sheet1").Range("A1") For Lx = 1 to 4 '←実際の行数をセットしてください。 For Cx = 1 to 7 Y = Y + 1 Cells(Y,1) = RG.Offset(Lx,0) Cells(Y,2) = RG.Offset(0,Cx) Cells(Y,3) = RG.Offset(Lx,Cx) Next Cx Next Lx End Sub こんなとこでしょうか? ※Book2上にマクロを設定して、実行してください。 Cの行の7の列はブランクなので C 7 _ ("_"はブランクの意味)になりますが...

sarayuri1
質問者

お礼

ありがとうございました。 やってみたら一瞬でできました。感動です。。。 自分であれこれマクロを組んでいたときは、やたら長いものになっていたのですが こんなに少ない量のマクロでできてしまうものなのですね。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

BOOK2のB1、B2は"h","i"ではなく"a","b"ですか? 単純に横に並んでいる並びを、縦並びに変えたいのならマクロの記録機能を利用して  「Book1のデータ先頭を選択」  「Shift+Ctrl+*」 → 表範囲を全選択  「選択範囲をコピー」  「BOOK2の貼り付け位置を選択」  「編集」→「形式を選択して貼り付け」  「行列を入れ替えるにチェック」→「OK」 をマクロにしてみてください。 もし意味が違うなら補足お願いします

sarayuri1
質問者

お礼

すみません、記載ミスをしておりました。 B1、B2は "h" "i" です。 (#4の方が仰っている通りです) 単純に行列の入れ換えですと、やたら横に長い表ができるだけで手作業になってしまいましたし 同じような表は今後ずっと変換する必要がありましたので、マクロを組もうかと考えました。

関連するQ&A

  • エクセル(マクロ) 特定セルのファイル間コピペ

    マクロで下記内容の処理を行いたいと思っております。 どのようなコードにすればよいかご教授よろしくお願い致します。 1.A.xlsを開く 2.B.xlsを開く 3.B.xlsの特定セルの値をコピーする。(特定セルを仮にB4、C7、D9とする) 4.A.xlsのC列にあるファイル名リストから「B.xls」というファイル名の入ったセルを検索する。 5.仮に5行目に「B.xls」というファイル名があれば、同じ行にある特定列 (行は固定で、例えばE5、F5、G5とする)に3.でコピーしたB4、C7、D9の値を張り付ける。 ※B4はE列、C7はF列、D9はG列に対応するものとする 6.B.xlsを閉じる 7.C.xlsを開く 8.C.xlsの特定セルの値をコピーする。(特定セルはB.xlsと同じB4、C7、D9) 9.A.xlsのC列にあるファイル名リストから「C.xls」というファイル名の入ったセルを検索する。 10.仮に7行目に「C.xls」というファイル名があれば、同じ行にある特定列 (行は固定で、例えばE7、F7、G7とする)に8.でコピーしたB4、C7、D9の値を張り付ける。 ※B4はE列、C7はF列、D9はG列に対応するものとする 11.C.xlsを閉じる 12.D.xlsを開く 以下、同じ処理を繰り返す。

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

    例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

  • Excelで複数行を1行にするマクロについて

    Excel2000で3行を繰り返し、1つの行にまとめていくマクロの書き方についてご教授ください。 例えば下記のような並びの時、 A B C D E F G H I ..... マクロを使って、 A B C D E F G H I ...... のようにしたいと考えています。

  • エクセル2007で%の平均値を求めたいのですが、うまくできません。

    エクセル2007で%の平均値を求めたいのですが、うまくできません。 先日下記の様な質問をさせて頂いたのですが、もう少し質問したいことがあったのに間違えて解決済にしてしまいました。 どなたか分かる方がいらっしゃいましたら教えてください。    A    B    C    D    E    F    G     H 1 目標  6.44%  4.50%  3.77%  5.15%  2.66%  2.79%  式を入れたいセル 2 実績  5.07%  6.00%  4.85%                 A2~G2の平均値 A1~G1は、=(F3/G6)みたいな数式が入っていて、%で表示されています。 B2~G2は、最初は空欄で毎月B、C、D、E、Fと一つずつ%が入っていきます。 上記で、H1のセルに、下記の様な結果を表示できる式を入れたいのですが、何かいい方法はないでしょうか? ・B2~G2が空白の時はB1~G1の平均値 ・B2にだけ数字が入っていてC2~G2が空白の時はB1の数字 ・B2~C2に数字が入っていてD2~G2が空白の時はB1~C1の平均値 ・B2~D2に数字が入っていてE2~G2が空白の時はB1~D1の平均値 ・B2~E2に数字が入っていてF2~G2が空白の時はB1~E1の平均値 ・B2~F2に数字が入っていてG2だけが空白の時はB1~F1の平均値 ・B2~G2全てに数字が入っている時はB1~G1の平均値 という質問に対して、 [H1]=AVERAGE(B1:INDEX(B1:G1,COUNT(B2:G2))) という式を教えて頂いたところ、うまくいきました。 半期分はこれでOKだったのですが、1年分だとHに半期の平均のセルが入るため、うまく表示できません。 ・B~Gが前期、Hが前期の平均 ・I~Nが後期、Oが後期の平均 さらに、Pに全期の平均を入れたい場合はどのようにしたらよいのでしょうか? [P1]=AVERAGE(B1:INDEX(B1:N1,COUNT(B2:G2,I2:N2))) にすると、Hのセルも入ってしまうため、後期に数字が入ると平均値の表示が1つずつずれてしまいます。 何回も申し訳ないのですが、どうぞよろしくお願いいたします。

  • エクセル2007で%の平均値を求めたいのですが、うまくできません。

    エクセル2007で%の平均値を求めたいのですが、うまくできません。 AVERAGEやIFをいろいろ組み合わせてみたのですが、どうしても分からないので教えてください。   A   B    C    D    E    F    G   H 1 目標  6.44%  4.50%  3.77%  5.15%  2.66%  2.79%  式を入れたいセル 2 実績  5.07%  6.00%  4.85%                 A2~G2の平均値 A1~G1は、=(F3/G6)みたいな数式が入っていて、%で表示されています。 B2~G2は、最初は空欄で毎月B、C、D、E、Fと一つずつ%が入っていきます。 上記で、H1のセルに、下記の様な結果を表示できる式を入れたいのですが、何かいい方法はないでしょうか? ・B2~G2が空白の時はB1~G1の平均値 ・B2にだけ数字が入っていてC2~G2が空白の時はB1の数字 ・B2~C2に数字が入っていてD2~G2が空白の時はB1~C1の平均値 ・B2~D2に数字が入っていてE2~G2が空白の時はB1~D1の平均値 ・B2~E2に数字が入っていてF2~G2が空白の時はB1~E1の平均値 ・B2~F2に数字が入っていてG2だけが空白の時はB1~F1の平均値 ・B2~G2全てに数字が入っている時はB1~G1の平均値 どうかよろしくお願いします。

  • エクセルマクロ 次のようなプログラム教えてください

    エクセルのマクロで、次のようなことをしたいと思っていますが、 素人でわかりません。 教えていただけますか。 ---------------------------------- o動かしているファイルをa.xlsとします。  a.xlsは、3行目からA列に名前、B列~D列にデータが入っていて、  各行ごとのファイルを作りたい。(行数は決まっていない)  なお、セルE1にある文字が入っている。 o各ファイルは、原紙としてgensi.xlsとして保存されているファイルに、  a.xlsのB~D列のものを入力したものを作りたい。  (B~D列のデータは、gensi.xlsのそれぞれセルC7・C8・C9に入力する)   gensi.xlsは、a.xlsと同じフォルダにあります。 o作成場所は、「C:\date」の中に、セルE1にある文字のフォルダ、A列に  ある名前のフォルダに作りたい。 (セルE1の文字のフォルダは、マクロを初めて実施するときは無いと思います  が、2回目からは存在すると思います。A列の名前のフォルダはマクロ実施時  にはありません。作成するファイル名は、A列の名前と同じ(フォルダ名と同じ).xls にします。) o実行ボタンを3つ作って、1つは今選択されている行のフォルダ・ファイルを作る。  2つ目は数字を入力させて、今選択されている行から入力した数字の行までを一括  で作成する。  3つ目は、3行目から現在入力されている行すべてを一括で作成する。 ------------------------------- 上記のことをしたいと思っています。 よろしくお願いします。 駄文ですみません。 なお、エクセルは古いバージョンでエクセル2000です。

  • 可視セルへのコピー マクロ

    次のように、可視セルから可視セルへコピーしたいです。 (元の状態) A   B     C     D   E   F 名前  支払  金額  名前 支払  金額 aさん 済    150 bさん 済    200 cさん 未    150 dさん 済    100 eさん 未    120 fさん 済    250 gさん 未    300 hさん 未    210 この状態をB列で支払が済んでるかどうかでフィルターをかけて ABC列をコピーし、DEF列に可視セルのみコピーして A   B     C     D   E   F 名前  支払  金額  名前 支払  金額 cさん 未    150  cさん 未    150 eさん 未    120  eさん 未    120 gさん 未    300  gさん 未    300 hさん 未    210  hさん 未    210 フィルターをはずすと A   B     C     D   E   F 名前  支払  金額  名前 支払  金額 aさん 済    150 bさん 済    200 cさん 未    150   cさん 未    150 dさん 済    100 eさん 未    120   eさん 未    120 fさん 済    250 gさん 未    300   gさん 未    300 hさん 未    210   hさん 未    210 と、未払いの人だけ、D列以降にもコピーされてる状態にしたいのです。 可視セルへのコピーはマクロを組む必要があると聞いて見てるのですが、 私が実現させたい可視セルへのコピーとまた違うプログラムでした。 どなたかよろしくお願いします。

  • EXCELのマクロで。。。

    シートAのセルC2の値(数字)を シートBのE、F、Gの各列のうち空いている一番左のセルで、かつ、D列に何か書いてある一番下の行のセル に転記したいです。 たとえば、シートBが図のような場合にはF28です。これが毎回、変化します。 マクロの記述を教えて下さい。よろしくお願い致します。

  • Excel 2007のマクロ記述について

    Excel 2007で、B4セルからI最終行までの整数のみを小数点以下1桁にする処理をマクロで実行したいのですが、どのように記述したらよいか教えてください。 最終行とはI列にセルの値がある最後の行です。 下記の例のマクロ実行結果は、1→1.0、2→2.0となります。 (例)      列      A  B    C    D    E   F  G   H  I    J      K  行4  A1 0.9   0.9   0.9   0.9  1.2  1.2   2  2   CIRCLE  CIRCLE    5  A2 1.4   1.4   1.6   1.6   1   1  1.5  1.5  CIRCLE  CIRCLE    6  A3 0.71  0.71   0.71  0.71  1   1  1.5  1.5  CIRCLE  CIRCLE マクロ実行結果      列      A  B    C    D    E   F  G   H   I    J      K  行4  A1 0.9   0.9   0.9   0.9  1.2  1.2  2.0  2.0  CIRCLE  CIRCLE    5  A2 1.4   1.4   1.6   1.6  1.0  1.0  1.5  1.5  CIRCLE  CIRCLE    6  A3 0.71  0.71   0.71  0.71  1.0  1.0  1.5  1.5  CIRCLE  CIRCLE

  • Excel2007のマクロで文字列を結合

    Excel2007のマクロで文字列を結合したいのですがうまくいきません。 1、セルA1からU1までデータが1つずつ入ってます。 2、1のデータを3列ずつ結合してA3からG3にコピー。 例えば、セルA1あ、B1い、C1う、D1え、E1お、F1か、ならセルA3あいう、セルB3えおか、のようにマクロで一機にできるソースをお願いします。

専門家に質問してみよう