- ベストアンサー
エクセルで式をコピー
エクセルで、あるセルに式を入力して その式を縦方向(下)にコピーしていく内容の マクロを組みたいのです。 データが入力されている列まで式をコピーするには どうしたらよろしいでしょうか? (データは上から下に隙間無く入力されています。) 御存知の方よろしくお願い致します。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
#2のmshr1962です。すみません、さっきのだと最下行にデータがないと一番下まで選択してしまいます。 訂正しました。 Sub Macro1() A = ActiveCell.Address Selection.Copy B = ActiveCell.Row ActiveCell.SpecialCells(xlLastCell).Select C = ActiveCell.Row Range(A & ":" & Replace(A, B, C)).Select ActiveSheet.Paste End Sub
その他の回答 (6)
- freezemoon
- ベストアンサー率39% (13/33)
Sub test() '変数宣言部/////////////////////////////////////// Dim intFirRow As Integer '最初の行 Dim intDataCol As Integer 'データの列 Dim intForCol As Integer '式の列 Dim WS As Worksheet 'ワークシート Dim i As Integer 'ループカウント '//////////////////////////////////////////////// '各変数に代入(Constとして定数にしてもよかったかな?)//// Set WS = Worksheets("Sheet1") '処理したいワークシート名を指定 intFirRow = 1 '初めの行の指定 この場合1行目 intForCol = 2 '数式の列を指定 この場合B列 intDataCol = 1 'データの列の指定 この場合A列 '///////////////////////////////////////////////// WS.Cells(intFirRow, intForCol).Copy '元の式をコピー i = intFirRow + 1 'ループカウントの初期化 初めの行のつぎから処理 'データがある限りループして貼り付けていきます Do Until WS.Cells(i, intDataCol) = "" WS.Cells(i, intForCol).PasteSpecial Paste:=xlFormulas i = i + 1 'ループカウントのインクリメント Loop End Sub 上のマクロは、シート名が「Sheet1」でA列にデータ、B1に数式が入っているばあいです。 適宜、変数の値を変えて対応してください。
お礼
ありがとうございます IF構文やループはまだまだ私にとって 敷居が高い感じがありますが がんばって勉強したいとおもいます
- misatoanna
- ベストアンサー率58% (528/896)
例えば A3:B50 まで連続データが入っているとして、連続データのすぐ右隣の セル(この例ではC1)に式を入力した場合、C3セルの右下部分をダブルクリック すると、数式が C50 まで自動コピーされます。 この程度でよいのではないかと思うのですが・・・。 下記は列が空いている場合のマクロです。 やはり式入力したセルを選択して実行します。 Sub CPYFML() Selection.Copy Range(Cells(Selection.Row + 1, Selection.Column), _ Cells(Range("A3").CurrentRegion.Rows.Count + 2, Selection.Column)).Select ActiveSheet.Paste Application.CutCopyMode = False End Sub モジュール内の "A3" 部分は、連続データの最上行先頭セルです。 同じく + 2 は、連続データの最上行先頭セル(A3) と シート先頭セル(A1) との 行番号差異です。
- imogasi
- ベストアンサー率27% (4737/17069)
>エクセルで、あるセルに式を入力して その式を縦方向(下)にコピーしていく内容の マクロを組みたいのです。 VBAを使って、関数式をコピーするマクロを作る--> この発想そのものがまず実用的でない。マクロを使えば関数式を使わなくて良いケースが殆どになります。例え使うとしても、指定行を関数内で変数化して、中身を変えて、繰り返しを行うというパターンになります。 (例)関数式 B1に=A1 B2に=A2 B3に=A3 ・・・ といれたい時、=A1を下方向に複写します。 (VBA) For i=1 to d Cells(i,"B")=Cells(i,"B") Next i iは行番号数を意味し、1,2,3・・と変化させ、 Cells(i,"B")=Cells(i,"B")を繰り返し実行します。 では終りの行のdをどう割り出すかですが、#3などに書かれています。この際に「データは上から下に隙間無く入力されています」が生きてきます。 これがVBAの一番使い勝手のある、公式的な処理法です。 >データが入力されている列まで式をコピーするには どうしたらよろしいでしょうか? 従ってこれは普通意味がありません。 >最終的に紙で印刷するので 無駄に印刷する部分を 避けたいと思ったのであります。 これと当初の質問と全然違います。 Range(Cells(1,"A"),Cells(d,"H")).PrintOutです。 dは最下の行番号です。その点では当初質問を引き継いでいます。制定フォームなどでは、下にデータがなくても最下 枠罫線や文言は印刷することも多い(例・請求書、合計欄は最下行と言うのが見栄えがよい) >別のソフトからデータ抽出して テキストから抜き出して この表現も通常ではおかしい。抽出するのはファイルからで、「ソフトからデータ抽出して」はおかしく、「ソフトを使ってデータを抽出して」ならあります。 >コピーする最後の位置をあらかじめ指定しておくと VBAではCopyメソッドを使う方法と、セルへ代入する方法があります。使い分けも経験をつんで慣れて行くのです。
補足
印刷うんぬんに関しては 「どういった流れでの運用」を説明させて いただいたもので そこまでマクロでの解説をいただくとは 思いませんでした。こちらの説明が未熟で ご迷惑をおかけしました 重ねて表現方法まで添削していただいて ありがとうございます。
- hakone
- ベストアンサー率54% (40/73)
こんにちは。 操作する方が、Excelに詳しくなかったとしても フィルハンドル(選択セルの右下にある黒い四角で オートフィル時にずるずる~と引っ張る部分) をダブルクリックする操作を覚えてもらった方が よろしいのではないかと思います。 マクロで式を入力するとしたら、 A列の入力されている部分まで、式をコピーするとして B列の式の入っているセルを選択しておいて、 下のマクロを実行してみてください。 Sub test() Selection.AutoFill _ Range(ActiveCell, Range("a65536").End(xlUp).Offset(0, 1)) End Sub ・・・今ひとつのマクロですね。
補足
補足追加いたします。 別のソフトからデータ抽出して テキストから抜き出して 並べ替えて・・・・ 等と云う一連の作業があるもので エクセル苦手の人にはちょっと無理っぽいかなと 思い 試行錯誤しているわけであります。 またまた分かりにくくて御迷惑おかけしました。
- mshr1962
- ベストアンサー率39% (7417/18945)
データとは別の列に式を入力して最下行までコピーですか? Sub Macro1() Application.CutCopyMode = False Selection.Copy Range(Selection, Selection.End(xlDown)).Select ActiveSheet.Paste End Sub 手動の場合はShift+Ctrl+↓で最下行まで選択できます。
- Quattro99
- ベストアンサー率32% (1034/3212)
手動じゃダメってことでしょうか? なぜ、そういうことをしたいのかを書くと別のアプローチがあるかも知れません。 ところで、 > データが入力されている列まで式をコピー > データは上から下に隙間無く入力されています この意味がわかりません。コピーするところ(つまり、空欄になっているところ)がないような気がするのですが。
お礼
慌てて記入したもので言葉足らずの部分があり ご迷惑おかけしました 補足という形で記入させてもらいましたので よろしければご回答いただけると助かります
補足
わかりにくくてごめんなさい。 エクセルに詳しくない人に操作してもらう為に マクロを組んでワンタッチでの操作を考えています。 毎回データの行数が変わる為 コピーする最後の位置をあらかじめ指定しておくと データが入っていない部分まで計算されて エラーが出ます 最終的に紙で印刷するので 無駄に印刷する部分を 避けたいと思ったのであります。 非常にわかりにくい表記でもうしわけありません。
お礼
お返事おそくなりました。 早速使用させていただきました。感謝です。 ただ頂いた内容を使用すると 毎回データ最終行の下に三行余分に 式がコピーされてしまいます。 (とりあえず体勢に影響なかったので) 本当にありがとうございました