- ベストアンサー
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…は空白セルもあります。 いいマクロがありましたらぜひご教授ください。 よろしくお願い致します。
- sarayuri1
- お礼率94% (35/37)
- オフィス系ソフト
- 回答数4
- ありがとう数5
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 >いいマクロがありましたらぜひご教授ください。 いいマクロとは言いませんが、こんに風にしたらいかがでしょうか? コメントブロックしたところをはずせば、行の右端のところがブランクの場合は、無視されます。シート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
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17068)
問題にミスタイプがありませんか? 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 r s t uu D u v 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 以下略 >マクロがありましたらぜひご教授ください マクロ(プログラム)は、既にあるものを、どこかから、見つけるのでなく、自分で作り出すものです。
お礼
仰る通り、ミスタイプがございました。申し訳ございません。 A1は空白、と書きましたのは 質問を書いているときに空白を入れても、確認画面になると空白が無視されてしまいAの上に1があるかのような表になってしまいましたので 誤解を招いてしまうかと思い、書いたものです。 マクロは自分で作り出すもの、仰る通りです。 私もまだまだ修行が足りません・・・ ありがとうございました。
- mshr1962
- ベストアンサー率39% (7418/18948)
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 _ ("_"はブランクの意味)になりますが...
お礼
ありがとうございました。 やってみたら一瞬でできました。感動です。。。 自分であれこれマクロを組んでいたときは、やたら長いものになっていたのですが こんなに少ない量のマクロでできてしまうものなのですね。
- zap35
- ベストアンサー率44% (1383/3079)
BOOK2のB1、B2は"h","i"ではなく"a","b"ですか? 単純に横に並んでいる並びを、縦並びに変えたいのならマクロの記録機能を利用して 「Book1のデータ先頭を選択」 「Shift+Ctrl+*」 → 表範囲を全選択 「選択範囲をコピー」 「BOOK2の貼り付け位置を選択」 「編集」→「形式を選択して貼り付け」 「行列を入れ替えるにチェック」→「OK」 をマクロにしてみてください。 もし意味が違うなら補足お願いします
お礼
すみません、記載ミスをしておりました。 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を開く 以下、同じ処理を繰り返す。
- 締切済み
- Visual Basic
- エクセル マクロでセルを自動移動
例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 ...... のようにしたいと考えています。
- ベストアンサー
- その他MS Office製品
- エクセル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
- 締切済み
- Visual Basic
- Excel2007のマクロで文字列を結合
Excel2007のマクロで文字列を結合したいのですがうまくいきません。 1、セルA1からU1までデータが1つずつ入ってます。 2、1のデータを3列ずつ結合してA3からG3にコピー。 例えば、セルA1あ、B1い、C1う、D1え、E1お、F1か、ならセルA3あいう、セルB3えおか、のようにマクロで一機にできるソースをお願いします。
- ベストアンサー
- その他(プログラミング・開発)
お礼
ありがとうございました。 表がきれいにできました! 同じことをするにも色々な組み方があって面白いなと思いました。 私もマクロについて基礎からきちんと勉強しなおします。