• ベストアンサー

Excel2016でリボルビングコピペ

sheet8のセル範囲C3:C10000までの各セルに記号値A~Jのいずれかがランダムに入ってます。 マクロボタンを押します。 C3:C10000の範囲の内から 何個か行番数を選びます。 選ばれた行番数から50行戻った所までの範囲の記号値を横化して、 O4:BL4の範囲から下に向かって6000行程繰り返してコピペしたいです。 繰り返しコピペの際に選んだ行番数に+1 をして同じ形の行には成らないようにしたいです。 (抜き出して、リボルバーみたいに回転してコピペするけど、コピペされる度に行番数に+1 されてるので同じではない、みたいな感じです。) 教えて頂けたら幸いです。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1607/2444)
回答No.14

> 自分で作った物は保存をし次からの選択肢に加えることもできますか? Sheet8のA2から下方向に保存していく(最後にブックを保存しなければ消える) Private Sub CommandButton1_Click() Dim buf As Variant, SRow As Variant Dim i As Long, k As Long, j As Long: j = 0 Dim InputStr As String Dim FRng As Range Dim cCount As Long, LFlg As Boolean: LFlg = False InputStr = Me.TextBox1.Value If InputStr = "" Then Exit Sub SRow = Split(InputStr, ",") For i = LBound(SRow) To UBound(SRow) If SRow(i) < 53 Or SRow(i) > 9950 Then MsgBox SRow(i) & " は指定可能範囲から外れています。", vbCritical Exit Sub End If Next For cCount = 0 To Me.ListBox1.ListCount - 1 If Me.ListBox1.List(cCount) = InputStr Then LFlg = True Exit For End If Next If LFlg = False Then With Sheets("Sheet8") Set FRng = .Range(.Cells(2, "A"), .Cells(Rows.Count, "A").End(xlUp)).Find(What:=InputStr, LookIn:=xlValues, LookAt:=xlWhole) If FRng Is Nothing Then With .Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) .NumberFormat = "@" .Value = InputStr Me.ListBox1.AddItem InputStr End With End If End With End If With Sheets("Sheet8") .Cells(4, "O").Resize(6003, 50).ClearContents For k = 4 To 6003 Step UBound(SRow) - LBound(SRow) + 1 For i = LBound(SRow) To UBound(SRow) buf = .Range(.Cells(SRow(i) + j - 50, "C"), .Cells(SRow(i) + j, "C")).Value .Cells(k + i, "O").Resize(1, 50).Value = WorksheetFunction.Transpose(buf) Next j = j + 1 Next End With MsgBox "終了", vbInformation Unload Me '←ダイアログを消さない場合いらない End Sub Private Sub CommandButton2_Click() Unload Me End Sub Private Sub ListBox1_Click() Me.TextBox1.Value = Me.ListBox1.Value End Sub Private Sub UserForm_Initialize() Dim i As Long With Me.ListBox1 .AddItem "53,1050,2050,5050" .AddItem "67,890,1210,560,458" .AddItem "478,59,1506" For i = 2 To Sheets("Sheet8").Cells(Rows.Count, "A").End(xlUp).Row .AddItem Sheets("Sheet8").Cells(i, "A").Value Next End With UserForm1.Caption = "行の選択/指定" End Sub

961awaawa
質問者

お礼

こんばんはkkkkkm さん。このソースもNo. 13と同様にすればよろしいのでしょうか?

その他の回答 (17)

  • kkkkkm
  • ベストアンサー率65% (1607/2444)
回答No.18

"C"を"D"に変更してください。

961awaawa
質問者

お礼

できました。 本当にいつも助かります。 kkkkkm さん改めて言わせて頂きます。 ありがとうございました。 また宜しくお願い致します。

  • kkkkkm
  • ベストアンサー率65% (1607/2444)
回答No.17

フォームの名前がUserForm1なら Sub Test() UserForm1.Show End Sub ユーザーフォームを開くで検索ぐらいはしましょう。

961awaawa
質問者

お礼

ありがとうございます。あのソースではC列から選出する形でしたが、仮に、D列から選出するとすれば、あのソースのCの部分をCに変えるだけで大丈夫でしょうか?

961awaawa
質問者

補足

>あのソースのCの部分をCに変えるだけで大丈夫でしょうか? Dでした。

  • kkkkkm
  • ベストアンサー率65% (1607/2444)
回答No.16

> エラーがでましたので、返答お願いします。 できたフォームをダブルクリックしてマクロの画面を出して 開いた時に Private Sub UserForm_Click() End Sub ができたら削除し

961awaawa
質問者

お礼

すみません。コンパイルできました。 できたそれを実行したいのですがどうすればよろしいだすか?マクロリストを見てもありませんし。

  • kkkkkm
  • ベストアンサー率65% (1607/2444)
回答No.15

> このソースもNo. 13と同様にすればよろしいのでしょうか? No13のコードの部分を変更してください。

961awaawa
質問者

お礼

こんにちは、kkkkkm さんいつもありがとうございます。 エラーがでましたので、返答お願いします。 >InputStr = Me.TextBox1.Value If InputStr = "" Then Exit Sub Me キーワードの使用方法が不正です。 となります。宜しくお願いします。

  • kkkkkm
  • ベストアンサー率65% (1607/2444)
回答No.13

添付画像(左がデザイン時、右が動作時)のダイヤログを利用したときの動作 下のボックスの一覧を選択すると上のボックスに表示される 自分で指定したい場合は上のボックスに自分で入力する 決定ボタンを押すと上のボックスのデータで実行される VBAの画面でユーザーフォームを作ります(作り方はサイト検索で見つけてください) 説明の部分はラベル(Label1) 上の細長いボックスはテキストボックス(TextBox1) 下の高さがあるボックスはリストボックス(ListBox1) 一番下のボタンはコマンドボタン 決定の方(CommandButton1) キャンセルの方(CommandButton2) 上から順番に作ると()内の名前になっていますので変更しない。 できたフォームをダブルクリックしてマクロの画面を出して 開いた時に Private Sub UserForm_Click() End Sub ができたら削除し そこに以下をコピペ Private Sub CommandButton1_Click() Dim buf As Variant, SRow As Variant Dim i As Long, k As Long, j As Long: j = 0 Dim InputStr As String InputStr = Me.TextBox1.Value If InputStr = "" Then Exit Sub SRow = Split(InputStr, ",") For i = LBound(SRow) To UBound(SRow) If SRow(i) < 53 Or SRow(i) > 9950 Then MsgBox SRow(i) & " は指定可能範囲から外れています。", vbCritical Exit Sub End If Next With Sheets("Sheet8") .Cells(4, "O").Resize(6003, 50).ClearContents For k = 4 To 6003 Step UBound(SRow) - LBound(SRow) + 1 For i = LBound(SRow) To UBound(SRow) buf = .Range(.Cells(SRow(i) + j - 50, "C"), .Cells(SRow(i) + j, "C")).Value .Cells(k + i, "O").Resize(1, 50).Value = WorksheetFunction.Transpose(buf) Next j = j + 1 Next End With MsgBox "終了", vbInformation Unload Me '←ダイアログを消さない場合いらない End Sub Private Sub CommandButton2_Click() Unload Me End Sub Private Sub ListBox1_Click() Me.TextBox1.Value = Me.ListBox1.Value End Sub Private Sub UserForm_Initialize() With Me.ListBox1 .AddItem "53,1050,2050,5050" .AddItem "67,890,1210,560,458" .AddItem "478,59,1506" End With UserForm1.Caption = "行の選択/指定" End Sub

961awaawa
質問者

お礼

ご協力感謝します、Kkkkkm さん。 自分で作りますか?を選択し、自分で作った物は保存をし次からの選択肢に加えることもできますか?そうであれば嬉しいです。

  • kkkkkm
  • ベストアンサー率65% (1607/2444)
回答No.12

> 指定した行番数の1通りをダイアログボックスに貯めて置いて、次から貯めて置いた何通りかから選択できる 具体的にどのようなことかがわかりません。一通りとか貯めるとか貯めて置いた何通りとか。

961awaawa
質問者

お礼

>No5のおまけ。 質問中に行の選び方の説明がなかったので No5では行をマクロの中で指定していましたが、たとえば 'SRow = Array(53, 1050, 2050) を外して以下のように変更したらInputBoxで行を好きなだけ指定できます。 InputBoxのボックスに 53,1050,2050,5050 のように指定します。< をInputBoxのボックスに ・53,1050,2050,5050 ・67,890,1210,560,458 ・478,59,1506 「これ等の内からどれを使いますか?それとも自分で作りますか?」 のような感じで伝わりますかね?

  • kkkkkm
  • ベストアンサー率65% (1607/2444)
回答No.11

No5のおまけ。 質問中に行の選び方の説明がなかったので No5では行をマクロの中で指定していましたが、たとえば 'SRow = Array(53, 1050, 2050) を外して以下のように変更したらInputBoxで行を好きなだけ指定できます。 InputBoxのボックスに 53,1050,2050,5050 のように指定します。 SRow() As Variant を SRow As Variant に変更し Dim InputStr As String を追加して InputStr = Application.InputBox(Prompt:="行を入力してください。" & vbCrLf & "複数の場合はカンマ区切りで。", Type:=2) If InputStr = "False" Then Exit Sub SRow = Split(InputStr, ",") For i = LBound(SRow) To UBound(SRow) If SRow(i) < 53 Or SRow(i) > 9950 Then MsgBox SRow(i) & " は指定可能範囲から外れています。", vbCritical Exit Sub End If Next

961awaawa
質問者

お礼

ありがとうございますkkkkkm さん。こちらぶっ倒れてました。 ついでなんですが、指定した行番数の1通りをダイアログボックスに貯めて置いて、次から貯めて置いた何通りかから選択できるようにってできますでしょうか?

  • msMike
  • ベストアンサー率20% (363/1773)
回答No.10

クレジットカードでの支払い方式の一つの「リボ払い」の「リボ」の原語は「リボルビング」ですよね。「リボルビング払い」の意味は“所謂分割払い”かと。 「リボルビングコピペ」とは初耳ですが、一体全体だう云ふ意味ですか?其れ、貴方自身の造語ですか?それとも、どの業界で馴染みの用語ですか?

961awaawa
質問者

お礼

次元大介の銃のリボルバーから連想しました。

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.9

> 何個か行番数を選びます この選んだ何個かの番号と, > O4:BL4の範囲から下に向かって6000行程繰り返してコピペ この関係が全く判りません. > リボルバーみたいに回転してコピペする これを勝手にスロットみたいに回転すると解釈して 以下の仮定の下に作ってみました. 仮定A: 何個か選んだ行番数をセルN4以下に記述する(52以上, 9951以下の値).これは質問者が設定する. 仮定B: N列の値に基づいてスロットのように O:BL列にコピーする. 以下の手順でsheet8に数式を入力する. (1) セルN3に 0を入力する(回転カウンター). (2) セルN4に 52以上, 9951以下の値を入力する. (3) セルO4に以下の数式を入力する. =INDIRECT(ADDRESS($N4+(15-COLUMN())+$N$3,3)) (4) セルO4の数式を P4:BL4にコピーする. (5) N5以下「何個か行番数」を入力する(52以上, 9951以下の値). (6) O4:BL4を O5:BL5以下にコピーする. (7) 以下のマクロを sheet8に記述する. '----- ここから ------------------ Public Sub リボルバーコピー() Const COUNT_MAX = 6000 ' 6000行程度は適当に設定してください Dim cnt As Long cnt = 0 Do Range("N3").Value = cnt Me.Calculate ' ワークシート関数の計算が終了するまで待機 If Not Application.CalculationState = xlDone Then DoEvents End If cnt = (cnt + 1) Mod COUNT_MAX Loop End Sub '----- ここまで ------------------ (8) sheet8 にマクロボタンを設置して (7)のマクロを登録する. (9) マクロボタンをクリックするとスロットのように無限ループで回転を続ける. (10) ループを停止させるのは Breakキー( または Ctrl + Pause). N3,N4セルを使用している場合は,空いているセルを使用するように (1)(2) および (7) の Range("N3").Value = cnt を変更してください.

  • masnoske
  • ベストアンサー率35% (67/190)
回答No.8

No.6 です. > 選ばれた行番数から50行戻った所までの範囲の記号値を横化して 50行戻るということは,上方向にということなので No.7訂正も含めて以下のように再訂正します. (1) sheet8 の O1セルに以下の数式を入力する. O1セルが使用されている場合は,他のセルでも構わない. =RANDBETWEEN(52,9951) (2) sheet8 の O4セルに以下の数式を入力する. =INDIRECT(ADDRESS($O$1+(15-COLUMN())+(ROW()-4),3)) O1セル以外に (1)の数式を入力した場合は,上記の $O$1をそのセルに書き換えてください. (3) O4セルの数式を O4:BL3003にコピーする. (4) 以下のマクロを sheet8に記述する. ' ----- ここから -------------- Public Sub 再計算() Me.Calculate End Sub ' ----- ここまで -------------- (5) sheet8にマクロボタンを設置して (4)のコードを登録. (6) マクロボタンをクリックする度に再計算される.

関連するQ&A

  • Excel2007で複雑なセルコピペ。

    sheet8のセル範囲C3からセルI10000までの各セルにA~Jのいずれかがランダムに入ってます。 マクロボタンをおします。 (1)、C12の値をM3にコピペしてC12から5行戻ったC7の値をセルO3にコピペします。 (2)、M3の値とO3の値が同じならM3の背景色を黄色にしたいです。同じでないならそのままです。 マクロボタンを押します。 (3)、1つ下のC13に行き(1)と同じことをするのですが、1つ下のM4にC13の値をコピペしてC13から7行戻ったC6の値をO4にコピペしたいです。 (4)、(2)と同じようになり マクロボタンを押します (5)、1つ下のC14に行き(1)と同じことをするのですが、1つ下のM4にC14の値をコピペしてC14から9行戻ったC5の値をO5にコピペしたいです。 (6)、(2)と同じようになります。 マクロボタンを押します。 End マクロボタンを押す度にC12から1つずつ下に向かい、M3から1つずつ下に向かって値をコピペするのですが、セルOにコピペされるのは1つずつ下に向かうセルCの値から、5行戻り、7行戻り、9行戻りと戻ってはまた5行、7行、9行と戻った値を繰り返しコピペしたいです。 よろしくお願いいたします。

  • Excel2007で複数のセルを併せて参照して

    Excel2007で複数のセルを併せて参照してデータを抽出したいんですがやり方がわかりません。ここから質問になります。 セルO4,P4,Q4から下に向かって各セルにア、イ、ウ、エ、オのいずれかが(今のところ)セルO50、P50、Q50までデータとして入ってます。マクロボタンを押すと一行ずつデータが追加されます。 B3からD5に格子を用意しました。B3:D5にデータO,P,Qの最下行から2行上までをまとめてコピペします。コピペされたそれらを併せて参照してデータO4:Q48(今のところO50:Q50が最下行なのと2行上までがコピー範囲なのでQ48としました)から探してその1つ下の3列データ(O?,P?,Q?)をG3、H3、I3、から下に向かって抽出したいです。 私的にはUnionメソッドを使ってするのかなぁと思ってます。 ご協力お願いします。

  • Excel2007で抜き取り?

    ア、イ、ウ、エ、オ、カ、キ、ク、ケ、コの記号のいずれかがセルA3~J3の各セルにダブルことなく適当に入ってます。L3とM3に1~10までのどれかを入れて、 (1)L3に1が入ると、A3に入った記号がO3にコピーされ (2)M3に5が入ると、A3から5番目のE3に入った記号がP3にコピーされる という仕組みにしたいです。 今は例えで3行目を使いましたが、4行目、5行目.....とできるようにしたいです。 誰かよろしくお願いいたします。

  • Excel2016 範囲最下から移動コピペ

    sheet1のセルL4から下に向かって値が入ります。 その最下のセルから下に1セルと右に2セル移動させ、 その行のセルNから右に向かってセルBLまでを範囲コピーをし、 sheet8のA2からに、値だけをそのまま貼り付けたいです。 お願い致します。

  • Excel2007 。数値を記号化したいです。

    セル範囲(A16:C2700)に、1~18のいずれかの数値がびっしり入ってます。 それらをセル範囲(E16:G2700)にアルファベット記号にして入れたいです。 1、2=A 3、4=B 5、6=C 7、8=D 9、10=E 11、12=F 13、14=G 15、16=H 17、18=I にしたいです。 範囲(A:C)の2700行目以降も3列1行目ずつ追加されるのでそれも同時に変換して(E:G)の2700行目以降にペイストしたいです。 お願い致します。

  • エクセル WEB コピペ 正しくできない

    いろいろ試してみたのですが、解決できず、アドバイスをください。 WEB上のスペースで分けられた、特に区切りがない表(100行10列程度) 1 2 3 4 5 6 7 8 9 o x o x o o x x x a b c d e f g h i といったものを各セルごとにコピペをしたいのですが、 A列に1文字ずつペーストされてしまいます。 メモ帳に張り付けてからというものは、やってみましたが、メモ帳への貼り付けも同様になります。 どなたか、解決案をご存じないでしょうか? もしくは、WEBでは、表形式になっているのですが、コピペ予防策をとっているのでしょうか?

  • マクロ(Excel)で伝票入力

    はじめてのマクロ挑戦で頓挫しています。 「伝票入力」を作成しマクロの記録で作成しましたがうまく動きません。 以下のマクロをご指導頂けないでしょうか。 ---------------------------------------------------------- セルE6(得意先コード)入力 セルC16(日付)入力 セルD16(品名コード)入力 セルF16({数量}入力 セルI16(適用)入力 以上 セルC16~セルI16を入力後、1行下がりながら (2行目C17~I17、3行目C18~i18・・・・と6回繰り返し)後 セルH25(前回請求額)入力 セルH26(前回入金)入力 以上でまたセルE6で入力待ちになる。 -------------------------------------------------------------- 以上の内容でご理解して頂けるか心配ですがよろしくお願い致します。 (使用バージョン2003)

  • EXCEL2003 条件付き書式の設定

    A列に数字が入力されてます、A列各セルに入力されてる数が1~7の範囲でランダムに変わります、A列に入力した数字に応じて行単位に色を付けたいです。教えて下さい (例)A2=1が入った場合、B2:AK2 赤、A2の数字はランダムに1~7の範囲で変化し、それぞれ違う色に切り替わるようにしたい、A列の範囲はA1:A500まであります、色付けの範囲は行単位でB1:AK500まであります

  • Excel2003の複数セルのコピーについて

    Excel2003で列も行も違う連続しない複数のセルをCtrlキーで選択し、コピペしようとすると大抵の場合「そのコマンドは複数の選択範囲に対して実行できません」と出ますが、何度もやっているとなぜか10回に1回位できることがあります。毎回確実にできる方法はないでしょうか。マクロを使わずにできる方法を知りたいです。

  • エクセル(excel)の計算式(関数)について

    エクセル(excel)の計算式(関数)でよいアイディアがありましたら教えてください。 1行目は項目行です。 セルA1から右に15列=セルO1まで、 a | b | c | d | e | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 と入っています。 2行目からデータとして、 セルA2から右に5列=セルE2まで、 4 | 2 | 2 | 1 | 1 と入力したとします。(データ例(1)) あるいは、 セルA3から右にセルE3まで、 6 | 3 | 0 | 0 | 0 と入力したとします。(データ例(2)) 1つのデータの5個の数字のルールは2つで、 「合計で10以下である。」 「左から順に小さくなるか、同じ数字となる。」 です。 (目的は、) このとき、F列からO列にかけて、 データ例(1)のケースでは、 a | a | a | a | b | b | c | c | d | e データ例(2)のケースでは、 a | a | a | a | a | a | b | b | b | と表示されるように、 つまり、項目行の下にある数だけ、その列の1行目の記号を 1(F列)から右に向かって順に埋めていくような、 F列からO列までの2行目以下に入れる適当な計算式(関数)は ないでしょうか。 拙い説明で申し訳ありません。どなたかよい考えをお持ちの方がいらっしゃいましたらと存じます。 どうぞよろしくお願い致します。

専門家に質問してみよう