• ベストアンサー

エクセルVBA:選択・貼付け(繰り返し?)

3種類の数式を、条件により選択しながら、不特定の回数(行数)に貼り付けたいのですが、どのようなコードが考えられますでしょうか?よろしくお願いします。 ○Sheet1  数式保存セル 数式(1):AZ8 数式(2):BA8 数式(3):BB8  数式選択条件 D列の値が (1)であれば数式(1)を、(2)であれば数式(2)を、(3)であれば数式(3)を  数式適用範囲 I8 ~ AW107  ※3種類の数式はそれぞれ、I8 で作成し、保存セルにコピーして用意したもの  例 / D8 が(1)であれば、AZ8 をコピーして、I8 ~ AW8 に計算結果のみ貼付けたい(数式のみ→値のみ)      D9 が(1)であれば、AZ8 をコピーして、I9 ~ AW9 に   〃      D10 が(3)であれば、BB8 をコピーして、I10 ~ AW10 に  〃      D11 が(2)であれば、BA8 をコピーして、I11 ~ AW11 に  〃      ・・・  ※何行使用するかは毎回変わる   ※他シートを用意したくない  ※ AY列は空いている(行数をカウントし変数とする、IF関数を用い条件に応じて数式保存セル位置を文字列で表示し変数とする、などを組合わせてできないかと思いましたが、思い浮かびませんでした。)

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

  • ベストアンサー
noname#29107
noname#29107
回答No.4

#1です。 >具体的なD列の値は、数式順に 背筋、アーム、レッグ の三種類のみ であれば、以下のように修正。 Sub test() ix = 8 Do While Cells(ix, "D") <> ""   Select Case Trim(Cells(ix, "D"))   Case "背筋"     Range("AZ8").Copy Destination:=Range(Cells(ix, "I"), Cells(ix, "AW"))   Case "アーム"     Range("BA8").Copy Destination:=Range(Cells(ix, "I"), Cells(ix, "AW"))   Case "レッグ"     Range("BB8").Copy Destination:=Range(Cells(ix, "I"), Cells(ix, "AW"))   End Select   Range(Cells(ix, "I"), Cells(ix, "AW")).Copy   Cells(ix, "I").PasteSpecial Paste:=xlPasteValues   ix = ix + 1 Loop Range("I8").Select End Sub 何カ所か修正したのでそのままコピー貼り付けしてください。

nonboo
質問者

お礼

ありがとうございました。すべて希望通りとなりました。感謝感激です。コードを短く書くというレベルではないものですから、理解するのに時間がかかりました。

nonboo
質問者

補足

度々ありがとうございます。ほぼ希望通りです。質問が曖昧で申し訳ございません。貼り付けられるセルが色つきなものですから、書式も変えたくないのですが、最後のPasteの前のどこを調整すれば良いでしょうか。

その他の回答 (3)

noname#29107
noname#29107
回答No.3

>D列の値が漢字やカタカナなのですが、 #1です。具体的なD列の値はどんなのでしょう。 数値の項目はないのでしょうか?途中に空欄が入ることはないですか? これだけの情報では、適当に修正してくださいとしか言えないです・・・・ Sub test() ix = 8 Do While Cells(ix, "D") <> ""   Select Case Cells(ix, "D")   Case "1番目のD列の値" 'ここを修正     Range(Cells(ix, "I"), Cells(ix, "AW")).Formula = Range("AZ8").Formula   Case "2番目のD列の値" 'ここを修正     Range(Cells(ix, "I"), Cells(ix, "AW")).Formula = Range("BA8").Formula   Case "3番目のD列の値" 'ここを修正     Range(Cells(ix, "I"), Cells(ix, "AW")).Formula = Range("BB8").Formula   End Select   Range(Cells(ix, "I"), Cells(ix, "AW")).Copy   Cells(ix, "I").PasteSpecial Paste:=xlPasteValues   ix = ix + 1 Loop End Sub

nonboo
質問者

お礼

たびたびありがとうございます。空欄についてですが、ありました。D列の値が 背筋 の時のみE列が空欄になります。失礼いたしました。

nonboo
質問者

補足

申し訳ございません。たいへん失礼いたしました。具体的なD列の値は、数式順に 背筋、アーム、レッグ の三種類のみです。途中に空欄はありません。よろしくお願いします。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

Sub 式設定() Dim line As Long line = 9 Do If Range("D" & line) = "(1)" Then Range("I" & line).Formula = Range("AZ8").Formula ElseIf Range("D" & line) = "(2)2" Then Range("I" & line).Formula = Range("BA8").Formula ElseIf Range("D" & line) = "(3)" Then Range("I" & line).Formula = Range("BB8").Formula ElseIf Range("D" & line) = "" Then Exit Do Else Range("I" & line & ":AW" & line).Clear End If Range("I" & line & ":AW" & line) = Range("I" & line) line = line + 1 Loop End Sub

nonboo
質問者

補足

ありがとうございます。素晴らしいと思ったものの、私の力不足で、成功しませんでした。実はD列の値が漢字やカタカナなのですが、そのせいでしょうか?

noname#29107
noname#29107
回答No.1

一例としてはこんな感じでしょうか。 Sub test() ix = 8 Do While Cells(ix, "D") <> ""   Select Case Cells(ix, "D")   Case 1     Range(Cells(ix, "I"), Cells(ix, "AW")).Formula = Range("AZ8").Formula   Case 2     Range(Cells(ix, "I"), Cells(ix, "AW")).Formula = Range("BA8").Formula   Case 3     Range(Cells(ix, "I"), Cells(ix, "AW")).Formula = Range("BB8").Formula   End Select   Range(Cells(ix, "I"), Cells(ix, "AW")).Copy   Cells(ix, "I").PasteSpecial Paste:=xlPasteValues   ix = ix + 1 Loop End Sub 途中にD列が空白になってもデータが107行まで続くなら、For ~nextで回すように変更したらいいでしょう。

nonboo
質問者

補足

ご回答ありがとうございます。質問に漏れがあって、D列の値が漢字やカタカナなのですが、そのせいかうまくいきませんでした。基本を理解できていなく、申し訳ございません。お手数ですがご指導ください。

関連するQ&A

  • エクセルでのマクロについての質問です

    毎日行数の違うデータの隣に数式を入力してフィルでコピーしていますが簡易のマクロを組んでみました。ですが行数が変わるためマクロ登録した時の行数までしか数式がコピーされません。 画面1のようにC1、D1セルの数式をフィルでコピーしたマクロを登録しました。画面2のようにデータが多くなるとC5、D5までしかコピーされません。最初はC1、D1だけに数式を入力してマクロ実行後、フィルでコピーしていましたが面倒な為、現在は行数を多く設定していますが無駄に数式が入るためにデーターが重くなります。マクロでB列の最下セルを検索しその列までC,Dセルをコピーというなマクロが出来るなら教えて頂きたいです。VBAの知識を必要とすると思いますがよろしくお願いします。

  • エクセルVBA:マクロの中にマクロ?

    度々よろしくお願いします。ボタンが複数あって、それぞれに記録されたマクロの一部分が共通している場合の処理について教えてください。 例えば、前回の質問でご回答いただいたモノを流用し、別の処理と複合させたマクロがあります。 この変数ixがボタン(それぞれのマクロ)ごとに異なる場合、Do While以下を別のマクロとして記録し、それぞれのマクロの中で Application.Run "TEST.xls!Macro1"などのようにできるのでしょうか?変数の扱いをどうして良いのかわかりません。 Sub test() ~別の処理 ix = 8 Do While Cells(ix, "D") <> ""   Select Case Trim(Cells(ix, "D"))   Case "背筋"     Range("AZ8").Copy Destination:=Range(Cells(ix, "I"), Cells(ix, "AW"))   Case "アーム"     Range("BA8").Copy Destination:=Range(Cells(ix, "I"), Cells(ix, "AW"))   Case "レッグ"     Range("BB8").Copy Destination:=Range(Cells(ix, "I"), Cells(ix, "AW"))   End Select   Range(Cells(ix, "I"), Cells(ix, "AW")).Copy   Cells(ix, "I").PasteSpecial Paste:=xlPasteValues   ix = ix + 1 Loop Range("I8").Select End Sub

  • エクセルVBAで

    あるセル(D1)とします。 ここに数式が入力されていてこの数式をたとえばD2~D500までコピー するというのはどのようにすればいいのでしょうか?

  • エクセルの関数について。

    エクセルの関数。 Sheet1の作業列1のA2セルに =IF(COUNTA(Sheet2!2:2)=0,"",IF(Sheet2!A2="",A1,Sheet2!A2)) →数式1とする 作業列2のB2セルに =IF(A2=$D$2,ROW(),"") →数式2とする という数式を入れA2・B2セルを範囲指定 → B2セルのフィルハンドルで下へコピーしておきます。 (Sheet2の行数以上コピーしておく) そしてE2セルに =IF(COUNT($B:$B)<ROW(A1),"",INDEX(Sheet2!B:B,SMALL($B:$B,ROW(A1)))&"") →数式3とする という数式を入れオートフィルで列方向・行方向にコピーする。 教えて頂きたいことは、数式1、数式2、数式3が何を意味しているのか。 と、この数式を使って、表を作成したのですが、ある特定の数字(コード、D2セルに入力)を入力しても反応してくれない。 (E2~H2まで、空白セルの状態になります。) (sheet2は約1200行あります。) 教えて頂けないでしょうか?

  • エクセル VBA で 教えてください!

    初めて質問させていただきます 初心者で困っています どなたかご教授よろしくお願いします! A列 ____B列______C列 B_____________________ 123 D______________________ 1 D______________________ 2 B______________________456 D______________________ 1 D______________________ 2 D______________________ 3 B______________________789 D______________________ 1 自分はB列にいます(表現が正しいかもわかりませんが) 同じ行で A列の内容が Bだったら隣のCセルの 内容をBセル(自分のいるセル)にコピー Dだったら上の内容(Bの時コピーした内容)をコピーし          行を下へ繰り返し A列のデータが空白まで繰り返す そうして B列を 埋めたいのですが よろしくお願いしたします!       

  • EXCEL 特定位置のセルを参照したい

    お世話になります。田中ともうします。 あるシートのD8~AZ8の間に"E"という文字があります。この"E"の位置は可変です。 D1に数式を入れたいのです。 上記範囲(D8-AZ8)の間で"E"があるセルの左から2列目の値をD1から参照したいのですが、 数式がわからないのです・・ どなたかご教授いただけますでしょうか。 よろしくお願い致します。 EXCEL2013

  • エクセルVBA、数式の入ったセルのコピーについて質問です。よろしくお願

    エクセルVBA、数式の入ったセルのコピーについて質問です。よろしくお願いします。 シートのA列は日付の入ったセルがあり、データを更新する度に行が追加されていきます。 数式(1)~(3)は、それぞれ異なる計算式が入っており、日付データを参照して計算を行っています。   A    B    C    D 1 日付データ 数式(1) 数式(2) 数式(3) 2 日付データ 数式(1) 数式(2) 数式(3) 3 日付データ   4 日付データ   5 日付データ   A列にデータが追加したときに、B~D列の数式をA列の最終行までコピーしたいのですが、 どのようなコードを書けばよいでしょうか? ちなみに、1行目のB~D列には、データ更新の有無に関わらず、必ず数式が入っているものとします。 何かよいアドバイスがあればよろしくお願いします。 【補足】 単純に考えると、B1~D1をA列の最終行までAUTOFILLすれば良いのでしょうが、データ数がかなり多く、 この方法だと時間がかかってしまいます。A列のデータ追加前の数式セルの最終行から、追加後の最終行までとすると、処理は早くなるのでしょうか?

  • エクセル マクロ 文字列からの行数の取得

    エクセルでマクロ初心者です。よろしくお願いします。例えば1列目にデータ名が入力されていてその個数が可変である場合(小計は末尾ではありません)小計行の1列目から数式をいれたいのですが、行数が固定でないため小計と書かれたセルの行数を取得したいのですが、わかりません。いい方法をお願いします。    A B C D データ aa bb cc 小計 ・ ・

  • IF条件設定がうまくいきません

    下記関数で日付を表示させています (1)から(3)までは問題なく現在使用していますが 今回の(4)番のところの関数がうまくいきません ご教授いただけますと助かります、よろしくお願い致します 1.AZ4に年月日「20181001」と任意で入力 2.セルBB4は「AZ4」から条件付き月末日を表示 =IF(AZ4="","",VALUE(TEXT(EOMONTH(TEXT(AZ4,"0-00-00"),IF(RIGHT(AZ4,2)-16<0,2,3)),"yyyymmdd"))) 3.セルBA4は下記関数でBB4のデータから月を2桁で抽出表示 =IF(BB4="","",MID(BB4,5,2)) 4.セルAY4に「BA4」で得た2桁の月と現在の当月が一致した場合「●」を表示し条件以外は空白とする =IF(BA4="","",IF(MID(BA4,5,2)),"","",●)  ------ダメです =IF(BA4=0,"",IF((MID(BA4,5,2))=MONTH(TODAY()),"●","")) ------ダメです =IF(BA4=0,"",IF(BA4=MONTH(TODAY()),"●","")) ------ダメです 以上よろしくお願いいたします。

  • 計算式の貼付けについて

    初歩的なことかもしれませんが、教えてください。    A  B  C  D 1 10  =A5 =B5 =C5 2 20     =B6 =C4 3 25     =B7 =C3 4 18     =B8 =C2 5 12     =B9 =C1 セルB1の式をコピーしてCの列に貼り付けると通常C列ように張り付きますよね、D列のように行数が減るように貼り付けるにはどのようにすればよいのでしょうか?

専門家に質問してみよう