No.6ベストアンサー
- 回答日時:
No.5のソースからの変更点
☆の行を入れ替えてます(速度上げるため)。
★の行を挿入。
これでOKかな
Sub rcopy()
Const rgRow As Integer = 17
Const rgCol As Integer = 11
Dim cpCnt As Integer
Dim cpCntX As Integer
cpCntX = Val(Cells(1, 12).Value)
If cpCntX < 1 Then End
Range(Cells(rgRow + 1, 1), Cells(50000, rgCol)).Delete Shift:=xlUp '★
Range(Cells(1, 1), Cells(rgRow, rgCol)).Copy '☆
For cpCnt = 1 To cpCntX '☆
Cells(rgRow * cpCnt + 1, 1).Select
ActiveSheet.Paste
Next
End Sub
No.5
- 回答日時:
とりあえず、マクロで。
Sub rcopy()
Const rgRow As Integer = 17
Const rgCol As Integer = 11
Dim cpCnt As Integer
Dim cpCntX As Integer
cpCntX = Val(Cells(1, 12).Value)
If cpCntX < 1 Then End
For cpCnt = 1 To cpCntX
Range(Cells(1, 1), Cells(rgRow, rgCol)).Copy
Cells(rgRow * cpCnt + 1, 1).Select
ActiveSheet.Paste
Next
End Sub
No.4
- 回答日時:
No3です。
え~~っと・・・
1行目から17行目までが、1行目のセルのフィルコピーで成立していると仮定できるのなら(=コピペで成立する)、No3の最後の方法で全体的に可能と思います。
そうでない場合(=1行目から17行目までが同じ式でない)場合でも、できないことはありませんが、以下に示すよりもさらに面倒なことになるので、マクロで対応してしまった方が簡単だと思われます。
ひとまず、仮定が成り立つものとして…
1)まず、18行目に現在の式をコピペします。
その式は「=○〇〇」となっているものとします。
2)L1セルの値は、「表示/非表示」の制御をしているだけなので、その式の表示/非表示の制御を追加するように編集します。
=IF(ROW()>($L$1+1)*17,"",○〇〇)
(○〇〇の部分は上記コピーした時の式です)
3)どうやら、各列で異なる式が入れてあるようなので、各列を順に編集する必要がありそうです。
元が配列数式の場合は、編集してから再度配列数式として確定します。
4)もしも、式のコピーをするのではなく、値のコピーをしたい列がある場合は、その列のセルの式の編集では、元の式ではなく
=IF((ROW()>($L$1+1)*17),"",OFFSET($A$1,MOD(ROW()-1,17),COLUMN()-1))
に置き換えます。
(どの列であっても、この式で対応できると思います)
5)18行目(A~k列)の各セルの編集ができたら、全体を下方にフィルコピーします。
以上の手順で、ご質問の内容を実現できるものと思います。
※ 元が想定以上に複雑なようなので、上記の手順も多少複雑になってしまっていますが、もしも、わからなかったり設定するのが面倒であるようなら、マクロで対応してしまうのが宜しいのかもしれません。
回答ありがとうございます。
計算式だと、必要数量分セルの確保が必要なのが分かりました。
マクロだと行や列の追加や削除を行うと追従されないので
計算式でいければと思っていたのですが、かなり複雑そうなので
マクロにすることにしました。
ここまで親切に教えてくださったのに申し訳ございません。
ありがとうございました。
No.3
- 回答日時:
No1です
せっかく画像を添付いただきましたが、あまり識別ができません。
目を凝らしてみると、C~K列に関してはご説明とは異なっているように感じられ、ご質問文からは単純に考えていましたが、どうやら違うようなので、全体の規則性がまったくわからなくなりました。
ですので、A、B列に関してのみの回答になります。
C列以降はまったくわかりませんけれど、共通部分はありそうですが、異なった式になるのではないかと想像します。
ということで、A18セルに
=IF((ROW()>($L$1+1)*17)+(COLUMN()>2),"",OFFSET($A$1,MOD(ROW()-1,17),COLUMN()-1))
の式を入れて、B18セルにコピー
ついで、A18:B18セルを下方に必要十分な範囲までフィルコピー
(L1がどのくらいの回数までの可能性があるのかによります)
以上で、A、B列に関しては可能と思います。
まったくの山勘での想像では、C18セル以降の式は
=IF(ROW()>($L$1+1)*17,"",C1セルの数式をC18セルに換算した式)
のような形式になりそうな気はしますけれど…
(A、B列もこの形式で良いのかもしれませんが、式の実態が不明なのでわかりません)
No.2
- 回答日時:
関数だけでは(実際上)無理だと思います。
マクロ使って良いなら比較的簡単ですけど。
あと18行目以降は値のコピーで良いのでしょうか。式のコピーでしょうか。式のコピーだとしたら絶対参照ですか/相対参照ですか。
No.1
- 回答日時:
こんばんは
表示するだけなら関数式で可能ですけれど、そのセルには式が入っているので、そのあとで何かを入力すると式はなくなってしまいます。
どのように使うのかがわかりませんが、そうなると複写する機能もなくなっちゃうけれど、それでも良いのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの複写について 4 2022/04/10 01:02
- Excel(エクセル) エクセルデータの集計、一つのセルに複数のデータがある場合 7 2022/12/28 20:19
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- Excel(エクセル) エクセルVBA 複数行にまたがっている選択を判定するには 2 2023/05/21 21:54
- Visual Basic(VBA) セルに抜けた番号の代わりに空白を挿入する 4 2023/04/10 20:29
- Excel(エクセル) 前の(左隣の)シートを連続参照するように、あとから変更したい 1 2023/02/22 00:51
- Excel(エクセル) エクセルを活用した受注表作成の中で関数・数式を教えてください。 3 2022/07/23 08:14
- Excel(エクセル) エクセルの印刷範囲をページ単位で可変にする方法 3 2022/05/23 13:04
- Excel(エクセル) 【再度】Excelの関数について教えてください。 4 2023/07/28 13:06
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【関数】スペースがいくつ入っ...
-
西暦や和暦の表示をyyyymmdd表...
-
【Microsoft Office Excel Comp...
-
Excelはなんで先頭の0を消すん...
-
Excelのセルを飛ばして入力する
-
別シートからの文字を変更
-
エクセルの行の抽出について質...
-
Excelのオートフィル
-
Excel 2019 のピボットテーブル...
-
スプレッドシート クエリ関数 1...
-
excelの不要な行の削除ができな...
-
Excel初心者です。 詳しい方、...
-
【Excel】セル内の時間帯が特定...
-
Excel初心者です。 詳しい方、...
-
EXACT関数とIF関数の組み合わせ...
-
Excelのグラフ軸について
-
スマートな関数を教えて下さい。
-
Excelで全角を半角にしたいので...
-
【マクロ】エクセルにかいてあ...
-
Excel:一部のフォントでセルの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内にある数字の出現回...
-
Excel関数の先頭に「@」が入っ...
-
エクセルの気味悪い不思議
-
Excel VBAで、実行時にsheet上...
-
表示されている人数だけを数え...
-
他人が作ったマクロの理解
-
Excelの関数について質問です。
-
Excel 集計表
-
エクセル 日時の計算式について
-
Excelの関数に関して質問です。...
-
エクセル:セル内の文字列の下...
-
絞り込み検索
-
エクセルの関数で
-
エクセルの書式設定について教...
-
余分なEXCELファイルに印刷され...
-
VBA 同一シート内での転記の仕方
-
長期休みの関数はありますか
-
Excelの空のセル
-
エクセルで入力してある文を別...
-
Excelのマクロで、セルを結合し...
おすすめ情報
すみません、文章では分かりにくいかもしれないので、画像を添付します。
L1セルに3と入力した場合、18行目から2ブロック追加表示されるようにしたいです。
ブロックの中は他シートからの内容を表示させる式が入っており、
基本的にはL1のセル以外触ることはありません。
よろしくお願いいたします。
分かりにくい説明で申し訳ございません、画像を追加しました。
sheet1の3行目以降の数量分のみsheet2のフォームで表示させたいです。
ただ、例えばsheet1の表示させたい内容がNo.200まであると
sheet2に3400行も式を入れておかなければならず、重くなるのを避けたいため
必要分だけの式が18行目以降に計算式が複写されればと思います。
sheet2の1ブロック目の内容ですが
A1、A2~A17、B2~B17はsheet1からの参照ではないです。
空白の部分には何も入力していません。
計算式ですが文字数オーバーなので次の投稿に記載します。
難しそうなのでダメでしたらマクロでも構いません。
長々となりましたが、よろしくお願いいたします。
計算式ですが
B1セルは
{=IFERROR(INDEX(IOカード仕様設定!$A$3:$A$303,SMALL(IF(IOカード仕様設定!$A$3:$A$303<>"",ROW(IOカード仕様設定!$A$3:$A$303)-2),ROW(INDIRECT("B"&INT((ROW()-1)/17)+1)))),"")}
D1セルは
=IFERROR(IF(INDIRECT("E"&ROW())="","",VLOOKUP(INDIRECT("E"&ROW()),$M$1:$O$22,2,FALSE)),"")
E1セルは
=IFERROR(IF(INDIRECT("B"&ROW())="","",VLOOKUP(INDIRECT("B"&ROW()),IOカード仕様設定!$A$2:$E$303,3,FALSE)),"")
F1セルは
=IFERROR(IF(INDIRECT("E"&ROW())="","",VLOOKUP(INDIRECT("E"&ROW()),$M$1:$O$22,3,FALSE)),"")
G1セルは
=IFERROR(IF(INDIRECT("B"&ROW())="","",VLOOKUP(INDIRECT("B"&ROW()),IOカード仕様設定!$A$2:$E$303,4,FALSE)),"")
H1セルは
=IFERROR(IF(INDIRECT("B"&ROW())="","",VLOOKUP(INDIRECT("B"&ROW()),IOカード仕様設定!$A$2:$E$303,2,FALSE)),"")
I1セルは
=IFERROR(IF(INDIRECT("B"&ROW())="","",VLOOKUP(INDIRECT("B"&ROW()),IOカード仕様設定!$A$2:$E$303,5,FALSE)),"")
尚、sheet2の本当の名称は「IOカード仕様設定」となっています。
難しそうなのでダメならマクロでも構いません。
長々となりましたが、よろしくお願いいたします。
回答ありがとうございます。
値のコピーと式のコピー両方で、式のコピーは相対参照となります。
よろしくお願いいたします。
回答ありがとうございます。
教えていただきましたマクロで指定数のブロックを複写できました。
あとコピーする前に、18行目以降を消すことは可能でしょうか?
2回目以降の複写時にブロック数が前回より減ると前のブロックが残ってしまうので
18行目以降を削除後に複写できれば幸いです。
よろしくお願いいたします。
回答ありがとうございます。
おかげでうまくいきました。
あと1点、教えていただきたいのですが
今までL1セルの値が"1"以上でA~K列の18行目以降に複写していたのですが
L1セルが"0"の時、A~K列の18行目以降を削除する事は可能でしょうか?
よろしくお願いいたします。
回答ありがとうございます。
おかげでうまくいきました。
あと1点、教えていただきたいのですが
今までL1セルの値が"1"以上でA~K列の18行目以降に複写していたのですが
L1セルが"0"の時、A~K列の18行目以降を削除する事は可能でしょうか?
よろしくお願いいたします。