Excel2007で複雑なセルコピペ

このQ&Aのポイント
  • Excel2007で複雑なセルコピペが必要です。sheet8のセル範囲C3からセルI10000までの各セルにA~Jのいずれかがランダムに入っています。
  • マクロボタンを押すと、C12の値がM3にコピーされ、C12から5行戻ったC7の値がセルO3にコピーされます。
  • もし、M3の値とO3の値が同じであれば、M3の背景色が黄色に変わります。
回答を見る
  • ベストアンサー

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行と戻った値を繰り返しコピペしたいです。 よろしくお願いいたします。

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

  • ベストアンサー
  • Mathmi
  • ベストアンサー率46% (54/115)
回答No.20

>コンパイルエラーとなり修正候補はThen またはGo to 一応、No18,No19のコードをコピペして走らせてみましたが、こちらではエラーが起こりませんでした。 が、if分の最後のアンダーバーを削除してみたら、同様の「コンパイル エラー:修正候補: Then または GoTo」と出ました。 多分、その辺りで変な事になっていたのではないでしょうか。 以下の二行を  If rangeCompare(1).Row + WorksheetFunction.Min(Rev.OffRow) <= 0 Or _   rangeCompare(1).Column + WorksheetFunction.Min(Rev.OffCol) <= 0 Then 下の一行に変えて下さい。 If rangeCompare(1).Row + WorksheetFunction.Min(Rev.OffRow) <= 0 Or rangeCompare(1).Column + WorksheetFunction.Min(Rev.OffCol) <= 0 Then アンダーバーと改行を削除する感じです。

961awaawa
質問者

お礼

こんばんは、mathmiさん。お久しぶりです。なかなかできる時間がつくれませんでした。また同じ形で質問スレ立てますんで続きを相手して下さい。

その他の回答 (20)

  • Mathmi
  • ベストアンサー率46% (54/115)
回答No.21

>「インデックス有効範囲エラー」がでました。 申し訳ありませんが ・[SetData]モジュールで変更した箇所とその値 ・エラーが起こった時のi、j、kの値 を教えてください。 i、j、kは、エラーでストップした際、それぞれの変数の上にマウスカーソルを動かせば表示される筈です。 或いは右クリック-[ウォッチ式の追加]で、ウォッチウィンドウに表示させる方法もあります。

961awaawa
質問者

お礼

ありがとうございました。

  • Mathmi
  • ベストアンサー率46% (54/115)
回答No.19

(前回の回答より) Sub CompareMain(ByRef rangeCompare As Range, ByRef Rev As Revolving, ByRef aryCompare As Variant, ByRef rangeResult As Range, ByRef numResult As Integer, ByRef aryResult As Variant, ByRef clrCompare As Long)  Dim i As Long, j As Integer, k As Integer, cnt As Integer  Dim numRow As Integer, numCol As Integer '比較元セル範囲の左上の行番号、列番号。  Dim numRev As Integer '使用するリボルビング配列の番号。  Dim blnPaint() As Boolean 'そのセル位置を着色するか。Trueなら着色する。  '比較する値を、出力する並びでaryResultに格納。  numRow = rangeCompare(1).Row  numCol = rangeCompare(1).Column  For i = 1 To rangeCompare.Rows.Count   aryResult(i, 1) = aryCompare(numRow + i - 1, numCol) '比較元の値をコピー   cnt = numResult '結果の比較先の出力列番号。   numRev = (i - 1) Mod (UBound(Rev.OffRow) + 1)   For j = 1 To Rev.ResRow    For k = 1 To Rev.ResCol     aryResult(i, cnt) = aryCompare(numRow + i - 1 + Rev.OffRow(numRev) + j - 1, numCol + Rev.OffCol(numRev) + k - 1)     cnt = cnt + 1    Next k   Next j  Next i  '着色するセル位置を検索  ReDim blnPaint(1 To rangeResult.Rows.Count, 1 To rangeResult.Columns.Count)  For i = 1 To rangeResult.Rows.Count   For j = numResult To rangeResult.Columns.Count    If aryResult(i, 1) = aryResult(i, j) Then     blnPaint(i, 1) = True     blnPaint(i, j) = True    End If   Next j  Next i  '更新停止  Application.EnableEvents = False  Application.ScreenUpdating = False  Application.Calculation = False  'セルに出力、着色。  rangeResult = aryResult 'セルに出力  For i = 1 To rangeResult.Rows.Count   For j = 1 To rangeResult.Columns.Count    If blnPaint(i, j) = True Then     rangeResult(i, j).Interior.Color = clrCompare    End If   Next j  Next i  '更新再開  Application.EnableEvents = True  Application.ScreenUpdating = True  Application.Calculation = True End Sub ****************************** >~インデックス有効範囲でない。となります。 aryResultかaryCompareで範囲外の番号を指定した時に起こるエラーですね。 今回のコードなら、エラーが出る前にエラートラップに引っかかる筈です。

961awaawa
質問者

お礼

こんばんはmathmiさん。この前のエラーはお陰様で上手く行きました。ありがとうございます。 書き終えてから実行して気付いたんですが、そのままコードを写すとリボルビングセルの形で、今回はリボルビング範囲の形をしたかったので最初の説明にあるリボルビング範囲の形を填めると「インデックス有効範囲エラー」がでました。 黄色に変わっ場所はSub CompareMainのaryResult(i, cnt) = aryCompare(numRow + i - 1 + Rev.OffRow(numRev) + j - 1, numCol + Rev.OffCol(numRev) + k - 1) でした。 何処をどうすればよろしいですか。

  • Mathmi
  • ベストアンサー率46% (54/115)
回答No.18

データ指定の方法が分かりづらかったのと、パッチ当てでスパゲッティコード化しつつあったので、全体を修正しました。 今までのものを丸ごと差し替えて下さい。文字数制限に引っかかったので、2回に分けています。 データの設定方法としては ・比較元となるセル範囲(rangeCompare)を設定します。 ・その値と比較する相対位置(Rev)をリボルビング配列で設定します。 ・出力する基準セル(rangeResult)を設定します。 ・比較先を出力するセルが、比較元を出力するセルの何列隣か(numResult)を設定します。 例えば 1.C12をM3に、C12.offset(-5,0).resize(1,7)=C7:I7をM3.offset(0,3)=O3から始まるO3:U3にコピーし、比較する 2.C13をM4に、C13.offset(-7,0).resize(1,7)=C6:I6をM4.offset(0,3)=O4から始まるO4:U4にコピーし、比較する 2.C14をM5に、C14.offset(-9,0).resize(1,7)=C5:I5をM5.offset(0,3)=O5から始まるO5:U5にコピーし、比較する これを繰り返す場合の設定は、以下のようになります。 Set rangeCompare = myWS.Range("C12:C10000") Rev.OffRow = Array(-5, -7, -9) Rev.OffCol = Array(0, 0, 0) Rev.ResRow = 1 Rev.ResCol = 7 Set rangeResult = myWS.Range("M3") numResult = 3 1.D63をM3に、D63.offset(-55,0).resize(51,1)=C8:I58をN4.offset(0,2)=O4から始まるO4:BM4にコピーし、比較する 2.D64をM4に、D64.offset(-57,0).resize(51,1)=C7:I57をN5.offset(0,2)=O5から始まるO5:BM5にコピーし、比較する これを繰り返す場合の設定は、以下のようになります。 Set rangeCompare = myWS.Range("D63:D10000") Rev.OffRow = Array(-55, -57) Rev.OffCol = Array(0, 0) Rev.ResRow = 51 Rev.ResCol = 1 Set rangeResult = myWS.Range("N4") numResult = 2 ※Offset:基準となるセルから何行/何列移動したセル。 ※Resize:基準となるセルを左上とた、何行/何列のセル範囲。 ****************************** Option Explicit Type Revolving  OffRow As Variant 'Offset Row。基準セルから比較先セルへの相対行数。  OffCol As Variant 'Offset Column。基準セルから比較先セルへの相対列数。  ResRow As Integer 'Resize Row。比較先セル範囲の行数。  ResCol As Integer 'Resize Column。比較先セル範囲の列数。  v As Variant End Type Sub SetData() '作業対象範囲等を設定するプロシージャ  Dim temp As Variant  Dim myWS As Worksheet '作業を行うワークシート。  Dim rangeCompare As Range '比較元セル範囲。  Dim Rev As Revolving 'リボルビング相対位置。  Dim numCompare As Integer '比較先セル範囲個数。  Dim aryCompare As Variant '比較するセル範囲の値。  Dim rangeResult As Range '出力先セル範囲  Dim numResult As Integer '結果を出力する際、比較先を比較元の何列隣から出力するか。0なら同じ列。  Dim aryResult As Variant '結果の値を格納する配列。  Dim clrCompare As Long '値が同じだった場合に着色する色  '作業を行うワークシートを設定  Set myWS = ActiveSheet  '比較元セル範囲を設定  Set rangeCompare = myWS.Range("C12:C10000")  'リボルビング相対位置を設定  Rev.OffRow = Array(-5, -7, -9)  Rev.OffCol = Array(0, 0, 0)  Rev.ResRow = 1  Rev.ResCol = 7  numCompare = Rev.ResRow * Rev.ResCol  'エラートラップ  If rangeCompare.Columns.Count > 1 Then   MsgBox ("比較元が2列以上に設定されています。")   Exit Sub  End If  If UBound(Rev.OffRow) <> UBound(Rev.OffCol) Then   MsgBox ("リボルビング配列の行数と列数が異なっています。")   Exit Sub  End If  If rangeCompare(1).Row + WorksheetFunction.Min(Rev.OffRow) <= 0 Or _   rangeCompare(1).Column + WorksheetFunction.Min(Rev.OffCol) <= 0 Then   MsgBox ("シート範囲外と比較しようとしています。")   Exit Sub  End If  If Rev.ResRow <= 0 Or Rev.ResCol <= 0 Then   MsgBox ("比較先行数もしくは列数が0以下です。")   Exit Sub  End If  '比較セル範囲の値を取得  Set temp = rangeCompare(rangeCompare.Count)  Set temp = temp.Offset(WorksheetFunction.Max(0, WorksheetFunction.Max(Rev.OffRow) + Rev.ResRow - 1), 0)  Set temp = temp.Offset(0, WorksheetFunction.Max(0, WorksheetFunction.Max(Rev.OffCol) + Rev.ResCol - 1))  aryCompare = myWS.Range("A1", temp).Value  '出力先セル範囲を設定。  Set rangeResult = myWS.Range("M3") '結果基準セルを設定  numResult = 3  Set rangeResult = rangeResult.Resize(rangeCompare.Rows.Count, numResult + numCompare - 1)  ReDim aryResult(1 To rangeResult.Rows.Count, 1 To rangeResult.Columns.Count)  '着色する色を設定  clrCompare = RGB(255, 255, 153)  Call CompareMain(rangeCompare, Rev, aryCompare, rangeResult, numResult, aryResult, clrCompare) End Sub (以下次の回答へ)

961awaawa
質問者

お礼

こんばんはmathmiさん。 End If  If rangeCompare(1).Row + WorksheetFunction.Min(Rev.OffRow) <= 0 Or _   rangeCompare(1).Column + WorksheetFunction.Min(Rev.OffCol) <= 0 Then   MsgBox ("シート範囲外と比較しようとしています。")   Exit Sub の所でコンパイルエラーとなり修正候補はThen またはGo to となります。引っかかった所は「Or_」です。 ご指示を楽しくお待ちしております。

  • Mathmi
  • ベストアンサー率46% (54/115)
回答No.17

>最後辺りのNext k の所がひっきります。 エラーの種類は何なんでしょうか? aryResultやaryCompareの範囲外を参照してしまったのでしょうか? for-nextの組が足りないのでしょうか? 無いとは思いますが、Ifに対するEnd Ifがないのでしょうか? エラーメッセージすらないと、判断に困ります。 >Next j や Next i は消すべきでしょうか? いえ、必要です。

961awaawa
質問者

お礼

こんにちはmathmiさん。いつもお世話になり感謝します。 aryResult(i + 1, j + numResult + k) = aryCompare(i + nRow + colRelative - CompareRows + k, j + LBound(rev)) がデバッグで黄色くなり、インデックス有効範囲でない。となります。 後、Next k の下にNext j 、Next iと順番に入れた方がよろしいですか。

961awaawa
質問者

補足

こんにちはmathmiさん。いつもお世話になり感謝します。 aryResult(i + 1, j + numResult + k) = aryCompare(i + nRow + colRelative - CompareRows + k, j + LBound(rev)) がデバッグで黄色くなり、インデックス有効範囲でない。となります。 後、Next k の下にNext j 、Next iと順番に入れた方がよろしいですか。

  • Mathmi
  • ベストアンサー率46% (54/115)
回答No.16

すみません。挙動が分かりづらいので、もう少し具体的な例をお願いしたいです。 1.C63をW3にコピー、C63-5=C58からC58-50=C8を、Y3から51列分のBW3にコピー。W8とY3:BW3を比較して、同値なら着色。 2.C64をW4にコピー、C64-7=C57からC57-50=C7を、Y4からBW4にコピー、値を比較。 以下、基準セルから引く値を循環させながら繰り返し。 (引く行数である-5/-7/-50等は変更可能。-50は固定、-5/-7は循環して繰り返し) つまり、今まではC12とC5からI5を比較していたものを、C63とC58からC8の比較に変更する、という事でいいんでしょうか? No12の段階から以下を修正します。なお、コメント部分は変更しなくても挙動に影響ありません。 [SetData]モジュールの Dimを設定している場所に[Dim CompareRows As Integer '比較する行数]を追加。 [Set cellCompare = Range("C12") '比較の基準セルであるC12。]を[Set cellCompare = Range("C63") '比較の基準セルであるC63。]に変更 ****************************** 'リボルビングする行数を、各列毎に設定。 ReDim rev(3 To 9) '対象とするC列からI列の列番号。 rev(3).v = Array(-5, -7, -9) rev(4).v = Array(-5, -7, -9) rev(5).v = Array(-5, -7, -9) rev(6).v = Array(-5, -7, -9) rev(7).v = Array(-5, -7, -9) rev(8).v = Array(-5, -7, -9) rev(9).v = Array(-5, -7, -9) *******これを以下に変更******* 'リボルビングする行数を設定。 ReDim rev(3 To 3) '対象とするC列の列番号。 rev(3).v = Array(-5, -7, -9) CompareRows = 50 ****************************** [Set rangeResult = myWS.Range("M3").Resize(UBound(aryCompare, 1) - cellCompare.Row + 1, UBound(rev) - LBound(rev) + numResult)]を[Set rangeResult = myWS.Range("M3").Resize(UBound(aryCompare, 1) - cellCompare.Row + 1, UBound(rev) - LBound(rev) + numResult + CompareRows)]に変更。 最後[Call CompareMain(aryCompare, cellCompare, rev, numResult, rangeResult, aryResult, clrCompare)]を[Call CompareMain(aryCompare, cellCompare, rev, numResult, rangeResult, aryResult, clrCompare, CompareRows)]に変更。 [CompareMain]モジュールの 最初[Sub CompareMain(ByRef aryCompare As Variant, ByRef cellCompare As Range, ByRef rev() As Revolving, ByRef numResult As Integer, ByRef rangeResult As Range, ByRef aryResult As Variant, ByRef clrCompare As Long, ByRef CompareRows As Integer)に変更 [Dim i As Long, j As Integer, n As Integer]を[Dim i As Long, j As Integer, k As Integer, n As Integer]に変更。 ****************************** For j = 0 To UBound(aryResult, 2) - numResult colRelative = rev(j + LBound(rev)).v(i Mod (UBound(rev(j + LBound(rev)).v) + 1)) aryResult(i + 1, j + numResult) = aryCompare(i + nRow + colRelative, j + LBound(rev)) *******これを以下に変更******* For j = 0 To UBound(rev) - LBound(rev) colRelative = rev(j + LBound(rev)).v(i Mod (UBound(rev(j + LBound(rev)).v) + 1)) For k = 0 To CompareRows aryResult(i + 1, j + numResult + k) = aryCompare(i + nRow + colRelative - CompareRows + k, j + LBound(rev)) Next k ****************************** 変更点は、ほぼCompareRowsを追加しただけです。 これでどうでしょうか? 追記:コードを作り直してもいいでしょうか? cellCompareで基準セルを設定していますが、これを参照元セル範囲(C12:C10000等)にした方がすっきりしそうなので、もう一度練り直してみようかと思っています。 そちらで適宜変更する個所は、そう変わらないと思います。

961awaawa
質問者

お礼

こんばんはmathmiさん。最後辺りのNext k の所がひっきります。Next j や Next i は消すべきでしょうか?

  • Mathmi
  • ベストアンサー率46% (54/115)
回答No.15

>同じ形の別のsheetで、M3にD列を軸とした形にしたい場合は何処を変えるとよろしいですか。 「 Set cellCompare = Range("C12") '比較の基準セルであるC12。」のC12を、比較の基点となるセルに変更します。この場合はD12でしょうか。 ******************************  ReDim rev(3 To 9) '対象とするC列からI列の列番号。  rev(3).v = Array(-5, -7, -9)  rev(4).v = Array(-5, -7, -9)  rev(5).v = Array(-5, -7, -9)  rev(6).v = Array(-5, -7, -9)  rev(7).v = Array(-5, -7, -9)  rev(8).v = Array(-5, -7, -9)  rev(9).v = Array(-5, -7, -9) ****************************** 以上のリボルビング配列を適宜変更します。 例えばD列からF列と比較したい場合、[ReDim rev(4 To 6)]とします。 下の配列も、rev(4).v、rev(5).v、rev(6).vだけ設定して、rev(3).v、rev(7).v、rev(8).v、rev(9).vは削除します。 この配列を変更しないと、D12と、C7~I7を比較する事になってしまいます。 以上の二か所を変更すれば大丈夫の筈です。

961awaawa
質問者

お礼

こんばんはmathmiさん。この流れでの質問が出来たのでよろしければご協力お願いいたします。 ざっくり言いますと、今までのがリボルビングセルコピペだったのを改造して、リボルビング範囲横化コピペにしたいです。 C63からを対象軸にして、W3にC63の値を入れ、対象範囲はC列(C63)から-50行をリボルビング性能を利用して横化してY3から下に値をコピペするという形にして欲しいです。 色のことに関してはこの前と同じで、Wの値と水平上にある同じ値のセル背景を全部同じ色にします。 rev(3).v = Array(-5, -7, -9)の形を利用したら初めの範囲はC63-5なんで範囲はC8:C58になりY3に横化して値をコピペという形です。 できるものなんですかね。

961awaawa
質問者

補足

なんでそんなに私が知りたい所を忖度出来たんですかw(゜o゜)w 凄い!ありがとうございます。お礼でまた質問させて頂きます。

  • Mathmi
  • ベストアンサー率46% (54/115)
回答No.14

>この質問の続きをさせて頂けませんか? はい。大丈夫です。 何でしょうか?

961awaawa
質問者

お礼

こんばんは、mathmiさん。 同じ形の別のsheetで、M3にD列を軸とした形にしたい場合は何処を変えるとよろしいですか。

  • Mathmi
  • ベストアンサー率46% (54/115)
回答No.13

>これはNo.9の解答に対して行えばよろしいですか? はい。その通りです。 変更する箇所の指定が、No.9のコードにしかなかった為に、明示せずとも分かるだろうな、と判断してしまいました。 以後は、一部変更するだけでも、コード全文載せた方がいいでしょうか?

961awaawa
質問者

お礼

こんにちはmathmiさん。やってみましたが、それでも aryResult(i + 1, j + numResult) = aryCompare(i + nRow + colRelative, j + LBound(rev)) が先述したのと変わらないエラーになります。 revの値も変えずそのままで、何度も目で文字間違い等ないか 確認したんですけど、変わらずです。

961awaawa
質問者

補足

mathmiさん!!!すみません。!!! いつの間にか(A1:I10000)のところが (A1:D10000)に変わってました。(T_T) すみません。治してやってみたら素晴らしくスッキリとたんじかんで成功しました。ありがとうございました。

  • Mathmi
  • ベストアンサー率46% (54/115)
回答No.12

リボルビング配列に正の値を入れた時にエラーが発生するバグをデバッグしてみました。先のコードの、以下の2点を変更してみて下さい。 >Dim i As Integer, temp As Variant この行を、以下の2行に変更して下さい。 ****************************** Dim i As Integer, j As Integer, temp As Variant Dim nMax As Integer, nMin As Integer 'リボルビングの最大値、最小値を格納。 ****************************** >'着色する色を設定 >clrCompare = RGB(255, 255, 153) この行の直前に、以下を追加して下さい。 ******************************  'リボルビング配列の最大値、最小値を取得  For i = LBound(rev) To UBound(rev)   For j = 0 To UBound(rev(i).v)    If nMax < rev(i).v(j) Then     nMax = rev(i).v(j)    End If    If rev(i).v(j) < nMin Then     nMin = rev(i).v(j)    End If   Next j  Next i  '比較する値の範囲を確認。  If cellCompare.Row + nMin <= 0 Then   MsgBox ("シート範囲外の値を比較しようとしています。マクロを中止します。")   Stop  End If  If 0 < nMax Then   aryCompare = myWS.Range(Range("A1"), myWS.Cells(UBound(aryCompare, 1) + nMax, UBound(aryCompare, 2))).Value  End If ******************************

961awaawa
質問者

お礼

これはNo.9の解答に対して行えばよろしいですか? 今、頭がこんがらがってます w

  • Mathmi
  • ベストアンサー率46% (54/115)
回答No.11

申し訳ありません。間違って古い回答を送ってしまいました。 >エラー9になりインデックスが有効範囲にありません aryResultの範囲外に値を設定しようとしたか、aryCompareの範囲外から値を取得しようとしている模様です。 こちらでRev配列に正の値を入れてみると、同じエラーがでました。 もし、そちらでも同様にしていたのならば、エラーの原因はそこだと思います。 修正しますので、デバッグは少々お待ちください。

961awaawa
質問者

お礼

謝られるなんてとんでもないです。ご助力頂けていつも感謝しかないです。 あんなに丁寧に説明されてたら参考書とか作ってるのかなって思えるぐらい有難いです。 待たせて頂きます。(^^)

関連するQ&A

  • Excel2016でリボルビングコピペ

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

  • 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で質問です。

    sheet1にセルD3から下に向かってデータが2000個以上入ってます。 (1)マクロボタンを押します。 (2)D列で任意の行番号の値(今回は1000行目)をコピーします。 (3)sheet2,sheet3,sheet4のN6に(2)をペイストします。 (4)、(1)に戻りマクロボタンを押します。 (5)、(2)に行きまして、1つ下の1001行目をコピーします。 (6)、(3)に行きN6の下のN7にペイストします。 これをマクロボタンを押す度に繰り返したいです。

  • 前回Excel2007で複数のセルを併せて

    前にも似たような形で質問しましたが、今回は自分で検索したい形で値を入れたタイプなんです。 (1)列HIJの3行目から下に向かって既に入ってあるデータを消して (2)range(A10:C12)に自分が検索したい(ワイルドカードも時には含めた)形で値A~Fのいずれかを各セルに入れてからマクロボタンを押して (3)range(A10:C12)の複数のセルの値を併せて参照して (4)(列OPQの最後尾には新しいデータが常に追加されます)O列+P列+Q列から検索し(その検索された1つ下のセルを黄色く色を着けて)、検索された1つ下の値をコピーして (5)列HIJの3行目から下に向かってそれをペイストして表したいです。 誰か教えて下さい。お願いします。

  • Excel2007で複数を単体として検索

    前にも似たような形で質問しました。今回は、range(A10:C12)に値A~H + ワイルドカードを自分で1つを選び入れて、1つの形にして検索できるタイプにしたいです。 (1)列HIJの3行目から下に向かって既に入ってあるデータを消して (2)range(A10:C12)に自分が検索したい(ワイルドカードも時には含めた)形で値A~Hのいずれかを各セルに入れてからマクロボタンを押して (3)range(A10:C12)を単体とし、それを参照して (4)(列OPQの最後尾には新しいデータが常に追加されます)O列+P列+Q列から検索し、その検索された1つ下のセルを黄色く色を着けて、その値だけをコピーして (5)列HIJの3行目から下に向かってそれをペイストして表したいです。 誰か教えて下さい。お願いします。

  • Excel2007で困ってます1

    全くわからなくてお手上げ状態です。誰か助けて下さい。 Sub test1() Range("O4:O1012").Value = Range("O3:O1011").Value End Sub [("O3:O1011")には関数も入ってるので値だけを("O4:O1012")に入れて、1行ずらした形にします] Sub test2() Range("O3").Value = Selection ActiveCell.Offset(1).ActivateEnd Sub [test1で空いたセルO3に、選択されたE3の値を入れまして、E4、E5、E6、…と移動してはO3に入れていきます。] Sub test3() Range("X5").Value = Selection ActiveCell.Offset(1).ActivateEnd Sub [test2でE3から始まる値を1つずつO3に入れると、それに伴って、セルC3の値をX5に1つずつ入れてはC4、C5、C6、…と移動してX5に入れていきます。] ……Excel2007で困ってます2に続きます……

  • Excel2007で質問?です

    E3から、各セルにABCのいずれかが入っており、下に向かっているデータがあります。 それとは別でO3にもE3のような形でデータも入っており関数も入ってます。 今回の私の質問はここからになります。 先程のE列のデータをマクロボタンを押すたびにE3から1つずつ下に向かっていきO3に1つずつ値だけをコピー挿入し今までの値を下へ1つずつずらしたいです 。 それまでにあったO3から下のデータ群には既に関数が入っており値だけが1つずつ下にずれていく形にしたいです。O3から下の関数は動かないようにしたいです。 本当にわかりませんのでお願いします。エラーになる度にヘコみます。

  • Excel2007で最下行のコピーについて

    Excel2007で最下行のコピーについてなんですが、上手くいきません。そこで質問させて頂きます。 sheet3のセルO6、セルP6、セルQ6から下に向かって5000行目までに格子と関数が既に入ってます。 が、しかしコピーをしたい数値は今のところはO、P、Qの6行目にとどまっています。なので最下行はセルOPQの6行目になります。 sheet3のセルOPQの最下行数値をsheet4のセルABCの2行目にコピぺしたいです。 そこで作ってみました。基軸と言いますかsheet1を選択してから標準モジュールに Sub test() Worksheets("sheet3").Select Dim n As Long,t As Long n = Cells(Rows.Count,"O").End(xlUp).Row + 1 t = Cells(Rows.Count,"Q").End(xlUp).Row + 1 Range("O" & n, "Q" & t).Value.Select Selection = Worksheets("sheet4").Range("A2:C2").Value End Sub と書きましたがエラーになります。どの様すればよろしいですか?お願い致します。

  • (Excel VBA)またまた困っています・・・ o...rz

    どうもrozzerです。 またもや高くそびえ立つVBの壁に激突して死にかけてしまっています・・・orz 今度は単純なマクロだと高を括っていたので鼻歌交じりでマクロを組んでいたのですが どうも如何せん上手くいきません! もう死にたいです! 現在エクセルで、とある業務で使うデータベースをマクロを組み最適化を図っています。 まず A列の2行目から任意の行に(10行までしかなかったり、1000行まであったりとランダムにあるとする)、任意の整数値があるとします。 その値の合計を、セル【B1】に表示させたいのです。 ですが、ここで問題なのですがセル【B1】に入力される式はSUM等の関数式ではなく、ただの「数値」として表示させたいのです。 つまりA列の2行目から任意の行(最終行まで)に入力されている整数値に、後々、変更があった場合に【B1】に表示されている値が、一番初めに合計の値をはじき出した値から変化しない様にしたいのです。 そして今度はセル【C1】に、A列の2行目から任意の行(最終行)までの合計値を「SUBTOTAL」関数[=subtotal(9,C1:**)]を入力したいのです。 ここまでの動作をマクロ化したいのですが、どうも如何せんどうも如何せん上手くいきません! もう死にたいです! 何卒、ご教授頂けましたら幸いで御座います。

  • Excel2007で乱数をつくりコピペしたいのです

    Excel2007で乱数をつくりコピペしたいです (1)、マクロボタンを押します。 (2)、1~10の数字を乱数で(U6:U15000)に表示(同じ数字が連なっても大丈夫)したらAA3に数値ができあがります。 (3)、(U6:U15000)に出来た乱数をsheet5のC6から下にコピペして、 (4)、(2)でAA3に数値ができあがるのでそれをsheet5のC4にコピペします。 (5)、(1)に戻ってマクロボタンを押すと(2)(3)(4)と行くのですがコピペする場所はCから一つ右隣のDと、マクロボタンを押す度に右隣にコピペしたいです。 ご協力お願いいたします。

専門家に質問してみよう